1. 程式人生 > >Android APK加固(加殼)工具

Android APK加固(加殼)工具

之前一篇文章Android proguard程式碼混淆,我們講解了如何實現APK的程式碼混淆,讓反編譯者不那麼容易閱讀我們的原始碼。雖然我們混淆,做到native層,但是這都是治標不治本的。反編譯的技術在更新,那麼保護Apk的技術就不能停止。現在有很多Apk加固的第三方平臺,譬如愛加密,360加固,梆梆加密等,但是這些平臺都是收費的。今天我們給大家介紹一個免費的APK加固工具APK Protect。

測試點評

  • APK Protect是一款Android APK加密服務,PC Edition免費,其他高階版收費。
  • 服務支援Android 2.1-4.2。
  • 對於APK而言,使用PC Edition加密後其體積增加30-50KB,影響較小。
  • 企業版同時提供Java和C++程式碼的加密。
  • 提供加密操作流程和視訊教程(英文)。
  • 更新比較及時,目前最高支援Android 4.2。

開發建議

  • APK Protect的免費版(PC Edition)只能保護Java程式碼,可以滿足開發者的部分需求。
  • APK Protect的高階版本均需付費,且已經停止提供免費試用,加密C++程式碼需要使用最高階的企業版。
  • 服務不提供中文支援,對開發者的英語水平有一定要求。

整合過程

加固流程

(1)選擇版本:有多個版本,此處選用免費版(APK Protect PC Edition)。
這裡寫圖片描述
我把軟體也上傳到CSDN伺服器,下載地址


下載後解壓目錄如下:
這裡寫圖片描述

(2)目標應用:SplashAct.apk

(3)加密過程:
無需安裝,解壓後直接執行apkcrypt.exe;
選擇需要加密的APK;
指定生成目標的名字;
點選按鈕開始加密,軟體會在同一目錄下生成加密後的APK。
這裡寫圖片描述

加密前:18823KB
加密後:18885KB
這裡寫圖片描述

注:點選開始後,可能會彈出錯誤資訊:The application need Java jre , please install jre and retry
解決辦法:由於電腦是64位的,我只安裝了64位的jre,再去裝個32位的jre就可以了

重新簽名

獲取到加固之後的APK檔案,這時還不能立即安裝,會提示APK未簽名,所以我們需要使用簽名工具對其進行簽名。
步驟:將剛才生成的加固後的APK檔案和keystore放在同一目錄下,使用命令列進行簽名。
jarsigner -verbose -keystore eastday_sign.keystore -signedjar SplashAct_signed.apk SplashAct.apk eastday


說明:
-verbose 輸出簽名的詳細資訊
-keystore eastday_sign.keystore 使用key的絕對路徑
-signedjar SplashAct_signed.apk SplashAct.apk eastday 正式簽名,三個引數中依次為簽名後產生的檔案SplashAct_signed.apk ,要簽名的檔案SplashAct.apk和金鑰庫(也就是alias)eastday
這裡寫圖片描述

簽名成功,在相同目錄下會生成簽名後的APK檔案。
這裡寫圖片描述

zipalign(壓縮對齊)優化

簽名之後的APK檔案現在已經可以安裝到手機上了,不過在此之前Android還極度建議我們對簽名後的APK檔案進行一次對齊操作,因為這樣可以使得我們的程式在Android系統中執行得更快。對齊操作使用的是zipalign工具,該工具存放於<\Android SDK>/build-tools/目錄下,將這個目錄配置到系統環境變數當中就可以在任何位置執行此命令了。命令格式如下:
zipalign -v 4 SplashAct_signed.apk SplashAct_aligned.apk

壓縮對齊成功,在相同目錄下會生成對齊後的APK檔案。
這裡寫圖片描述

反編譯

關於反編譯APK不熟悉的同學請看我的這篇文章Android APK的反編譯和重新打包
我們將剛剛加固之後的APK檔案(SplashAct_signed.apk或SplashAct_aligned.apk)進行反編譯,會報錯:
這裡寫圖片描述

用gui工具看反編譯後代碼也是看不了的,說明APK已經被成功加固了。
這裡寫圖片描述