首页 > 其他 > 详细

利用无效字节码指令引发逆向工具崩溃(一)

时间:2015-05-27 02:20:09      阅读:352      评论:0      收藏:0      [点我收藏+]

由于大部分逆向工具都是线性读取字节码并解析,当遇到无效字节码时,就会引起反编译工具字节码解析失败。

?

我们可以插入无效字节码到DEX文件,但要保证该无效字节码永远不会被执行(否则您的程序就会崩溃了!)。

?

首先我们新建一个测试类。为了绕过Dalvik运行时代码验证,BadCode.java要保证不被调用。(否则运行app,会出现java.lang.verifyerror异常)

bubuko.com,布布扣

然后生成apk,用ida打开classes.dex。并找到BadCode类的aaa方法。选中的三行代码对应”System.out.println("aaaa");”

bubuko.com,布布扣

切换到HexView-a视图,记录下指令码?“62?00?02?04?1A?01?8E?07??6E?20?19?10?10?00”?和对应偏移“0003A2A4

bubuko.com,布布扣

?

使用C32asm,以十六进制的方式打开dex文件。按快捷键“Ctrl?+?G”,定位到“0003A2A4

把“62?00?02?04?1A?01?8E?07??6E?20?19?10?10?00”改为“12?01?38?01?03?00?FF?FF?00?00?00?00?00??00

bubuko.com,布布扣

?

Opcodes解释:

12?01? //??const/4??v1,?0 //v1=0

38?01?03?00? //??if-eqz???v1,?loc_3A2AC //if(v1==0)?跳转到?loc_3A2AC:

FF?FF? // FFFF?(Bad?opcodes) //本行代码被跳过永远不会执行

// loc_3A2AC:

?

保存dex。把修改后的dex文件拖入DexFixer进行修复。

bubuko.com,布布扣

?

用修复后的dex覆盖原apk中的dex文件。

bubuko.com,布布扣

?

删除META-INF签名文件

bubuko.com,布布扣

使用签名工具,对apk重新签名。

bubuko.com,布布扣

Apk安装到手机,运行成功

bubuko.com,布布扣

?

下面试试反逆向工具的效果

?

Apktool:(很遗憾,新版本已经修复了这个错误)

bubuko.com,布布扣

?

Dex2jar:(反编译失败)

bubuko.com,布布扣

?

利用无效字节码指令引发逆向工具崩溃(一)

原文:http://1249164263.iteye.com/blog/2214319

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!