在 android 模拟器中使用 frida 的指令跟踪

逆向工程 调试 x86 安卓 手臂 弗里达
2021-06-29 03:18:56

我的 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 中搜索它以进行修补。如果有任何其他工具我可以达到同样的效果,请也给我建议,过程不支持附加调试器!

0个回答
没有发现任何回复~