android怎樣破解已使用加殼技術的APP?
01-03
目前知道Android Dex文件通過加殼防止程序反彙編,不知道有沒有方法可以破解已加殼的Android Dex文件,獲取加殼保護的源代碼?
講講大概思路,技術細節就不能公開了。破解加了dex殼的app,關鍵是要獲得解密後的源dex,現在Android加殼技術還很不成熟,大多都是通過DexClassLoader或者隱藏的函數openDexFile來將源dex載入進來,然後動態替換Application來啟動源程序,跟Windows上傳統的PE文件加殼有一定區別。
要破解傳統的殼,需要跟蹤控制流找到OEP,然後把源程序從內存中dump下來,重建輸入表,最困難的就是要跟著外殼的控制流走,安全工程師為了加大破解難度,使用了很多技術來讓破解者走得更艱難。安全工程師與破解者對抗的關鍵點就在尋找OEP的困難性上。
在Android平台上,正因為新興的dex加殼技術不成熟,導致有些另類的脫殼方法可以繞過分析演算法,直接將源程序dump下來。舉個例子,安卓在4.0版本以後提供openDexFile這個函數來從內存中載入dex,所需要提供的參數是源dex在內存中的地址,所以只要對這個函數下斷,然後從寄存器里找到內存地址,就能將解密後的源dex從內存中dump下來,直接對其反編譯就能獲得源代碼了。更進一步,關於openDexFile這個函數,其實它與libdvm.so這個庫有密不可分的關係,這個庫里提供大量操作dex文件的函數,如果對這個庫里的相關函數下斷,然後從內存中暴力dump一大塊內存區域,經常能直接將內存中的源dex給抓下來。DEX加殼保護、DEX指令動態載入保護、高級混淆保護,SO庫保護,主配置文件保護,資源文件保護,防二次打包防護。愛加密技術在不斷更新中,為用戶提供更安全更便捷的加密服務。
在我很陳舊的知識體系中,脫殼一般的流程是先用PEID類似的軟體去查加的是什麼殼。
如果是比較經典的殼(如什麼北斗殼),可以用專用的脫殼工具脫殼;如果是自己寫的,就比較困難了,建議查閱相關反彙編的教材。
不知道現在反彙編技術發展成什麼樣了,沒有關注,不過大概思路應該差不多吧。
網上有很多反彙編技術的交流組織,如吾愛破解論壇:『脫殼破解區』推薦閱讀:
※如何閱讀程序源代碼?
※如何在中國大陸下載 Android 源代碼?
※《源代碼》結尾時,戈德溫是否處在源代碼世界中?
※如何看待那些燒腦的電影?