如何使用Angr分析共享库中的JNI函数?
How to use Angr to analyze JNI functions in shared libraries?
我是二进制分析领域的新手。我想做的是使用 Angr 提供的 SimProcedures 来分析 JNI 本机接口函数(例如,RegisterNatives
或列出的其他函数 here)。共享库(*.so 文件)应该是 Android 应用程序的一部分。但是,我注意到这些 JNI 本机接口函数在共享库中没有显示为符号。所以我的问题是:
- 为什么这些JNI原生接口函数在共享库中没有相应的符号?是我做错了什么还是他们这样想的?
- 在Angr中,如果我没有遗漏任何东西,SimProcedures 只能绑定到符号。那么如果没有这样的符号,我应该怎么做才能让它起作用呢?
JVM 将各种函数公开为 table 函数指针。例如,参见 here。
对 env->FindClass
的调用将在汇编中表示为(C 伪代码):
fp = env + 6 * sizeof(void *);
fp(env, ...)
也许你可以教我关于这个函数指针的愤怒事情table?
我是二进制分析领域的新手。我想做的是使用 Angr 提供的 SimProcedures 来分析 JNI 本机接口函数(例如,RegisterNatives
或列出的其他函数 here)。共享库(*.so 文件)应该是 Android 应用程序的一部分。但是,我注意到这些 JNI 本机接口函数在共享库中没有显示为符号。所以我的问题是:
- 为什么这些JNI原生接口函数在共享库中没有相应的符号?是我做错了什么还是他们这样想的?
- 在Angr中,如果我没有遗漏任何东西,SimProcedures 只能绑定到符号。那么如果没有这样的符号,我应该怎么做才能让它起作用呢?
JVM 将各种函数公开为 table 函数指针。例如,参见 here。
对 env->FindClass
的调用将在汇编中表示为(C 伪代码):
fp = env + 6 * sizeof(void *);
fp(env, ...)
也许你可以教我关于这个函数指针的愤怒事情table?