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