经过2周的努力,终于模拟执行成功啦,好开心,第一次有unidbg。 哈哈哈哈,允许我嘚瑟一下~~~~ 


过程就不一一叙述了,说说中间遇到的问题和解决方式吧。
本来只是想抓包,但是发现好多包抓不到,没办法通过代理加charles直接抓到包,然后定位发送的位置。
上面可以拿到请求的内容,到这步后,就只能发现接下来的内容是请求的native方法。
那就只能JNI导出对应的函数,看看是关联到哪个so了。
通过直接拿出jni后,发现这个so好像是个假的,开始我并没有发现,就感觉是系统包,但是系统的不可能让三方APP做native, 所以判断是假的,那怎么办?在这我弄了1天,也没找到办法。
然后查了下AI 有什么方式可以拿到开始的注册模块。经过各种查资料。终于找到了解决方式。
这里只给出关键代码。
找到这个so后,发现还是没办法入手,就只能在代码层打印请求了,但是拿不到body。就很恶心了。既然有了请求体,那我怎么才能拿到response Body?
我选择直接拿到加密的方式,这样就可以自己写api接口了,直接看结果,也可以学习下逆向(学习了很久,但是没有实战个一个app,都是用demo,没有成就感)
接下来是查找加密的位置。主要就是找在哪一步做的加密。最后找到xx.glg
打印

发现了对应的加密内容。
继续跟就发现它是通过一个接口调用的方法,没有找到实现类。
IUnifiedSecurityComponent
考虑有两个可能,1、apk的内容不完整,2、使用的动态代理。

里面的关键是这个f字段,那就想办法打印出这个结果。

还真是,这个$Proxy24 肯定是个代理对象了,那怎么办呢?
使用frida dump出内存中的所有dex。
终于有关于 IUnifiedSecurityComponent 这个类的信息了。
这个方法里面有对应的信息,看起来是个插件的加载。
里面有关于
г.б.doCommand(13802, new Object[]{this.а, this.б.toString()});
这种的调用,看起来就很有跟一下的必要。
public Object doCommand(int v, Object[] arr_object) {
return JNICLibrary.doCommandNative(v, arr_object);
}
然后就看到了这个。
找到对应的方法后,还是JNI查找地址。

拉取到这个libsgmainso-xxxx.xx.x.so
尝试IDA打开,找到对应的位置。

里面有大量的间接跳转,尝试修复了几个,不想搞了。 转换下思路,我只要能签名就可以了,那就模拟执行吧。
查到unidbg,下载 unidbg ,跑demo , 嗯~~~~ 之前没搞过,学习 2天。
..........
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!