出错一:
Exception in thread "main" java.lang.IllegalStateException: Unsupported arg: false
解决:传参数 false 的时候替换成传0
出错二:
[main]W/libc: pthread_create failed: clone failed: Out of memory
解决:增加代码
emulator.getSyscallHandler().setEnableThreadDispatcher(true);
出错三:
Exception in thread "main" java.lang.NullPointerException
解决:搭建unidbg框架初始化时增加这两行代码
final Memory memory = emulator.getMemory();
memory.setLibraryResolver(new AndroidResolver(23));
vm = emulator.createDalvikVM(new File("E:\\JavaApp\\unidbg-master\\unidbg-android\\src\\test\\resources\\MySo\\xxx.apk"));
// 增加下面这两行代码
new JniGraphics(emulator, vm).register(memory);
new AndroidModule(emulator, vm).register(memory);
出错四:
Exception in thread "main" java.lang.IllegalStateException: Unsupported arg:...
解决:入参代码错误,应采用下面方法入参
List<Object> arg_list = new ArrayList<>(10);
arg_list.add(vm.getJNIEnv());
arg_list.add(0);
StringObject appkey = new StringObject(vm,"xxxxxxx");
arg_list.add(vm.addLocalObject(appkey));
ArrayObject arrayObject = new ArrayObject(null, new StringObject(vm, "xxxxxx"),null,null,null,null,null);
arg_list.add(vm.addLocalObject(arrayObject));
arg_list.add(10412);
Number number = module.callFunction(emulator, 0x53129, arg_list.toArray());
System.out.println(vm.getObject(number.intValue()).getValue());
出错五
java.security.NoSuchAlgorithmException: SHA256 MessageDigest not available
解决:补环境
@Override
public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
switch (signature) {
case "java/security/MessageDigest->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;":
StringObject type = vaList.getObjectArg(0);
String name = "";
if ("\"SHA256\"".equals(type.toString())) {
name = "SHA-256";
}
else {
name = type.toString();
System.out.println("else name: " + name);
}
try {
return vm.resolveClass("java/security/MessageDigest").newObject(MessageDigest.getInstance(name));
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException(e);
}
}
return super.callStaticObjectMethodV(vm, dvmClass, signature, vaList);
}
出错六
libxxxso load dependency libxxx.so failed
libxxxso load dependency libxxx.so failed
libxxxso load dependency libxxx.so failed
unicorn.UnicornException: Invalid memory fetch (UC_ERR_FETCH_UNMAPPED)
解决办法:so文件调用了其他so文件,缺少依赖。找到缺少的so文件放到调用so文件同个文件夹,或者太复杂的unidbg估计处理不了,需要在关键逻辑patch。或者使用以下方法
vm = emulator.createDalvikVM(new File("E:\\MyApp\\AndroidNX\\unidbg-0.9.7\\unidbg-android\\src\\test\\resources\\MySo\\xxx.apk"));
DalvikModule dm = vm.loadLibrary("abc_xx",true);
出错七
Exception in thread "main" java.lang.IllegalStateException: Illegal JNI version: 0xffffffff
解决办法:尝试注释掉检查版本的代码