apk解壓後目錄結構:
Dex檔案格式:
視訊 Android安全之 – Dex檔案解析(一) Android安全之 – Dex檔案解析(二) (百度網盤)
- Official dex bytecode reference
- Official dex format reference
apk簽名:
簽名相關檔案在META-INF目錄下三個檔案關于X.509證書,RSA加密解密原理,SHA1算法參見其他文檔。 apk使用自簽名,證書使用自簽名。 是以隻能進行一緻性驗證不能進行合法性驗證。 MANIFEST.MF中儲存所有檔案對應SHA1摘要資訊。 CERT.SF中儲存了MANIFEST.MF檔案的SHA1-RSA摘要 簽名 及其他檔案的摘要簽名。(有說僅摘要未簽名,未核實) CERT.RSA儲存對CERT.SF的簽名,簽名使用的證書。
是以完全可以修改apk中檔案,然後用自己的證書重新簽名使用。
apk反向工程
使用dex2jar根據dex生成jar,使用jd-gui檢視jar包源碼 使用apktool根據apk解開apk生成smali檔案及資源檔案,可反向根據smali及資源檔案生成apk apktool使用smali及baksmali處理dex與smali的轉化
https://github.com/JesusFreke/smalismali syntax is based on jasmin/ dedexer syntax
執行個體操作
建立Hello.javagenerate Hello.class javac Hello.java
generate Hello.dex D:\android\sdk\build-tools\android-4.4W\dx --dex --output=Hello.dex Hello.class
disassemble hello class javap -c -classpath . Hello
dump hello dex dexdump -d Hello.dex
convert dex to smali java -jar D:\work\tools\decompile_apk\smali-2.0.3\baksmali-2.0.3.jar Hello.dex
convert smali to dex java -jar D:\work\tools\decompile_apk\smali-2.0.3\smali-2.0.3.jar out -o hello2.dex
run Hello with dalvikvm
adb push Hello.dex /sdcard/.adb shell dalvikvm -classpath /sdcard/Hello.dex Helloodex 系統app,預先生成放入rom中 /system/app 使用者安裝app,首次運作時dexopt緩存 /data/dalvik-cache