unidbg可以直接调用app中的so函数,可以不使用模拟器和frida的组合.因此可以节约很多资源,并且部署到服务器中,下面是执行代码,分别对应源码中的add,md5,encode函数
源码
package com.xiaojianbang.ndk;
public class NativeHelper {
public static native int add(int a, int b, int c);
public static native String encode();
public static native String md5(String str);
public static native void readSomething();
static {
System.loadLibrary("xiaojianbang");
}
}
unidbg代码
int call_add() {
int result = NativeHelperUtils.callStaticJniMethodInt(emulator, "add(III)I", 0x1, 0x2,0x3); // 执行Jni方法
return result;
}
//这里报错,上面使用vm.setJni(new AbstractJni() {}); 解决
String call_md5(String str){
StringObject result =NativeHelperUtils.callStaticJniMethodObject(emulator, "md5(Ljava/lang/String;)Ljava/lang/String;", str);
return result.getValue();
}
//报错,没有找到encode()Ljava/lang/String;
//原因是原始代码里没有注册encode()方法
//动态注册在导出表里找不到对应函数名
String call_encode(){
StringObject result =NativeHelperUtils.callStaticJniMethodObject(emulator, "encode()Ljava/lang/String;");
return result.getValue();
}
1680

被折叠的 条评论
为什么被折叠?



