您好,登錄后才能下訂單哦!
由于大部分逆向工具都是線性讀取字節碼并解析,當遇到無效字節碼時,就會引起反編譯工具字節碼解析失敗。
我們可以插入無效字節碼到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://t.cn/R2tfvdP (需登錄注冊賬號:http://t.cn/R2tfAiC)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。