上幾章通過封裝Volley實現的網絡處理框架,做了簡單的網絡應用。接下來將以此為原型,進入我們的《反編譯》系列章節。
工欲善其事,必先利其器。
工具
該系列章節中使用到的工具 包括但不限于以下內容,同時反編譯系列的工具也會同代碼共享到https://github.com/joyin5344/Decompiler上。
-
apktool
ApkTool是Google提供的APK編譯工具,能夠反編譯及回編譯apk,同時安裝反編譯系統apk所需要的framework-res框架,清理上次反編譯文件夾等功能。需要java支持。——百度百科
- signapk
實現對安卓ROM和安卓應用進行簽名。
- dex2jar
dex2jar 是一個能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合。
- jd-gui
綠色、免費的Java反編譯工具。
環境準備
反編譯工具目錄結構主要有apktool_sign和jd-gui。
到github把資源下載下來,目錄結構如下圖所示:
有興趣的讀者可以按照我后面的方法設置環境。
- 將
apktool_sign
和jd-gui-0.3.5.linux.i686
目錄copy到~/lib目錄下:
~/lib目錄
注意:如果apktool_sign不是放在~/lib/下,一定要修改apktool_sign/sign.sh
文件中第六行,將變量libdir
的值設為腳本所在目錄(該腳本在后面用到時再詳解):
libdir=~/lib/apktool_sign/
- 創建鏈接(便于后續在任意路徑使用工具):
sudo ln -s ~/lib/apktool_sign/sign.sh /usr/local/bin/apksign
sudo ln -s ~/lib/apktool_sign/apktool /usr/local/bin/apktool
sudo ln -s ~/lib/apktool_sign/dex2jar/dex2jar.sh /usr/local/bin/dex2jar
sudo ln -s ~/lib/jd-gui-0.3.5.linux.i686/jd-gui /usr/local/bin/jd-gui
- framework-res.apk
很多時候我們會忘記安裝framework-res.apk,導致操作不成功,對于我們的項目,直接用自己手機里面導出的apk即可。
adb pull system/framework/framework-res.apk .
安裝framework-res,使用如下命令:
apktool install-framework framework-res.apk
或
apktool if framework-res.apk
測試
正確按照上面的步驟執行,此時便可以進行反編譯操作了。
源文件
我們先創建目錄~/android/decompile/
,然后將之前VolleyDemo.apk[1]復制到該目錄下。
mkdir -p ~/android/decompile/
cp [VolleyDemo.apk路徑] ~/android/decompile/
cd !$
decode
apktool反編譯apk文件,執行如下命令:
apktool d VolleyDemo.apk
VolleyDemo/目錄下則是反編譯后生成的文件,具體內容后續章節會介紹到。
build
apktool b VolleyDemo
build后會生成VolleyDemo/dist/VolleyDemo.apk文件,該文件是沒經過簽名的,也就意味著不能安裝使用。
簽名
通過apksign命令進行簽名,具體實現的腳本代碼后續介紹。
apksign VolleyDemo/dist/VolleyDemo.apk
最終生成的
VolleyDemo/dist/VolleyDemo.apk_sign.apk
文件就是經過簽名,可安裝使用的apk。
至此,反編譯、回編譯、簽名,流程已經跑通,后續章節將在此基礎上講解簽名腳本,查看源碼、進行代碼注入等操作。
-
前面章節代碼編譯后的成果,同時在
Decompiler
項目中apks/
路徑下。 ?