Android 逆向实战|手把手实现RPC+so自动化解决方案
今天来分享一下 RPC + so 的模拟调用方案。
RPC模拟调用
昨天的文章中演示了如何使用 unidbg 来模拟调用 so 中的加密方法,但是 unidbg 模拟调用只能手动运行,今天分享一个可以将 unidbg 转成 RPC 接口的框架。
Github 地址:https://github.com/anjia0532/unidbg-boot-server
首先将项目代码 clone 下来,使用 idea 打开,搭建 jdk8 开发环境,安装好依赖,环境准备工作就结束了。
自动生成代码
打开 test 文件夹的测试代码,可以看到作者已经为我们准备了一些示例。
以上代码可以根据输入的内容自动生成 Controller
和 Service
还有其他的代码,不用我们手动一个个的去添加了。
根据我们的需求,先对测试代码进行修改,将 serviceName
变量改成 APP9,执行 AutoGeneratorTest
类的 main
方法,生成代码。
可以看到,左侧的文件树中已经生成对了对应的 Service
、ServiceWorker
、Controller
代码。
修改 Controller
首先来修改 Controller
的代码,因为我们调用 so 的时候需要传入两个参数,默认代码是没有参数的,需要添加两个参数。
修改 Service
使用 map 来接收两个参数,别忘了添加 RequestBody
注解,接下来补充 Service
的代码。
Service
的代码基本上和上篇文章的代码一样,按照注释填写包名和模块名即可,其他的无需特别改动,最后填写 do-work
方法的代码:
加载对应的类并且调用对应的静态加密方法即可。别忘了将 apk 放到对应的位置,完成之后 apk 的位置应该在这里:
不用解压 apk,unidbg 会自动根据模块名加载 so 文件的。
运行测试
到这里代码就已经修改完成了,运行试一下:
服务就已经正常运行起来了,使用 Python 发送 http
请求试一下能不能拿到 token
。
1 | import time |
可以正常获取到数据,并且框架还支持多线程,如果性能不够的话可以开启多线程支持,并发作者自测框架并发可以达到 4000+,性能还是可以的,当然了这只是 Demo 的数据,要看实际的业务逻辑复杂度。
总结
到这里整个调用流程就结束了,以上就是 RPC+unidbg 的完整使用方法了,感兴趣的小伙伴可以自己测试一下。
本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
更多文章请关注公众号 (LLLibra146):
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!