首页 > 解决方案 > 如何使用Angr分析共享库中的JNI函数?

问题描述

我是二进制分析领域的新手。我想做的是分析 JNI 本机接口函数(例如,使用 Angr 提供的SimProcedures在这里RegisterNatives列出的其他函数。共享库(*.so 文件)假设是 Android 应用程序的一部分。但是,我注意到这些 JNI 本机接口函数不会在共享库中显示为符号。所以我的问题是:

  1. 为什么这些 JNI 原生接口函数在共享库中没有对应的符号?我做错了什么还是他们认为是这样的?
  2. Angr中,如果我没有遗漏任何内容,SimProcedures 只能绑定到符号。那么如果没有这样的符号,我应该怎么做才能让它工作呢?

标签: java-native-interfaceshared-libraries.soangr

解决方案


JVM 将各种函数公开为函数指针表。例如,请参见此处。

调用env->FindClass将在汇编中表示为(C 伪代码):

fp = env + 6 * sizeof(void *);
fp(env, ...)

也许你可以教这个关于这个函数指针表的 angr 事情?


推荐阅读