上一節我們介紹了一種利用無效字節碼指令引發逆向工具崩潰的方法。(http://blog.csdn.net/lz201234/article/details/46004573)可惜的是大部分反編譯工具已經修復了該bug。但是如果我們插入有效的字節碼指令,但是後跟無效的數據引用,結果會是怎麼樣呢?
使用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 1A 00 FF FF 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:
1A 00 FF FF // const-string v0,(不存在的引用 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
Ijiami signer:http://t.cn/R2tfvdP (下載此簽名工具需登錄註冊http://t.cn/R2tfAiC)