(爱加密系列教程十四)利用无效字节码指令引发逆向工具崩溃(一)

本文介绍了如何通过插入无效字节码到DEX文件中,绕过Dalvik运行时代码验证,确保类方法不会被执行,从而实现逆向工程的反制策略。通过使用IDA、C32asm、DexFixer等工具,实现了在不改变应用功能的情况下,对apk进行修改,使得逆向工具无法正确解析和反编译。

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

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

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

请输入图片描述

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

请输入图片描述

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

请输入图片描述

使用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”
请输入图片描述

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进行修复。

请输入图片描述

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

请输入图片描述

删除META-INF签名文件

请输入图片描述

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

请输入图片描述

Apk安装到手机,运行成功

请输入图片描述

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

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

请输入图片描述

Dex2jar:(反编译失败)

请输入图片描述

用到的工具:

IDA :http://pan.baidu.com/share/link?shareid=132208&uk=1795434040

C32Asm :http://www.crsky.com/soft/3128.html

DexFixer:http://bbs.pediy.com/showthread.php?p=1158816

Ijiami signer:http://www.ijiami.cn/

更多内容,期待您的探索,请关注爱加密,让您精彩不断!

爱加密APP漏洞分析平台:http://safe.ijami.cn/

爱加密官方地址:http://www.ijiami.cn/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值