感谢这篇文章提供思路。
Android逆向之无加固下的Java层和Native层模拟的调度解决方案
一、背景
现在好多android app的加密都放在了so,逆向so需要的时间成本很高,我一直在想有没有一些通用的方案。参考网上的的方案,我实践了如下三种方案。
Android上起http server
参考AndServer+Service 打造 Android 服务器实现 so 文件调用Android上起http server + frp内网穿透
但是现在一般是在云手机上操作,没有直接暴露的公网IP和端口号。我找到的方案是用frp做内网穿透。但是不稳定-
使用sekiro暴露 API
image.png
二、介绍
sekiro是一个基于长链接和代码注入的Android private API暴露框架。
我之前有类似的想法,没想到已经有写好的。
框架分为两部分:
- server
暴露一个TCP端口和两个HTTP端口
管理通过TCP连接的client和user发来的http 请求 - client
通过TCP和server连接,响应server发来的请求
工作流程是这样的:
- client通过TCP和server建立长连接
- user发送http请求给server
- server根据用户发来的http请求的参数,通过TCP将请求转发给client
- client收到请求并响应server
- server将从client收到的请求返回给user
image.png
三、实践
1、更改端口
- server端在sekiro-server/src/main/resources/appliation.properties中可以配置三个服务端端口
- client在SekiroClient.start(String serverHost, int serverPort, final String clientID, String group)中配置
2、服务器端部署
修改settings.gradle的内容为: include ':sekiro-server', ':sekiro-lib'
这一步是为了过掉Android app的编译
当前目录执行代码: ./gradlew sekiro-server:bootJar
即可在 sekiro-server/build/libs/sekiro-server-0.0.1-SNAPSHOT.jar找到all-in-one的jar包
通过命令 java -jar sekiro-server/build/libs/sekiro-server-0.0.1-SNAPSHOT.jar 即可启动服务器
3、client编写
1)build.gradle添加依赖 implementation 'com.virjar:sekiro-api:1.0.1'
image.png
2)在service中启动client,并添加handler
image.png
3)编写handler逻辑代码
image.png
4、测试
测试连接:http://YOUR_IP:7008/asyncInvoke?group=sokiller&action=sjd&phone=17611597503)
image.png