Api和jar包两种方式调用某东App(Spring Boot + Unidbg)

版本:我测试过 10.0.011.0.2都是可以的,应该再高一些版本也是通用的

本文主要记录unidbg的搭建可以打包jar,如果后期有时间再出一版加密分析&定位

现在很多APP的加密逻辑都是在so层了,大大提高了逆向的难度,如果要在so层还原出纯加密代码难度还是不小的(当然一些传统的加密算法且特征比较明显的是比较简单的)。unidbg其中的作用之一就可以模拟调用so,也就是模拟 JNI 调用 API,以便可以调用 JNI_OnLoad。unidbg还有其他很多特色,是一个非常不错的逆向利器,具体这里就不展开,本人目前研究也不深

搭建Unidbg

把demo跑通

把https://github.com/zhkl0228/unidbg/tree/master 把这个项目代码clone下来,跑通如下例子,就说明没问题了
在这里插入图片描述
我是在这个项目的基础上修改了一些结构的,也增加了不少其他APP

建立模拟环境

public xxSign() {
	 emulator = AndroidEmulatorBuilder.for32Bit().setProcessName("com.xxx.app").build();
	 Memory memory = emulator.getMemory(); // 模拟器的内存操作接口
	 memory.setLibraryResolver(new AndroidResolver(23));// 设置系统类库解析
	 vm = emulator.createDalvikVM(new File("加载apk文件")); // 创建Android虚拟机
	 new AndroidModule(emulator,vm).register(memory);
	
	 vm.setJni(this);
	 vm.setVerbose(true);// 设置是否打印Jni调用细节
	
	 // 自行修改文件路径,loadLibrary是java加载so的方法
	 DalvikModule dm = vm.loadLibrary(new File("加载so文件"), false); // 加载libcms.so到unicorn虚拟内存,加载成功以后会默认调用init_array等函数
	 dm.callJNI_OnLoad(emulator);// 手动执行JNI_OnLoad函数
	 module = dm.getModule();// 加载好的libcms.so对应为一个模块
 }

以上是建立模拟器、加载apk和so,这基本都是一样的

参照其中的demo在项目自己新建一个java文件,先把模拟环境这一步跑起来,确认没问题。(很多时候都是从模仿开始的,模仿多了自然就会)

调用 JNI,获取方法的返回值

ublic String getSign(String functionId, String uuid, String body,String version) {
      DvmClass cBitmapkitUtils = vm.resolveClass("com/xxxxx");
      StringObject ret = cBitmapkitUtils.callStaticJniMethodObject(emulator, methodSign,
              vm.resolveClass("android/content/Context").newObject(null),
              functionId,
              body,
              uuid,
              "android",
              version);

      return ret.getValue();
    }

补环境

接下来就补环境,缺啥补啥
在这里插入图片描述

搭建Api-Server

我在前面提到这个项目增加了Spring Boot,以便爬虫可以直接调用
项目结构:
在这里插入图片描述

增加路由

在这里插入图片描述

测试api

在这里插入图片描述
没问题!

打包jar

参考:https://blog.youkuaiyun.com/weixin_51111267/article/details/131610580
如果安装jpype失败,可以在这里下载whl文件来安装,https://github.com/jpype-project/jpype/releases

测试jar包

在这里插入图片描述

测试搜索接口

在这里插入图片描述
两种方式都是可以的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值