上一节我们介绍了一种利用无效字节码指令引发逆向工具崩溃的方法。(http://blog.csdn.net/lz201234/article/details/46004573)可惜的是大部分反编译工具已经修复了该bug。但是如果我们插入有效的字节码指令,但是后跟无效的数据引用,结果会是怎么样呢?

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

把“620002041A018E076E2019101000”改为“1201380103001A00FFFF00000000”(不清楚的可以看上一篇文章)

Opcodes解释:

1201 //const/4v1,0 //v1=0

38010300 //if-eqzv1,loc_3A2AC //if(v1==0)跳转到loc_3A2AC:

1A00FFFF //const-stringv0,(不存在的引用FFFF)

// 本行代码被跳过,永远不会执行

// 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

Ijiamisigner:http://t.cn/R2tfvdP (下载此签名工具需登录注册http://t.cn/R2tfAiC)