我的 Windows 操作系统中有一个名为“Ldplayer”的模拟器,我正在尝试记录使用 ARM JNI 库的应用程序执行的所有指令。基本上,该应用程序在 x86 仿真器中运行并且只有 arm JNI Libs,因此仿真用于 ARM Libs。
import frida, sys
ss = """
Java.perform(function() {
const System = Java.use('java.lang.System');
const Runtime = Java.use('java.lang.Runtime');
const VMStack = Java.use('dalvik.system.VMStack');
System.loadLibrary.implementation = function(library) {
try {
console.log('System.loadLibrary("' + library + '")');
const loaded = Runtime.getRuntime().loadLibrary0(VMStack.getCallingClassLoader(), library);
return loaded;
} catch(ex) {
console.log(ex);
}
};
System.load.implementation = function(library) {
try {
console.log('System.load("' + library + '")');
const loaded = Runtime.getRuntime().load0(VMStack.getCallingClassLoader(), library);
return loaded;
} catch(ex) {
console.log(ex);
}
};
});
"""
device = frida.get_device_manager().add_remote_device('127.0.0.1:27042')
pid = device.spawn(["com.testapp"])
session = device.attach(pid)
script = session.create_script(ss)
script.load()
device.resume(pid)
sys.stdin.read()
此代码列出了应用程序启动时加载的所有库,但是当我这样做时
Module.findBaseAddress('libtest.so');
它总是返回空值,在一天结束时,我只想记录进程正在执行的所有指令,以便我可以获取错误指令并在 ida 中搜索它以进行修补。如果有任何其他工具我可以达到同样的效果,请也给我建议,过程不支持附加调试器!