IDA

导入jni.h解析

Posted by Jieming Gu on 2017-02-25

需求

IDA 导入C/C++头文件后,通过添加头文件中的结构体,可以用结构体中的函数替换伪代码中的地址偏移,提高函数可读性,本文以JNI_OnLoad()为例讲解。

步骤

1.点击IDA菜单项”File->Load file->Parse C header file”选择jni.h,导入的时候IDA可能会报错,解决办法很简单:把要导入的文件备份下,然后哪里报错删哪里。

2.导入完成后,点击主界面上的”Structures”选项卡,按Insert键打开”Create structure/union”对话框,点击”Add standard structure”按钮,添加下图中的两个结构体。

1

3.使用BLX R3寄存器跳转,但IDA并不知道R3是GetEnv函数的原型,也不知道函数的参数情况,因此IDA认为传参的赋值无用,可以优化掉。这是IDA F5插件的特性:代码优化。

4.打开JNI_OnLoad(),为了 更好地阅读伪代码,在JNI_OnLoad()中修改变量定义(N:变量重命名;Y:变量类型定义)。注意:_JavaVM_JNIEnv都是指针。

JNI_OnLoad()第一个参数是_JavaVM,静态注册/动态注册的函数第一个参数是_JNIEnv

2

5.修改完成后在函数上右键,点击”Force call type”,转为函数调用。

3