您当前的位置:首页 > 计算机 > 软件应用 > 反汇编工具

那些年使用IDA的事——防止F5错误优化

时间:06-02来源:作者:点击数:

我们做逆向的知道IDA这一神器,但是神器也会犯错,使用神器进阶的时候这时候就需要人工来辅助,下面就IDA F5中一个问题做记录。。

问题篇:

什么问题呢?

我们就拿鬼哥之前那个等级破解那个样本,我们放在IDA中看核心.so文件,看汇编代码:

然而用F5看到的伪C代码是:

显然是不对的,没有对语句分析出来,接下来我们就系问题解决。。

原理篇:

由于Java_com_ggndktest1_JniGg_VipLevel是一个JNI函数,因此我们在JNI开发的过程中知道r0参数为JNIEnv*,r1参数为jobject,可以看到loc_c64应该为break语句,里面有一个 0x29c,详细解释为:

R0所指的JNIEnv*地址的内容赋给了R2,R2加上0x29c地址处的内容赋给了R3,我们知道这块其实就是NewStringUTF函数,因此BLX R3,输出的就是个字符串,但是F5为什么没有输出呢?

:这是ida f5插件的一个特性:代码优化。由于使用了 blx r3寄存器跳转,ida并不知道r3即NewStringUTF函数的原型,参数情况。也就不知道str参数会被NewStringUTF函数所使用。因此它认为switch...case {}中对str的赋值(如str = "Copper Vip";)并没有用,可以优化掉。

解决篇:

1.导入jni.h;(附件有详细说明)

2.在F5下,由于参数是“int a1”不对,因此按“Y”键,改为JNIEnv*;

3.在函数NewStringUTF上面右键选Force call type;

结果是:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门