本文作者:i春秋作家——HAI_

0×00 前言

HAI_逆向使用手册(想尝试一下新的写法)

其他 Android逆向进阶 系列课程 <<<<<<<

人物说明

小白:已经掌握了一些基础的逆向技能的菜鸟。
小红:小白的女朋友。
大白:小白的师傅。

竹山(大白居)

师傅师傅,我今天下山听见有人说,江湖中出现了一种为Hook的武林秘籍。据说十分厉害,可以拦截System。拦截程序猿开发的出来app。

小白啊,你知道什么是Hook吗。

听说过,但是却不明白什么是hook。

Hook这个秘籍啊,说白了是对函数进行重写。我们重写这个函数,就可以实现我们想要的目的,拦截呀,还有其他的内容。

师傅,我想学这个Hook秘籍。

好好,我们慢慢来。

先说说我们今天学习的Hook技能吧。

技能(内容)

1.一个新的武器(Xposed框架)的使用
2.练习使用Hook的第一重内功(Android Studio 3.0 +Xposed)
3.木桩实战练习
4.木桩f进阶(小白的自我进步)

0×01 一个新的武器(Xposed框架)的使用

小白,认真学习哦,我们先来试试我们的新武器。Xposed,以后江湖闯荡也有一个防身的技巧。

小白你等等,我去找找这个武器我放在哪了。所谓工欲善其事必先利其器。

好了,师傅你快去,别啰嗦了。

1. 武器 get

小白,要想使用这个武器,就要先打通经脉。

1.1 经脉(环境)

1.Root,手机root,无root不安卓。打通root经脉我们才能进行之后的操作。

2.Xposed框架安装,想要使用Xposed这个武器,就要先能拿的起来才能谈使用。

1.2武器

xposedBridgeApi-82.jar.jar。

这个就是我们的武器了,小白,来,我给你演示演示这个武器的基本使用方法。

2.武器演示

我们这里使用Xposed武器拦截packageName,然后进行输出。

其实这个武器还是搭配内功才能发挥最大的能力。

搭配内功,师傅,这个怎么搞。

莫急莫急,我们一步一步来。

0×02 练习使用Hook的第一重内功(Android Studio 3.0 +Xposed)

小白,我先传授你第一重内功的运行穴位。要好好听哦。

Android Studio 3.0 基本配置

我们先来给内容运行提供一个环境。

(1)首先构建一个不需要Activity的项目

(2)然后导入jar包。并且右键add as Library。

(3)填写Androidmanifest.xml文件。

  <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <meta-data
            android:name="xposeddescription"
            android:value="Hook log test" />
        <meta-data
            android:name="xposedminversion"
            android:value="53" />

(4) 修改依赖方式

Xposed里已有该jar包内容,再次打包进去会冲突。

(5)基本Xposed模型创建

使用alt+enter实现一个方法。

小白,听我啰嗦两句。

handleLoadPackage,这个方法用于在加载应用程序的包的时候执行用户的操作。

LoadPackageParam loadPackageParam:,这个参数包含了加载的应用程序的一些基本信息。

内功实现

这里一句话就可以实现。

XposedBridge.log(“HAI_app: ” + loadPackageParam.packageName);

这里我们要进行思考了,什么是 XposedBridge.log了。

posedBridge.log的打印会输出到xposed框架的启动程序的日志功能中。这样也更方便我们的查看。

我们来做配置的最后一步。设置开始地方。

新建assets目录里,新建一个file。file名称为xposed_init。

写入包名+类。

测试成果

Build APK

安装进行测试。

手机安装然后重新启动即可。

思考

所谓师傅领进门,修行看个人。所以啊。

我知道了师傅,我们是不是可以通过这个简单的来进行过滤啊。比如写一个简单的分析系统。或者是其他的东西,我们还可以对这个进行过滤。我先自己去试试。

小白的自我修行

通过这个运行路径,对报名进行分析和过滤。

进行简单的尝试。

使用昨天学的java字符串的substring来进行对字符串过滤。

然后进行测试。

当然也可以针对这个进行更加详细的说明。

0×03木桩实战练习

