簡單說說 Android 混淆和加固

混淆:
針對項目代碼,代碼混淆通常將代碼中的各種元素(變量、函數、類名等)改爲無意義的名字,使得閱讀的人無法通過名稱猜測其用途,增大反編譯者的理解難度。
雖然代碼混淆可以提高反編譯的門檻,但是對開發者本身也增大了調試除錯的難度。開發人員通常需要保留原始未混淆代碼用於調試。

加固:
針對apk,加固是多維度的安全防護方案,包括反破解、反逆向、防篡改等,可以防止應用被各類常見破解工具逆向,安全性要遠大於單純的代碼混淆。

以上兩種方式 混淆用於讓apk被反編譯後獲取的代碼難理解,加固用於讓apk難於被反編譯。兩種操作都是對項目的安全措施,兩個操作是不衝突的,可以選擇其一,也可以兩個操作都做。

加固原理:

對App進行加固,可以有效防止移動應用被破解、盜版、二次打包、注入、反編譯等,保障程序的安全性、穩定性。對於金融類App,尤其重要。

對App dex進行加固的基本步驟如下:

  1. 從App原始apk文件裏獲取到原始dex文件
  2. 對原始dex文件進行加密,並將加密後的dex文件和相關的存放到assert目錄裏
  3. 用脫殼dex文件替換原始apk文件裏的dex文件;脫殼dex文件的作用主要有兩個,一個是解密加密後的dex文件;二是基於dexclassloader動態加載解密後的dex文件
  4. 因爲原始apk文件已經被修改,所以需要刪除原始apk的簽名信息,即刪除META-INF目錄下的.RSA、.SF 和MANIFEST.MF文件
  5. 生成加固後的apk文件
  6. 對加固後的apk文件進行簽名,apk加固完成。

原理分析:
1.爲什麼要對原始dex進行加密,同時用脫殼dex文件替換原始dex文件?大部分的apk反編譯工具(dex2jar、apktools、jui等)都是對dex文件進行反編譯,將dex文件反編譯成smail,然後再轉化成class文件進行閱讀和修改。用脫殼dex替換原始dex文件之後,用上面的反編譯工具反編譯apk文件,只能看到脫殼程序的class文件,看不到apk本身的class文件。對dex文件進行加密,這樣即使第三方拿到了dex文件,以爲無法解密,也就無法對其進行解析和分析。

2.怎麼確保apk功能正常運行?加固後的apk啓動之後,脫殼dex文件會對加密後的dex文件進行解密,然後機遇dexclassload動態加載解密後的dex文件。從用戶的角度,加固前後App的功能和體驗基本是一樣的。

3.dex加固主要是防止被靜態反編譯,進而獲取源碼並修改

加固工具有 騰訊加固 360加固 阿里加固 梆梆加固 還有就是 愛加密

這裏有個第三方免費加固對比 加固對比

加固以後需要重新簽名
如果不知道怎麼辦 可以點擊查看這篇文章 Android 創建證書 或加固後更新簽名

發佈了45 篇原創文章 · 獲贊 38 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章