安卓dalvik虛擬機要求dex文件在內存中以明文形式存在,那么任何加殼方法到頭來到了內存還是明文存在,各種dump方法終究是可以獲得它的。App究竟應該如何加固才能防止被篡改?
加固和 dump 針鋒相對並不新鮮,但我們的工作,就是要不斷提升反編譯的難度。目前的技術方案,可以比較有效地對 DEX 文件進行加殼防護,防止被靜態反編譯工具破解獲取源碼,可以防止通過在內存中破解獲取源碼。
我們可以通過混淆代碼的方式,對編譯好的class文件進行混淆處理,處理后的代碼與處理前代碼能夠完成相同的功能,但混淆后的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語義。比如 ProGuard 就是一個混淆代碼的開源項目,它不僅能夠保護代碼,而且能夠精簡編譯后的程序大小,減少內存占用。
對 DEX 文件進行加殼防護仍然是需要的,我們可以選擇整體 DEX 加固或者拆分 DEX 加固的方式,隱藏源碼防止直接性的反編譯。拆分 DEX 加固需要注意 DEX 文件的數據結構,選取 classdata 和 classcode 這兩部分,即使拆分出來也不會泄露 class 數據和字節碼數據,反編譯出來也不完整,安全性較高。尤其是虛擬機加固的方式,對字節做一些變化處理,即使把替換后的數據恢復了,也不會變形成為之前的字節碼,安全系數較高。詳細原理請參閱:一文了解安卓APP逆向分析與保護機制
相關閱讀:大公司怎么做Android代碼混淆的?
網易雲(易盾) Android 應用加固,IOS應用加固服務均可免費試用,有效防止應用被逆向分析、反編譯、二次打包,核心功能包括 DEX 加固,SO 加密保護,內存防 Dump 保護,防調試器,防模擬器等。