愛加密和梆梆的加固的破解方法


愛加密和梆梆加固的破解方法

By Bob Pan

梆梆與愛加密都使用了將原有的dex隱藏, 在運行時解壓, 並且通過修改app的類加載器的方式實現加固. 參考: AndoridAPK反逆向解決方案:梆梆加固原理探尋

然而, 不管如何隱藏dex, 最終在運行時都必須釋放到內存, 所以本文的思路是從內存中找到解密后的dex文件, 進而得到加固前的apk.

愛加密

愛加密的app並沒有做反調試的保護. 打開app之后直接使用gdb連接, 然后用gcore, 產生core dump.

使用ps查看pid

使用gdb連接pid

使用gcore產生core dump

 

將產生的core.1033復制回電腦, 並使用編輯器打開, 通過類名找到dex中string-data段, 然后通過查找’dex.035’可以找到多離string-data最近的個dex頭. dex文件頭偏移32的整形值就是dex的文件長度. 使用dd命令可以從內存中摳出dex.

通過類名找string-data段

找到最近的dex文件頭(0x4f87a08)和dex文件大小0x07c0

使用dd摳出dex

這個文件是個完整的dex文件, 並且可以被dexdump直接打印

梆梆

梆梆加固的程序做了anti-ptrace, 表現為使用gdb --pid 連接不上對應的進程, 利用kernel-model打印ptrace的記錄, 可以看出梆梆

l  使用了3個進程互相ptrace.

l  發送錯誤指令來檢查ptrace是否被劫持(反回值是-3行, 嘗試讓1568進程繼續執行, 但是1568並未被ptrace, 必須出錯),

l  利用ptrace修改另一個進程的數據(action是5的行).

ptrace系統調用的記錄, 右邊是ptrace的參數

雖然連不上1552, 但是dalvik是一個多線程的程序, 里面包含主進程, gc線程, binder線程等, 雖然我們用gdb連不上主線程, 但是我們可以連上其他線程, 這些線程的tid在/proc/[pid]/task/目錄下.

Gdb連接任意一個tid

拿到coredump后與愛加密一樣做相同的處理, 可以拿到dex.

總結

愛加密和梆梆通過隱藏dex確實可以讓大部分靜態分析工具找不到執行代碼, 但是在動態運行的時候無可避免的需要將dex在內存中還原. 雖然梆梆做了反調試, 但是通過其他方式也同樣可以獲取其內存. 通過本文的方法分析其內存然后恢復dex, 更進一步可以完全恢復原始apk. 從這個角度說, 愛加密和梆梆的加固形同虛設.

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM