吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17358|回复: 17
收起左侧

[Android 原创] IDA导入Jni.h

  [复制链接]
DeathMemory 发表于 2016-6-1 12:32
IDA 分析Android so 文件时,因为缺少JNIEnv结构定义,反编译后看起来很不友好,如下图(后面注释是我自己手工对照加的 = =)。为避免以后无穷无尽的手动加注,接下来我们就来导入 JNIEnv 的结构定义让反编译代码看起来更轻松。
01.png
IDA 打开菜单 Options ->Compilter..
02.png
选择Visual C++ 我在VS2008 环境下编译通过,VS2015有问题。
Include directories 填入NDK中包含jni.h 的路径和VS2008VCinclude路径,两个路径间用”;”分隔。
Predefined macros 加入 __lint__ 宏定义。
jni.h 做如下三处修改(可能会出现不同情况,载入后可根据报错信息做具体修改)
03.png
返回IDA Ctrl+F9 载入 jni.h 文件就可以编译通过了。
然后在structures窗口里按下insert-> add standard structure -> 选择"JNIEnv_",然后确定,之后IDA 反编译出来的就看起来舒爽多了。
04.png



免费评分

参与人数 4威望 +1 热心值 +3 收起 理由
JadeSnow + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
myouter + 1 谢谢@Thanks!
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Ericky + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

AntiDebug 发表于 2016-6-2 16:52
感谢分享,之前看蒸米的文章也有一种识别JNIEnv的方法

在android调试中,你会经常见到这种类型的函数:
3.png
首先是一个指针加上一个数字,比如v3+676。然后将这个地址作为一个方法指针进行方法调用,并且第一个参数就是指针自己,比如(v3+676)(v3…)。这实际上就是我们在JNI里经常用到的JNIEnv方法。因为Ida并不会自动的对这些方法进行识别,所以当我们对so文件进行调试的时候经常会见到却搞不清楚这个函数究竟在干什么,因为这个函数实在是太抽象了。解决方法非常简单,只需要对JNIEnv指针做一个类型转换即可。比如说上面提到v3指针,我们选中后按一下”y”键,然后将类型声明为”JNIEnv*”。
1.png
随后IDA就会自动查找对应的方法并且显示出来了:
2.png

mmmmar 发表于 2016-6-1 12:39 来自手机
Ericky 发表于 2016-6-1 16:42
yege0201 发表于 2016-6-1 23:29
学习了,现在用IDA分析native,真是很费劲,感谢楼主分享。
 楼主| DeathMemory 发表于 2016-6-2 19:17
AntiDebug 发表于 2016-6-2 16:52
感谢分享,之前看蒸米的文章也有一种识别JNIEnv的方法

在android调试中,你会经常见到这种类型的函数:
...

是的,这方法就是导入jni.h后的操作,高版本的IDA默认会有支持,但可能会支持不全或者其他奇怪的现象,这时候就可以用上面的方法手动导入一遍,就可以解决了。
mmmmar 发表于 2016-6-23 20:02
我每次打开都要重新导入一次。重新配置complier,请问有什么方法能永久导入吗
JadeSnow 发表于 2016-6-27 09:05
学习了,感谢分享
lwc1123 发表于 2016-6-27 10:13 来自手机
不错,谢谢分享
chenjingyes 发表于 2016-7-26 23:40
请问出现这种错误怎么解决呀???

错误

错误
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表