摘要:網易資深安全工程師鐘亞平在今年的安卓巴士全球開發者論壇上做了安卓逆向與保護的演講完整演講內容請見這里一文了解安卓逆向分析與保護機制,其中就談到了關于代碼混淆的問題。就是一個混淆代碼的開源項目,能夠對字節碼進行混淆縮減體積優化等處理。
歡迎訪問網易云社區,了解更多網易技術產品運營經驗。
在大公司怎么做android代碼混淆的?發現他們的軟件用apktool反編譯居然沒看到classes.dex文件和當前安卓APP加固到底該如何做到防篡改?這兩個問題中有過相應回答,現搬運要點過來。
網易資深安全工程師鐘亞平在今年的安卓巴士全球開發者論壇上做了《安卓APP逆向與保護》的演講(完整演講內容請見這里:一文了解安卓APP逆向分析與保護機制),其中就談到了關于代碼混淆的問題。
Java代碼是非常容易反編譯的,為了很好地保護Java源代碼,開發者往往會對編譯好的class文件進行混淆處理。
混淆就是對發布出去的程序進行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能,而混淆后的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語義。ProGuard就是一個混淆代碼的開源項目,能夠對字節碼進行混淆、縮減體積、優化等處理。
Proguard處理流程圖如下所示,包含壓縮、優化、混淆、預檢四個主要環節:
<
壓縮(Shrink):檢測并移除代碼中無用的類、字段、方法和特性(Attribute);
優化(Optimize):對字節碼進行優化,移除無用的指令。優化代碼,非入口節點類會加上private/static/final,沒有用到的參數會被刪除,一些方法可能會變成內聯代碼;
混淆(Obfuscate):使用a、b、c、d這樣簡短而無意義的名稱,對類、字段和方法進行重命名;
預檢(Preveirfy):在Java平臺上對處理后的代碼進行預檢,確保加載的class文件是可執行的。
利用Proguard,對Dex2jar進行反編譯處理后的Apk效果示例:
處理前
Proguard處理后
Proguard混淆器不僅能夠保護代碼,而且能夠精簡編譯后的程序大小,減少內存占用。
混淆代碼逆向分析
如果想要反編譯混淆代碼,鐘亞平分享了一個國外的工具DEGUADR,它能夠通過統計的方式來解混淆。雖然這個工具的正確率達不到100%,但是能在一定程度上幫助反編譯代碼。
使用DEGUADR解混淆的示例:
com.xxxxx.common.util.CryptoUtil網站也提供了一種反編譯服務,如下所示:
java.lang.String a(byte[]) -> encodeToString
java.lang.String a(byte[],boolean,java.lang.String) -> a
byte[] a(byte[],byte[]) -> encrypt
byte[] b(byte[]) -> getKey
byte[] b(byte[],byte[]) -> decrypt
byte[] d(java.lang.String) -> getKey
java.lang.String a(byte,char[]) -> a
java.lang.String a(java.io.File) -> getHash
java.lang.String a(java.lang.String) -> c
java.lang.String b(java.lang.String) -> encode
對 DEX 文件進行加殼防護仍然是需要的,我們可以選擇整體 DEX 加固或者拆分 DEX 加固的方式,隱藏源碼防止直接性的反編譯。拆分 DEX 加固需要注意 DEX 文件的數據結構,選取 classdata 和 classcode 這兩部分,即使拆分出來也不會泄露 class 數據和字節碼數據,反編譯出來也不完整,安全性較高。尤其是虛擬機加固的方式,對字節做一些變化處理,即使把替換后的數據恢復了,也不會變形成為之前的字節碼,安全系數較高。
網易云 Android 應用加固 免費試用,有效防止應用被逆向分析、反編譯、二次打包,核心功能包括 DEX 加固,SO 加密保護,內存防 Dump 保護,防調試器,防模擬器等。
文章來源: 網易云社區
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25293.html
摘要:接下來,我就來詳解一下如何防止被二次打包。開發階段移動應用開發時接入安全組件,保護數據安全。 前言 Android APP二次打包則是盜版正規Android APP,破解后植入惡意代碼重新打包。不管從性能、用戶體驗、外觀它都跟正規APP一模一樣但是背后它確悄悄運行著可怕的程序,它會在不知不覺中浪費手機電量、流量,惡意扣費、偷窺隱私等等行為。 二次打包問題只是Android應用安全風險中...
摘要:為了防止這種現象,我們可以對字節碼進行混淆。動態鏈接庫是目標文件的集合,目標文件在動態鏈接庫中的組織方式是按照特殊方式形成的。 一、已知防護策略 1.不可或缺的混淆 Java 是一種跨平臺、解釋型語言,Java 源代碼編譯成的class文件中有大量包含語義的變量名、方法名的信息,很容易被反編譯為Java 源代碼。為了防止這種現象,我們可以對Java字節碼進行混淆。混淆不僅能將代碼中的類...
閱讀 1767·2023-04-26 01:41
閱讀 3073·2021-11-23 09:51
閱讀 2733·2021-10-09 09:43
閱讀 9019·2021-09-22 15:13
閱讀 2452·2021-09-07 09:59
閱讀 2624·2019-08-30 15:44
閱讀 1132·2019-08-30 12:45
閱讀 2616·2019-08-30 12:43