小白,来来,师傅这里给你找了一个木桩,我打给你看看。这个hook是怎么法功的,怎么打的。要学好哦。

知道了师傅。

木桩信息收集

1.基本信息

小白啊,用我们之前使用过的一个武器,来收集这些基本信息吧。

师傅,我们一般都收集什么信息啊。

恩,我们一般要收集

1.木桩的包名
2.木桩的简单的逻辑
….

小白,这个你就自己收集把。

小白的操作

首先是包名。使用武器,apkhelper。

获取到包名信息。com.example.login

然后是简单的逻辑手机。

2.反编译信息收集

小白啊,收集玩了吗?

收集完了师傅。

好,我们接下来收集反编译信息。知己知彼,方能百战不殆。

师傅的操作

首先我们来看看我们要收集的东西。

1.关键的类名。
2.关键的函数位置。

来用Android Killer武器反编译木桩。

定位。

查看类名,进行记录。

小白,看清楚,是这个样子进行记录。

原来是这样。com/example/login/MainActivity;
但是我们要改成这样的。com.example.login.MainActivity

现在就需要定位到关键函数了。

这个login就是我们要Hook住的函数啦。

Ljava/lang/String;Ljava/lang/String;从这里我们可以看到是两个输入内容。并且类型是String。我们现在要做的就是要hook住这个输出,然后对其进行输出。

木桩实战练习

环境搭建

好了,小白,前期资料收集的差不多了。我现在要发功了,要看清楚我的使用哦。

先把环境调整好。

然后先做一个简单的过滤。

这个时候,收集的包名就排上用场了。

因为是hook的是方法,所以我们这里使用一个方法。

第一个参数,要hook的包名+方法名,这个也是我们收集好的。

第二个参数不动

第三个参数方法名

第四个参数 输入的参数

我们有两个String类型的参数,所以才这样写

最后一个参数,就是做一个监听。可以监听这个方法的使用前和使用后。

f for木桩

小白,一切准备你就须,看为师给你f这个木桩。

小白,你看这第一招

XposedBridge.log("ZHUZHU520:LoginName:"+param.args[0]);

这一招搞它的第一个输入。

然后再来看这一招

XposedBridge.log("ZHUZHU520  assward:"+param.args[1]);

这一招搞它的第二个输入。

然后最后一招。

XposedBridge.log("ZHUZHU520:end???:"+param.getResult());

这一招就是拦截返回值。

小白啊,这里有一个需要思考的内容。

这样hook的意义或者作用是什么?

小白的思考

师傅,我觉得首先,这样可以拦截下输入的参数,还有返回的值。如果在hook里做一个转发信息的技能。那不就可以成功的对登录账户的人进行账号和密码的获取。

这不就是和钓鱼一样了嘛。

我觉得这是一个很大的漏洞,如果登录厂商没有做相应的处理,那这里我可以拿这个搞死他。

好了,小白,你说的很对,我们现在来对这个进行下测试吧。

f 木桩测试

小白啊,你看这里我们就成功的拦截内容了。小白给你一个任务,用hook f掉这个木桩,我希望他能登录成功,哪怕我输入的对的。

0×04 木桩f进阶(小白的自我进步)

XposedBridge.log("ZHUZHU520:end???:"+param.getResult());

思考一

师傅之前使用了一个param.getResult()获取了返回值,那我是不是可以使用相同的set方法,重新对这个进行赋值啊。

根据各种方式,我们知道了这里的返回值就是Z,也就是布尔型。

说干就干,争取f掉木桩。

进行测试。

成功hook。

思考二

除了可以hook返回值,还可以hook输入值。

但是这样有点画蛇添足的感觉。

0×05 结束语

小白啊,hook就学到这里吧。有时间我们继续学习hook 技能。回去多练练。

