如果你想要追踪 init_proc、init_array 这些 SO 初始化函数的执行情况,那么就需要使用模块监听器,在模块加载的第一时间开始 trace。
memory.addModuleListener(new ModuleListener() {
@Override
public void onLoaded(Emulator<?> emulator, Module module) {
if(module.name.contains("signer")){
emulator.traceCode(module.base, module.base+module.size);
}
}
});//这函数不能写在vm.loadLibrary() 下面 否则就打印不了
DalvikModule dm = vm.loadLibrary("signer", true); // 加载 so
监听 JNI_Onload
如果你觉得目标函数可能依赖 JNI_OnLoad 得到的某些数据,那么可以把 traceCode 提到 call JNI_OnLoad 前。
emulator.traceCode(module.base, module.base+module.size);
dm.callJNI_OnLoad(emulator); // 调用目标 SO 的 JNI_OnLoad
package com.xxx;
import com.github.unidbg.AndroidEmulator;
import com.github.

文章讲述了如何利用Unidbg库中的模块监听器来追踪Android动态链接库(如signer和xxx)中的init_proc、init_array等初始化函数的执行情况。在模块加载时开启traceCode,并在必要时在JNI_OnLoad之前进行trace,以便捕获可能依赖的数据。示例代码展示了如何创建AndroidEmulator实例,加载库,设置内存管理,并注册文件处理器。
最低0.47元/天 解锁文章
1115

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



