Frida Hook踩坑记录&Bybass SSL Pining进行抓包

要对一个APP进行复测。拿到之后开启模拟器,装好APP之后,发现无法正常抓包:

询问之后得知APP存在SSL证书机制,遂想到用frida 进行hook,但是平台是windows,踩了不少的坑。 不过好在最后都解决了,对于一个没接触过APP渗透测试的菜鸟来说,经过这几天不断的踩坑和查资料,倒是学到了很多知识。

首先是安装frida的问题。一直卡在wheel处,查了好久,原因是安装脚本先在主机查找frida-py3.8-win-amd64.egg文件,如果没有则通过网络进行下载,但是源是国外的,在国内网络并不通畅,查了资料发现一个比较简单的解决方法如下:

终于frida装好了,接下来是adb(当时是因为临时任务就用的简洁版adb,后来重新配置了环境):

然后通过adb.exe连接夜神模拟器(当时还不知道出现两个device是异常情况,也没报错就没在意。后来弄懂了之后才知道这个多出来的emulator-5554是因为同时有其他应用在调用adb所致,解决方法就是kill掉再重新连接。):

接着将hluda-server push 到设备中:

进入模拟器Shell并加权运行hluda:

重新启动一个终端,运行frida-ps -U查看进程任务:

当时到这里的时候有个疑问,这么多的进程我怎么能准确定位目标的app包名呢?

后来想明白,只需开启目标APP,将其他无关app关掉,就可以准确判断目标名称了。

然后frida -U -f 注入进程,同时进行%resume:

这里当时同样没懂为什么一定要resume一下。后来特意试了一下,frida注入的时候,目标app会自动退出,而使用resume操作之后会重新唤起app。resume-(中端后重新开始嘛)

然后使用frida-skeleton进行hook,问题就开始一个一个出来了。

首先是python报错codec can't decode byte 0xb2

首先想到是不是平台环境问题,根据错误提示修改lib.utils.shell.py为utf-8和unicode_escape

再次运行,仍然报错,换了个错误 unknow arch(好家伙,直接无法识别平台了,,):

又尝试在Linux平台进行hook,安装frida同windows一样,先git frida文件夹,再上载egg文件,进入frida文件夹里面进行setup.py install。 然后安装adb,无报错,接着adb connect,又发现设备离线:

image

查了问题之后,简单快捷的方法就是将虚拟机和模拟器同时重启,然后执行adb kill-server & adb start-server之后重新connect

image

然后adb push & 运行server,然后frida -U -f 注入进程,发现问题:

提示缺少默认的gadget.so文件,去网站下载了arm64.so文件,上传至/home/anny/.cache/frida/目录下,成功解决问题。

然后上传frida-skeleton文件夹,使用python3运行,又发现提示frida server not run问题

然后frida-ps -U检查发现hluda-server处于启动状态,查询了很久,无果。

眼瞅着下班了我这环境还没配好,就很难受,只能先关了电脑回家。

在家里歇着的时候又不甘心,又打开电脑继续查问题。

然后查看脚本帮助信息的时候,突然发现-v参数,输出调试信息。

既然是输出调试信息那么就可能包含具体的错误信息。

果不其然!运行-v参数之后发现提示错误,找不到frida-server-15.0.0-anfroid-x86(忘了截图了)

回头看,原来我的hluda-server是14.2,原来是版本不对(谁能想到就是这个不是问题的问题折磨了我一整天),重新下载了15.0.0版本的server运行,至此终于解决。

这次可以对目标进行Bypass了。

此时再次对目标进行抓包:

已经可以正常抓到流量。

回头来看,我犯的错误很低级,但是这过程却让我了解到一些frida的用法。

后来搜索了一下bypass ssl pining的方法,也是有很多,比如Xposed+JustTrustMe,还有一些fridascript的js脚本。

后来在一次项目中也用到了这个方法进行Bypass。