Android逆向进阶(7)——揭开Hook的神秘面纱的更多相关文章

  1. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  2. 带你揭开ATM的神秘面纱

    相信大家都用过ATM取过money吧,但是有多少人真正是了解ATM的呢?相信除了ATM从业者外了解的人寥寥无几吧,鄙人作为一个从事ATM软件开发的伪专业人士就站在我的角度为大家揭开ATM的神秘面纱吧. ...

  3. 揭开Future的神秘面纱——结果获取

    前言 在前面的两篇博文中,已经介绍利用FutureTask任务的执行流程,以及利用其实现的cancel方法取消任务的情况.本篇就来介绍下,线程任务的结果获取. 系列目录 揭开Future的神秘面纱—— ...

  4. 揭开Future的神秘面纱——任务执行

    前言 此文承接之前的博文 解开Future的神秘面纱之取消任务 补充一些任务执行的一些细节,并从全局介绍程序的运行情况. 系列目录 揭开Future的神秘面纱——任务取消 揭开Future的神秘面纱— ...

  5. 揭开Future的神秘面纱——任务取消

    系列目录: 揭开Future的神秘面纱——任务取消 揭开Future的神秘面纱——任务执行 揭开Future的神秘面纱——结果获取 使用案例 在之前写过的一篇随笔中已经提到了Future的应用场景和特 ...

  6. SparkSQL大数据实战:揭开Join的神秘面纱

    本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介 ...

  7. 揭开HTTPS的神秘面纱

    摘自:https://www.cnblogs.com/hujingnb/p/11789728.html 揭开HTTPS的神秘面纱   在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了 ...

  8. 从一个Demo开始,揭开Netty的神秘面纱

    本文是Netty系列第5篇 上一篇文章我们对于I/O多路复用.Java NIO包 和 Netty 的关系有了全面的认识. 到目前为止,我们已经从I/O模型出发,逐步接触到了Netty框架.这个过程中, ...

  9. 揭开Docker的神秘面纱

    Docker 相信在飞速发展的今天已经越来越火,它已成为如今各大企业都争相使用的技术.那么Docker 是什么呢?为什么这么多人开始使用Docker? 本节课我们将一起解开Docker的神秘面纱. 本 ...

随机推荐

  1. Apache Prefork、Worker和Event三种MPM分析

    三种MPM介绍 Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到 ...

  2. MySQL查找SQL耗时瓶颈 SHOW profiles

    http://blog.csdn.net/k_scott/article/details/8804384 1.首先查看是否开启profiling功能 SHOW VARIABLES LIKE '%pro ...

  3. Java查看项目目录以及导入项目

    1.查看项目目录 右击项目,选择properties,选择resource,查看location 2.导入已有项目 (1)右击项目 ,选择import (2)在弹出的窗口中选择Existing pro ...

  4. 6. Uniforms in American's Eyes 美国人眼里的制服

    6. Uniforms in American's Eyes 美国人眼里的制服 (1) Americans are proud of their variety and individuality,y ...

  5. linux复制文件并修改文件名

    #!/bin/bash #复制/casnw/backup/db203oradata/目录下的所有后缀名为dmp的文件拷贝到/casnw/backup/dbmonthbak 目录下cp -f /casn ...

  6. nullptr(c++11)

    1.概念 用字面值常量nullptr来初始化或赋值来得到空指针 2.c++11之前使用NULL或0 1)NULL是一个宏定义(预处理变量),定义在cstdlib中,其值就是0:对于预处理变量,预处理器 ...

  7. hadoop Mapreduce组件介绍

    MapReduce原理 MapRedcue采用‘分而治之’的思想,对大规模数据集的操作,分发给一个主节点下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果.Mapreduce就是任务 ...

  8. jquery页面隐藏和展开之间切换

    html页面: <p id="myp4">默认情况下,这段话是隐藏的,点击按钮以后,这段话就展开,并且按钮上的值改变</p> <button id=& ...

  9. 记录:CSS特殊性——权值规则

    浏览器是根据权值来判断使用哪种css样式的,权值高的就使用哪种css样式. 下面是权值的规则: 标签的权值为1,类选择符的权值为10,ID选择符的权值最高为100.例如下面的代码: p{color:r ...

  10. 1.gil全局解释器锁, 2. 死锁与递归锁 3. 信号量 4. Event事件 5. 线程queue

    gil本质就是一把互斥锁,相当于执行权限,每个进程都会存在一把gil,同一进程内的多个线程必须抢到gil 之后才能使用cpython解释器来执行自己的代码,同一进程下的多线程不能并行,但可以实现并发 ...