因爲大部分逆向工具都是線性讀取字節碼並解析,當遇到無效字節碼時,就會引發反編譯工具字節碼解析失敗。php
咱們能夠插入無效字節碼到DEX文件,但要保證該無效字節碼永遠不會被執行(不然您的程序就會崩潰了!)。
首先咱們新建一個測試類。爲了繞過Dalvik運行時代碼驗證,BadCode.java要保證不被調用。(不然運行app,會出現java.lang.verifyerror異常)html
而後生成apk,用ida打開classes.dex。並找到BadCode類的aaa方法。選中的三行代碼對應」System.out.println("aaaa");」java
切換到HexView-a視圖,記錄下指令碼 「62 00 02 04 1A 01 8E 07 6E 20 19 10 10 00」 和對應偏移「0003A2A4」面試
使用C32asm,以十六進制的方式打開dex文件。按快捷鍵「Ctrl + G」,定位到「0003A2A4」segmentfault
把「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」app
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) //本行代碼被跳過永遠不會執行spa
// 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/