本案例講述一個Apk反編譯全過程,包括:編譯源碼、修改源碼、打包、簽名。
案例展示:
首先準備反編譯工具:
dex2jar(dex轉jar)
jd-gui(對Jar進行反編譯)
apktool(對apk進行反編譯)
baksmali(將dex文件編譯成smali文件)
工具截圖:
新建項目,生成一個APK:
複製【app-debug.apk】到【C:\Users\Chao\Desktop\反編譯工具】開始反編譯
CMD執行以下命令將Apk拆包(拆包後會在當前目錄生成file文件夾):
java -jar apktool_2.3.4.jar d -f app-debug.apk -o file
用壓縮軟件打開apk,將內部的classes.dex解壓到【C:\Users\Chao\Desktop\反編譯工具\dex2jar-2.0】目錄,並執行以下命令生成classes-dex2jar.jar:
d2j-dex2jar classes.dex
用jd-gui.exe打開上面生成的classes-dex2jar.jar,查看源碼:
根據jar反編譯的源碼進行修改,例如【file/smail/包名】目錄下對應MainActivity.smali文件:
將smail內部Unicode字符串轉碼,確定是否是我們要修改的內容:
用我們想要的文字轉換爲Unicode字符串,並替換保存:
運行以下命令重新打包apk:
java -jar apktool_2.3.4.jar b file -o cc.apk
此時apk還無法安裝,還需要簽名,運行以下命令簽名:
debug.keystore是從android studio配置目錄拿到的測試key,通常位於目錄【C:\Users\Chao\.android】
jarsigner -verbose -keystore debug.keystore -signedjar cc_signed.apk cc.apk androiddebugkey
此時apk已經可以安裝使用了,不過爲了提升運行速度,建議做一次對齊操作:
APK對齊:工具存放於<Android SDK>/build-tools/<version>
zipalign 4 cc_signed.apk cc_signed_aligned.apk
另外附上baksmali/smali將dex與smail相互轉換的命令:
java -jar baksmali-2.2.5.jar d classes.dex -o smali
java -jar smali-2.2.5.jar a smali -o newclasses.dex