愛加密和梆梆的加固的破解方法 - pxb1988的專欄 - 博客頻道 - CSDN.NET

愛加密和梆梆的加固的破解方法 - pxb1988的專欄 - 博客頻道 - CSDN.NET

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

By Bob Pan 多線程

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

然而, 無論如何隱藏dex, 最終在運行時都必須釋放到內存, 因此本文的思路是從內存中找到解密後的dex文件, 進而獲得加固前的apk. 編輯器

愛加密

愛加密的app並無作反調試的保護. 打開app以後直接使用gdb鏈接, 而後用gcore, 產生core dump. 工具

使用ps查看pid 加密

使用gdb鏈接pid .net

使用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. 從這個角度說, 愛加密和梆梆的加固形同虛設.

 



相關文章
相關標籤/搜索