首页
论坛
课程
招聘
DMemory
雪    币: 486
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:140 )
在线值:
发帖
12
回帖
75
粉丝
0

[原创] IDA导入Jni.h

2017-5-18 14:15 12832

[原创] IDA导入Jni.h

2017-5-18 14:15
12832

IDA 分析Android so 文件时,因为缺少JNIEnv结构定义,反编译后看起来很不友好,如下图(后面注释是我自己手工对照加的 = =)。为避免以后无穷无尽的手动加注,接下来我们就来导入 JNIEnv 的结构定义让反编译代码看起来更轻松。


IDA 打开菜单 Options ->Compilter..

选择Visual C++ 我在VS2008 环境下编译通过,VS2015有问题。

Include directories 填入NDK中包含jni.h 的路径和VS2008中VC的include路径,两个路径间用”;”分隔。

Predefined macros 加入 __lint__ 宏定义。

jni.h 做如下三处修改(可能会出现不同情况,载入后可根据报错信息做具体修改)

 

返回IDA 按Ctrl+F9 载入 jni.h 文件就可以编译通过了。

然后在structures窗口里按下insert键-> add standard structure -> 选择"JNIEnv_",然后确定,之后IDA 反编译出来的就看起来舒爽多了。


 


上传的附件:
最新回复 (22)
猫仙大人
雪    币: 59
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
23
粉丝
0
猫仙大人 活跃值 2017-5-18 17:41
2
0
这个我已经看过很多次了  你敢不敢把这个Jni.h  放出来看看 
hiccup
雪    币: 2746
活跃值: 活跃值 (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
166
粉丝
0
hiccup 活跃值 2017-5-18 20:24
3
0
ida现在根本就不需要手动导入了,直接在变量上按  ‘y’,改为  JNIEnv*  就行了
无边
雪    币: 6168
活跃值: 活跃值 (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
16
回帖
587
粉丝
1
无边 活跃值 2017-5-18 21:37
4
0
不需要手动导入,你是哪个版本的?
DMemory
雪    币: 486
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:140 )
在线值:
发帖
12
回帖
75
粉丝
0
DMemory 活跃值 3 2017-5-19 12:50
5
0
猫仙大人 这个我已经看过很多次了 你敢不敢把这个Jni.h 放出来看看
附件已经上传了。实际上就算你用了我的附件也不一定能编译成功。跟机器环境有关。如果有问题,你可以仔细查一下报错,针对性解决一下就行了
DMemory
雪    币: 486
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:140 )
在线值:
发帖
12
回帖
75
粉丝
0
DMemory 活跃值 3 2017-5-19 12:52
6
0




无边

不需要手动导入,你是哪个版本的?

我是  6.8  ,理论上已经集成了这些结构体,但我有时候把  IDA  搞的抽风,无法直接加载的结构体的时候,就自己导入一下。同样的方法可以导入  elf.h  等……感觉还是相对方便的哈

影子不寂寞
雪    币: 66
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
351
粉丝
0
影子不寂寞 活跃值 2017-5-20 09:29
7
0
学习一下。
猫仙大人
雪    币: 59
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
23
粉丝
0
猫仙大人 活跃值 2017-5-24 10:53
8
0
楼主我太爱你了
clumsybirda
雪    币: 10
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
3
回帖
39
粉丝
0
clumsybirda 活跃值 2017-7-3 20:23
9
0

11111111

