标签:ida
一、需求:
使用IDA 导入C/C++头文件,添加头文件中的结构体,使用此结构体中的函数替换反汇编中的偏移,是文件可读性更好!!!!
二、步骤:
步骤一:点击IDAPro 菜单项“File->Load file->Parse c header file ” 选择jni.h头文件
步骤二:简单修改jni.h ,注释第27行的#include<stdarg.h> ,还有将1122行的#define JNIEXPORT_attribute_((visibility("default"))) 改成 #define JNIEXPORT 修改完后可以成功导入 {文件保存在C:\Program
Files (x86)\IDA 6.6\tools}
步骤三:导入成功后把jni.h修改的地方 改回来 防止编译NDK出错。
步骤四:点击IDA Pro 主界面上的“Structures”选项卡 然后按下Insert键打开“Create structure/union”对话框,点击界面上的"Add standard structure"按钮,在打开的结构体选择对话框中选择JNINativeInterface并点击OK返回,同理JNIInvokeInterface结构体也导入进来;
自此已经成功的将 jni.h中的头文件添加到了IDA中,但是发现F5反汇编得到的代码还是偏移值,没有转换成 函数调用。
下面是自己的实验结果:
5. 打开so的JNi_OnLoad()函数,如下; 注意此处JNI_OnLoade()函数的参数是__JavaVM* , 如果不是_JavaVM* 请使用图二将其转换成_JavaVM* 。
图一
使用 “C”将其转换成code
图二
6. 下面是反汇编的结果发现,函数已经出现了。
注意:上面是操作成功后的截图,可能参数,和函数都转换成功,下面重新打开IDA演示
7. 介绍 Java_com_droider_jnimethods_TestJniMethods_test函数,解析其中调用的JNI函数。
8. 源代码中发现 ,函数第一个参数是 JNIEnv* , 那么在返回编代码是什么呢? 需要转换成什么?
返汇编得到函数:
9. 下图,第一个问题解决
图一
图二
注意: 在这应该 将jni.h导入进来,并插入到structures 窗口。 下图
10. 第二个问题:我们应该转换 __JNIEnv, 可以看到
4 _JNIEnv struct {const struct JNINativeInterface *functions;} 4
|
_JNIEnv内部就是JNINativeInterface ,但是不能转换成JNINativeInterface ,因为在堆栈和内存中记录的是_JNIEnv的地址,JNINativeInterface 的地址只是用来引用。
注意:转换的方法是,鼠标点击参数,然后右键选中 Convert to Struct *
结束了!
成功了!!!!!!
【 IDA】使用IDA load file功能,导入JNI.h解析【JNI 函数】
标签:ida
原文地址:http://blog.csdn.net/u010382106/article/details/44960243