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

一、需求:
使用IDA 导入C/C++头文件,添加头文件中的结构体,使用此结构体中的函数替换反汇编中的偏移,是文件可读性更好!!!!

二、步骤:
步骤一:点击IDA Pro 菜单项“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 *


结束了!
成功了!!!!!!


“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

Flaoting_Guy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值