aihacker
雪    币: 801
活跃值: 活跃值 (27)
能力值: ( LV3,RANK:30 )
在线值:
发帖
15
回帖
123
粉丝
0
aihacker 活跃值 2017-7-4 22:35
10
0
用你的jni.h报错信息如下:
Error  F:\android-ndk-r10\platforms\android-19\arch-arm\usr\include\jni.h,496:  Syntax  error  near:  jobjectRefType
Error  F:\android-ndk-r10\platforms\android-19\arch-arm\usr\include\jni.h,497:  Syntax  error  near:  }
VIPJK
雪    币: 211
能力值: (RANK:10 )
在线值:
发帖
0
回帖
6
粉丝
0
VIPJK 活跃值 2017-10-5 18:36
11
0
楼主您好,  我用的是6.8  导入jni.h成功,  insert  JNIEvent成功,  但是f5的代码还是  vx+xxx  (v3  +  343)  .为什么呢?  知道的朋友麻烦指点下.  系统:  window10  64
twsxtd
雪    币: 10
活跃值: 活跃值 (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
3
回帖
29
粉丝
2
twsxtd 活跃值 2017-10-26 12:44
12
1
IDA  高版本内置了这些结构体,不需要导入jni.h;如果没有的话,在Views->Open  subviews  ->  Type  Libraries  中添加Android  ARM的lib即可。
Gintoki
雪    币: 466
活跃值: 活跃值 (14)
能力值: ( LV3,RANK:20 )
在线值:
发帖
5
回帖
15
粉丝
0
Gintoki 活跃值 2017-10-26 16:28
13
0
twsxtd IDA 高版本内置了这些结构体,不需要导入jni.h;如果没有的话,在Views->Open subviews -> Type Libraries 中添加Android ARM的lib即可 ...
原来如此
tinxi
雪    币: 9
活跃值: 活跃值 (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
4
回帖
39
粉丝
1
tinxi 活跃值 2017-10-31 11:13
14
0
已经不需要导入jni.h
bluth
雪    币: 27
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
27
回帖
195
粉丝
0
bluth 活跃值 2017-11-17 11:42
15
0
马克    原来如此
茅山小僧
雪    币: 1292
活跃值: 活跃值 (19)
能力值: ( LV3,RANK:20 )
在线值:
发帖
10
回帖
175
粉丝
0
茅山小僧 活跃值 2017-12-7 14:38
16
0
有木有Python相关头文件导入方法
sakura零
雪    币: 685
活跃值: 活跃值 (24)
能力值: ( LV9,RANK:240 )
在线值:
发帖
12
回帖
58
粉丝
2
sakura零 活跃值 4 2018-1-16 11:50
17
0
请问一下,导入后
sakura零
雪    币: 685
活跃值: 活跃值 (24)
能力值: ( LV9,RANK:240 )
在线值:
发帖
12
回帖
58
粉丝
2
sakura零 活跃值 4 2018-1-16 11:51
18
0
local  type里有jnienv,但是还是不解析,是怎么让IDA重新分析呢?
樊辉
雪    币: 52
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
10
回帖
114
粉丝
0
樊辉 活跃值 2018-3-15 11:44
19
0
加入宏  __midl;
更改sdk路径
qldxsun
雪    币: 38
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
5
粉丝
0
qldxsun 活跃值 2018-4-22 11:21
20
0
twsxtd IDA 高版本内置了这些结构体,不需要导入jni.h;如果没有的话,在Views->Open subviews -> Type Libraries 中添加Android ARM的lib即可 ...
7.0还是没有啊
yinX
雪    币: 378
活跃值: 活跃值 (12)
能力值: ( LV6,RANK:90 )
在线值:
发帖
17
回帖
117
粉丝
0
yinX 活跃值 2 2018-9-19 11:32
21
1
hiccup ida现在根本就不需要手动导入了,直接在变量上按 ‘y’,改为 JNIEnv* 就行了
有效,很赞!
airbus
雪    币: 246
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
216
粉丝
0
airbus 活跃值 2018-10-12 11:15
22
0
/*
typedef enum jobjectRefType {
    JNIInvalidRefType = 0,
    JNILocalRefType = 1,
    JNIGlobalRefType = 2,
    JNIWeakGlobalRefType = 3
} jobjectRefType;
*/
这个枚举注释掉,是说ida不支持导入枚举定义吗?
最后于 2018-10-12 11:18 被airbus编辑 ,原因:
@=llfly
雪    币: 270
能力值: ( LV1,RANK:0 )
在线值:
发帖
0
回帖
18
粉丝
0
@=llfly 活跃值 3小时前
23
0

mark

IDA 高版本内置了这些结构体,不需要导入jni.h;如果没有的话,在Views->Open subviews -> Type Libraries 中添加Android ARM的lib即可。

 

我的环境(IDA 7.0)默认只加载了一个armv12的库,遇到有些so文件,按Y修改为JNIEnv * 报错 Syntax error near: JNIEnv
按照以上方法添加Android arm就可以解决!

游客
登录 | 注册 方可回帖
返回