码迷,mamicode.com
首页 > 其他好文 > 详细

【 IDA】使用IDA load file功能,导入JNI.h解析【JNI 函数】

时间:2015-04-09 15:30:40      阅读:586      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!