Sekiro+Xposed 签名黑盒解决方案

背景

现在好多android app的加密都放在了so,逆向so需要的时间成本很高,我一直在想有没有一些通用的方案。参考网上的的方案,我实践了如下三种方案。

  • Android上起http server
  • Android上起http server + frp内网穿透
  • 使用sekiro暴露 API

本文主要介绍第三种方法~

sekiro-server端配置

项目地址:https://gitee.com/maike1/sekiro.git 这个是已经打包好的jar包,可以直接使用

img.png

xposed模块编写

  1. 导入sekiro依赖包:在app的build.gradle文件dependencies标签导入
implementation 'com.virjar:sekiro-api:1.0.1'
  1. 在xposed标签的 handleLoadPackage方法中进行注册
Log.i(TAG, "connect server....");
// 服务端host
String testHost = "192.168.0.106";
// 客户端标识
String clientId = UUID.randomUUID().toString();
// 接口组名称
String groupName = "addDemoTest2";
// 暴露的接口名称
String actionName = "myAdd";
// 拿classloader
final ClassLoader classLoader = lpparam.classLoader;

// 连接服务端并且注册处理的handler
SekiroClient.start(testHost, clientId, groupName)
        .registerHandler(actionName, new SekiroRequestHandler(){
            @Override
            public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse){
                //当服务端分配任务时, 这里处理逻辑, 并把结果返回给服务端, 服务端再返回给调用者
//                        Class<?> clz = XposedHelpers.findClass("com.example.administrator.adddemo.MainActivity", classLoader);
                int arg1  = sekiroRequest.getInt("arg1");
                int arg2  = sekiroRequest.getInt("arg2");
                Log.i(TAG, String.format("arg1 : %d, arg2 : %d", arg1, arg2));
//                        Object result = XposedHelpers.callStaticMethod(clz, "Add", arg1, arg2);
                String addNum = Integer.toString(arg1+arg2);
                Log.i(TAG, "result : " + addNum);
                sekiroResponse.success(addNum);
            }
        });
  1. 打包编译

TIP: 如果编译错误 More than one file was found with OS independent path

  • 解决:build.gradle文件下的android配置下增加以下代码,剔除一些重复资源
// 去除重复文件
packagingOptions {

    exclude 'META-INF/*******'

    exclude 'META-INF/INDEX.LIST'

    exclude 'META-INF/io.netty.versions.properties'

}

调用结果展示

  1. http://127.0.0.1:5602/groupList 展示当前系统中注册过的所有group

img_1.png

  1. http://127.0.0.1:5602/natChannelStatus?group=addDemoTest2 注册过的设备展示

img_2.png

  1. http://127.0.0.1:5601/asyncInvoke?group=addDemoTest2&action=myAdd&arg1=300&arg2=300 接口调用展示

img_3.png

本文出自:https://blog.csdn.net/m0_68075044/article/details/130172324