前言
这个专题是根据白龙,龙哥的unidbg博客的案例,进行从0开始到安全分析的流程,核心部分会借鉴龙哥的unidbg,通过借鉴大佬的思路,完整的分析某个so层的加密参数
各位朋友也可以直接读龙哥的博客,我只是用我的角度进一步加工一下
原文地址:SO入门实战教程一:OASIS_so学习路线_白龙~的博客-优快云博客
分析
首先拿到这个app,安装啥的就不多说了。
进入到注册界面:
点击获取验证码,然后这边抓包工具抓到的包:
然后,这里面的【sign】就是今天的重点了。
用神秘的工具脱壳完之后,有如下的dex:
把这些dex,全部选中,拖进jadx
快速定位
接下来开始找sign所在的位置,先看看抓包工具这边的参数,根据这些键名,一顿搜,总能找到一些
先搜下【sign】,虽然搜出来的结果不多,但是感觉有很多干扰项
进最后那个,到这里,
这些参数看着很像,用frida hook,得知,发现并没有走到这里
搜【ua】
进到这里,发现很可疑,好多参数都对上了
啥都不说,先用objection hook下,然后app端点击【重新发送】看看:
可以,这不直接就定位逻辑了
但是我们要找【sign】,所以还得再看看,jadx查看发现,这个方法反编译效果不太好,问题不大,记住这个dex名,然后用GDA 打开这个dex,这就挺好,基本都反编译出来了
反正看着确实可疑,但是这三个方法,还不确定到底是是哪个方法里有【sign】部分,所以这里直接hook 它这个a,b,c三个方法,然后app点下重新获取
ok,发现最后的方法里基于有我们要的sign,这边再来下,用抓包工具对比下,谨慎一点,别搞半天没搞对位置:
重新hook下,然后抓包工具打开看看
对上了,ok,就是这里了【g.a.c.g.c.a】
在jadx里,反编译失败:
问题不大,用GDA看:
这不就越来越接近了吗,嘻嘻,点进去:
hook下这个c方法看看,ok,对上了
接着一顿分析后再进入这里
ok,进到了native层,那么核心的逻辑就在这里了。
像这种,常规的方法怎么解决呢?
- 如果你是为了拿数据,赶工期的话,那你可以直接主动调用这个方法
- 如果你是为了纯算还原的话,那就把这个so文件拖进ida一顿分析了
- 那么假如,这个方法的纯算很复杂,而你又不想主动调用,感觉很low的话,那你就可以尝试用unidbg了
unidbg,就是本系列文章的重点了。
unidbg简介
什么是unidbg
unidbg 是一个基于 unicorn 的安全分析工具,可以实现黑盒调用安卓和 iOS 中的 so 文件
unidbg是凯神写的一个开源的java项目
使用场景
因为现在的大多数 app 把核心的加密算法放到了 so 文件中(比如本例的app),你要想破解签名算法,必须能够破解 so 文件。但C++ 的安全分析远比 Java 的安全分析要难得多,有各种混淆啊,ollvm啥的,所以好多时候是没法纯算还原破解的
那么你是否有过一个想法,能不能把安卓的环境模拟出来,但是又脱离了安卓真机的环境,就可以直接使用so里的方法呢?
unidbg 就是这样一个工具,它模拟好了好几种虚拟环境,他不需要直接运行 app,也无需安全分析so 文件,而是直接找到对应的 JNI 接口,然后用 unicorn 引擎(也不止这一个引擎)直接执行这个 so 文件,所以效率也比较高。
配置unidbg
1.首先,用git 把这个项目clone 下来: