Android逆向进阶(7)——揭开Hook的神秘面纱

访客 379 0
本文来源:i_春秋

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

0x00 前言

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

其他 Android逆向进阶 系列课程

人物说明

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

竹山(大白居)

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

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

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

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

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

好好,我们慢慢来。

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

技能(内容)

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

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

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

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

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

1. 武器 get

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

1.1 经脉(环境)

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

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

1.2武器

xposedBridgeApi-82.jar.jar。

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

2.武器演示

Android逆向进阶(7)——揭开Hook的神秘面纱-第1张图片-网盾网络安全培训

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

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

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

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

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

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

Android Studio 3.0 基本配置

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

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第2张图片-网盾网络安全培训

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第3张图片-网盾网络安全培训

(3)填写Androidmanifest.xml文件。

Android逆向进阶(7)——揭开Hook的神秘面纱-第4张图片-网盾网络安全培训

  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包内容,再次打包进去会冲突。

Android逆向进阶(7)——揭开Hook的神秘面纱-第5张图片-网盾网络安全培训

(5)基本Xposed模型创建

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第6张图片-网盾网络安全培训

小白,听我啰嗦两句。

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

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

内功实现

Android逆向进阶(7)——揭开Hook的神秘面纱-第7张图片-网盾网络安全培训

这里一句话就可以实现。

XposedBridge.log("HAI_app: " + loadPackageParam.packageName);

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

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

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

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

写入包名+类。

测试成果

Build APK

安装进行测试。

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第8张图片-网盾网络安全培训

思考

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

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

小白的自我修行

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

进行简单的尝试。

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第9张图片-网盾网络安全培训

然后进行测试。


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

0x03木桩实战练习

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

知道了师傅。

木桩信息收集

1.基本信息

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

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

恩,我们一般要收集

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

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

小白的操作

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第10张图片-网盾网络安全培训

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

然后是简单的逻辑手机。

Android逆向进阶(7)——揭开Hook的神秘面纱-第11张图片-网盾网络安全培训


2.反编译信息收集

小白啊,收集玩了吗?

收集完了师傅。

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

师傅的操作

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

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

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

定位。

查看类名,进行记录。

Android逆向进阶(7)——揭开Hook的神秘面纱-第12张图片-网盾网络安全培训


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

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

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第13张图片-网盾网络安全培训

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

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

木桩实战练习

环境搭建

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

先把环境调整好。

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第14张图片-网盾网络安全培训


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

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第15张图片-网盾网络安全培训

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

第二个参数不动

第三个参数方法名

第四个参数 输入的参数

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

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

f for木桩

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第16张图片-网盾网络安全培训

小白,你看这第一招

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

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

然后再来看这一招

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

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

然后最后一招。

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

这一招就是拦截返回值。

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

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

小白的思考

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

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

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

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

f 木桩测试

Android逆向进阶(7)——揭开Hook的神秘面纱-第17张图片-网盾网络安全培训

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

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

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

思考一

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

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

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

Android逆向进阶(7)——揭开Hook的神秘面纱-第18张图片-网盾网络安全培训

进行测试。

成功hook。

思考二

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

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

0x05 结束语

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

标签: 安卓安全

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~