如何使用 IDA Pro Debugger 中断 Android JNI 函数

逆向工程 艾达 安卓
2021-06-13 22:23:16

我有一个使用共享库的 android 应用程序,我想通过调试器逐步完成。我已经成功地使用 IDA 6.3 通过 IDA 附带的android_server调试服务器调试可执行文件,但还没有让它与共享对象一起工作。

对于特定示例,假设我有以下 Java 代码(这来自 Android NDK 中的 hellojni 示例):

System.loadLibrary("hello-jni");
tv.setText( stringFromJNI() );

使用 JNI C 代码:

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
        return (*env)->NewStringUTF(env, "Hello from JNI !");
}

如果 java 代码只在应用程序启动时运行,我该如何中断函数Java_com_example_hellojni_HelloJni_stringFromJNI

2个回答

我可以看到两个选项。

  1. 使用app_process. 命令行似乎类似于(请参阅am脚本源代码):

    app_process /system/bin com.android.commands.am.Am start -a <ACTION>
    
  2. 在 JNI 方法的开头放置一个无限循环,运行应用程序,附加到新进程并在调试器中手动跳过循环。

较新版本的 Android 实际上包含这样的机制。它使用 jdwp 发送信号告诉应用程序您已连接。请参阅 NDK 中的 ndk-gdb 脚本 =)