java-native-interface - 如何使用Angr分析共享库中的JNI函数?
问题描述
我是二进制分析领域的新手。我想做的是分析 JNI 本机接口函数(例如,使用 Angr 提供的SimProcedures在这里RegisterNatives
列出的其他函数。共享库(*.so 文件)假设是 Android 应用程序的一部分。但是,我注意到这些 JNI 本机接口函数不会在共享库中显示为符号。所以我的问题是:
- 为什么这些 JNI 原生接口函数在共享库中没有对应的符号?我做错了什么还是他们认为是这样的?
- 在Angr中,如果我没有遗漏任何内容,SimProcedures 只能绑定到符号。那么如果没有这样的符号,我应该怎么做才能让它工作呢?
解决方案
JVM 将各种函数公开为函数指针表。例如,请参见此处。
调用env->FindClass
将在汇编中表示为(C 伪代码):
fp = env + 6 * sizeof(void *);
fp(env, ...)
也许你可以教这个关于这个函数指针表的 angr 事情?
推荐阅读
- elasticsearch - 根据词频搜索并获取结果
- css - CSS 动画:将图像淡入彼此并为图像设置动画并移动其方向
- expression - 不匹配一个单词,然后匹配一个字符
- python - 如何翻译url编码的字符串python
- javascript - 量角器在页面对象中获取过时的元素引用
- c++ - c++17中如何定义函数组合?
- c# - 当我尝试循环播放声音时崩溃
- javascript - Javascript 正则表达式(负)后视在 Firefox 中不起作用
- javascript - 将动态变量传递给数组索引
- javascript - 如何从 SVG 路径的交点中找到新的路径(形状)?