Mac下反編譯apk與淺談Android應用安全

通過反編譯 我們可以獲得layout,源代碼,資源等。反編譯我們感興趣的apk,可以查看對應的內(nèi)容,借鑒人家的代碼。另外,有時候我們?yōu)榱藱z驗自己的應用是否混淆成功,通過反編譯可以查看混淆情況。

1.工具

  • apktool(可以提取布局文件,圖片等資源文件)
  • dex2jar(將classes.dex轉化為jar文件)
  • jd-gui(查看jar文件中的Java文件)
注意:這些工具的正常使用要先搭好Java開發(fā)環(huán)境

下載后如下:

全部.png

2.工具安裝與使用

  • apktool的使用
    下載后放到新建的apktool文件夾下,將我們要反編譯的apk文件放入此文件夾下,命令行進入此文件夾,輸入java -jar apktool.jar d test.apk進行反編譯,編譯后在此文件夾下生成了我們需要的文件,在里面我們可以看到layout等一些資源
apktool編譯后.png
生成的文件.png
layout.png
  • dex2jar的使用
    下載后解壓,把我們要反編譯的安裝包格式改為zip或rar,解壓后會得到classes.dex文件,把此文件放入dex2jar文件夾,命令行切換到此文件夾,輸入chmod +x d2j-dex2jar.sh 賦予可執(zhí)行權限,輸入sudo sh d2j-dex2jar.sh classes.dex 即可生成我們所需要的jar文件
    注意:如果生成jar文件時出現(xiàn)異常,主要是Java版本太低(不小于7.0),通過升級Java版本或者降低dex2jar版本可以解決
生成classes.dex文件.png
生成jar文件.png
  • jd-gui使用
    打開jd-gui解壓包中的JD-GUI應用,打開后用此應用打開我們剛才生成的jar文件,然后可查看apk文件中的源代碼了
啟動JD-GUI.png

源代碼.png

注意:打開jar文件時JD_GUI可能會出現(xiàn) Invalid input fileloader錯誤,在命令行輸入:sudo chmod +xr classes-dex2jar.jar即可解決

屏幕快照 2017-06-02 14.58.54.png

3.重新打包簽名

  • 將AndroidManifest.xml文件中channel值改為10001(如果沒有,就不用修改)
  • 命令行到apktool文件夾下,輸入:java -jar apktool.jar b apkName -o apkName_new.apk,進行重新打包
  • 簽名使用:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名 -storepass 簽名密碼 待簽名的APK文件名 簽名的別名
  • 簽名完成后,最好對APK文件進行對齊操作,這樣可以使得程序在Android系統(tǒng)中運行得更快,對齊操作使用的是zipalign工具,該工具在<Android SDK>/build-tools/<version> (我的路徑為:/Users/cxg/Library/Android/sdk/build-tools/25.0.2/zipalign)目錄下,需要將這個目錄配置到系統(tǒng)環(huán)境變量當中也可以在任何位置執(zhí)行此命令。zipalign 4 new_name.apk new_name_aligned.apk

4.關于應用安全

通過反編譯我們看到了程序源代碼,布局等資源文件,有時候就需要對我們自己的應用進行保護,主要方法如下:

  • 使用ProGuard進行混淆處理,可以增加反編譯的難度(這是最基本保護代碼的方法,還可以做到壓縮,優(yōu)化我們的代碼)
  • 應用加固(可以防篡改,防反編譯,但也不是絕對的)
  • 應用加密(同樣可以達到反編譯效果,可以使用第三方提供的相應服務)

5.后記

后期發(fā)現(xiàn)使用jadx方法也可以進行反編譯,此方法更簡單,更好用,反編譯出來的.class文件中的資源引用不是ID值,而是文件名。使用方法如下:

  • git clone https://github.com/skylot/jadx.git
  • cd jadx/
  • ./gradlew dist
  • ./jadx/build/jadx/bin/jadx-gui
  • 如果安裝了之后在jadx目錄下運行./build/jadx/bin/jadx-gui即可
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容