写点什么

Android 逆向实战|手把手实现 RPC+so 自动化解决方案

作者:LLLibra146
  • 2025-02-19
    北京
  • 本文字数:1179 字

    阅读完需:约 4 分钟

今天来分享一下 RPC + so 的模拟调用方案。


RPC 模拟调用

昨天的文章中演示了如何使用 unidbg 来模拟调用 so 中的加密方法,但是 unidbg 模拟调用只能手动运行,今天分享一个可以将 unidbg 转成 RPC 接口的框架。


Github 地址:https://github.com/anjia0532/unidbg-boot-server


首先将项目代码 clone 下来,使用 idea 打开,搭建 jdk8 开发环境,安装好依赖,环境准备工作就结束了。

自动生成代码

打开 test 文件夹的测试代码,可以看到作者已经为我们准备了一些示例。




以上代码可以根据输入的内容自动生成 ControllerService 还有其他的代码,不用我们手动一个个的去添加了。


根据我们的需求,先对测试代码进行修改,将 serviceName 变量改成 APP9,执行 AutoGeneratorTest 类的 main 方法,生成代码。



可以看到,左侧的文件树中已经生成对了对应的 ServiceServiceWorkerController 代码。

修改 Controller

首先来修改 Controller 的代码,因为我们调用 so 的时候需要传入两个参数,默认代码是没有参数的,需要添加两个参数。


修改 Service

使用 map 来接收两个参数,别忘了添加 RequestBody 注解,接下来补充 Service 的代码。




Service 的代码基本上和上篇文章的代码一样,按照注释填写包名和模块名即可,其他的无需特别改动,最后填写 do-work 方法的代码:



加载对应的类并且调用对应的静态加密方法即可。别忘了将 apk 放到对应的位置,完成之后 apk 的位置应该在这里:



不用解压 apk,unidbg 会自动根据模块名加载 so 文件的。

运行测试

到这里代码就已经修改完成了,运行试一下:



服务就已经正常运行起来了,使用 Python 发送 http 请求试一下能不能拿到 token


import time
import requests
page = 1limit = 10
url = 'https://app9.scrape.center/api/movie'
for a in range(10): data = { 'offset': (page - 1) * limit, 'limit': limit, 'token': requests.post('http://127.0.0.1:9999/api/app9/do-work', json={'str1': '/api/movie', 'int1': (page - 1) * limit}).text } print(data) r = requests.get(url, params=data).json() print(r) page += 1 time.sleep(1)
复制代码



可以正常获取到数据,并且框架还支持多线程,如果性能不够的话可以开启多线程支持,并发作者自测框架并发可以达到 4000+,性能还是可以的,当然了这只是 Demo 的数据,要看实际的业务逻辑复杂度。

总结

到这里整个调用流程就结束了,以上就是 RPC+unidbg 的完整使用方法了,感兴趣的小伙伴可以自己测试一下。


本文章首发于个人博客 LLLibra146's blog

本文作者:LLLibra146

更多文章请关注公众号 (LLLibra146):

版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!

本文链接https://blog.d77.xyz/archives/96d7b348.html

发布于: 刚刚阅读数: 4
用户头像

LLLibra146

关注

还未添加个人签名 2018-09-17 加入

还未添加个人简介

评论

发布
暂无评论
Android 逆向实战|手把手实现RPC+so自动化解决方案_Android 逆向_LLLibra146_InfoQ写作社区