android hook 模拟点击_hook从未如此丝滑

这是 酒仙桥六号部队 的第 138 篇文章。

全文共计2143个字,预计阅读时长7分钟。

朋友们好啊

我是葫芦兄弟掌门人铁头娃!

刚才有个朋友问我:“铁老师,发生甚么事了?”

我说怎么回事?

给我发了几张截图,我一看!

奥!原来是昨天有个app,54多兆。

不仅有壳抓包还加密。

塔门说:

有一个说是我对这个app做测试,脱壳脱的头发都没了。

铁老师你能不能教教我简单的测法?

帮我缓解下我的工作量。

我说可以~

我说你一个一个脱壳练死劲不好用,他不服气。

我说小朋友,你用脱壳来比我hook。

他说比不过,

他说你这个没用,

我说我这个有用。

这是化劲,app测试是讲化劲的,四两拨千斤。

他非要和我试试!

我啪一下就站起来,上来就先搭建环境

本次测试采用模拟器环境。

frida环境搭建略过,*度资料很多。

使用的是mumu模拟器(adb连接比*神模拟器方便很多)。

以及httpdecrypt

(https://github.com/lyxhh/lxhToolHTTPDecrypt)

首先连接adb并运行frida-server;

C:\Users\xxx>adb connect 127.0.0.1:7555connected to 127.0.0.1:7555C:\Users\xxx>adb shellroot@x86:/ #

启动httpdecrypt;

python3 app.py

在运行时可能遇到报错;

[ERROR] device not found, please wait for few seconds and retry.

解决:全局搜索get_usb_device,修改为get_usb_device(timeout=1000)即可。

下载burp插件HTTPDecrpyt并进行安装。 https://github.com/lyxhh/lxhToolHTTPDecrypt/releases

这个app不讲武德

首先正常对app抓包;

42434b4935437f38147e53d0cdefc7d7.png

可以看到app对所有参数都进行了加密,不论是请求包还是返回包;

用神器jadx对app进行逆向试试;

5e659e7e1d72afef490c735f20aec918.png

有壳,还有加密。

他上来就是一个加壳,一个加密,我全都防出去了嗷

浏览器访问http://127.0.0.1:8088/

98012fa37e6d4840a5c8d7c79246aa5c.png

找到目标app,将app包名com.xxx.xxx填入框中并点击Confirm;

然后点击Hooks功能;

在Match中输入刚才的包名,点击Confirm。

71f01f831ed38e03d7f46628b2fbe9ae.png

等待输出:

[INFO] hooks class enum done...

此时,已经将该app所有方法进行了hook。

743f3a0531e9e0ad31d76746c061a375.png

我们重复刚才的操作。

根据数据包中加密后的数据,找到相应的方法。

3bfd3598c7fff2f29bff3f6dcd22c2ac.png

com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES.encrypt(argType0 : object argType1 : string)

可以看到是这个函数将请求包的数据进行了加密。

19dfaff805fe5b6624bbb13cf86ad21f.png

com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES.decrypt(argType0 : object argType1 : string)

是返回包的解密函数。

我们看下加密函数:

com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES.encrypt(argType0 : object argType1 : string)

可以看到加密函数需要两个参数,分别是对象和字符串。

但是我们需要知道对象参数的具体类型。

现在转到Finds功能中,搜索函数的类名。

com.xxx.xxx.ybblibrary.comm.commTools.tool

点击Confirm。

找到方法名EncryptionTool$AES.encrypt。

5770abd2adeccc5013d43ecad2f5a4da.png

可以看到加密函数参数中,对象类型的参数具体类型为static。

选择到encrypt,然后右键发送到toBurp功能。

86f822541af399fe7ee76c596710b3a6.png

转到toBurp功能。

点击Confirm。

61e84ae868a42055850196ae556bbc6b.png

点击add。

由于这个加密函数有两个参数,所以需要自己编辑代码(默认为一个参数)。

49b323498bffc42aa8aac3b6ff48a1ae.png

由于对象参数类型为static,所以我们选择Generate export static script。

如果参数为动态,那我们选择Generate export instance script。

现在可以看到,在custom中会生成代码。

9b2a5068622f5bfe56023c65fd8df8eb.png

代码中,arg0是传过来的加密字符串,arg1是Android的Context对象。

添加代码:

var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();

再用同样的方法生成decrypt的代码。

最终代码为:

9e4327f65546baf1c24d630c740b8a67.png

点击左上角loadScript 将脚本发送到burp。

7c06b8e7226ed95cd5528dc41b515aeb.png

在burpsutie中进行配置。

4e96aee882b47b12f2af7dd07d8fcc89.png

点击send to HttpDecrypt 打开配置界面。

e4a4dc1bc3e2b0304f27ca28b72d80a1.png

然后就可以对加密后的数据进行加解密了。

0b076baa7f502e9ccb3a9043ae99885b.png

耗子为知,好好反思

app测试的时候,hook的难点在于定位所需要hook的函数和参数。然后就是根据函数名和参数名进行hook代码的编写。

httpDecrypt提供了较为方便的集成的环境。相比脱壳看代码,这种调试的方法会省下我们大量的时间。

d362816207db62e3a9da6adfe042708c.png

7528d586bf1d515afe716d7554034d36.png

a36de9d0514e03f587b03f64cb5c55ff.png

b4d04270944eb02edb67aa35e3c94039.png

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页