Upload
samael-wang
View
216
Download
8
Embed Size (px)
Citation preview
進階程式設計⺩王哲輝
反編譯
Android 編譯流程
Android 編譯流程
資源檔 -> 編譯過的資源檔.java -> .class -> .jar -> .dex
Android 編譯產出
應⽤用程式專案
程式庫專案
編譯
ant
gradle
.jar + 資源檔
.apk
.aar
Android 編譯產出
應⽤用程式專案
程式庫專案
編譯
ant
gradle
.jar + 資源檔
.apk
.aar
apk / jar / aar 其實都是 zip 檔
解開 apk - unzip
LennaActivity.apk unzip
dex 轉 jar - dex2jar https://code.google.com/p/dex2jar/
dex2jar 基本⽤用法
d2j-dex2jar.bat classes.dex
將 class.dex 轉成 class.jar
反編譯 jar - JD-GUIhttp://jd.benow.ca/
JD-GUI
但是資源檔 全是亂碼...
解開 apk - apktoolhttps://code.google.com/p/android-apktool/
apktool 基本⽤用法
apktool.bat d LennaActivity.apk
解開 apk
解開 apk 但是不要反組譯 javaapktool.bat d -s LennaActivity.apk
如何找出 ⼿手機上的 apk?
第⼀一步:找出 package name
模擬器可⽤用 Hierarchy Viewer
或者從 Google Play Store
第⼀一步:找出 package 位置
密技 - Package Manager
$ adb shell pm path com.facebook.katanapackage:/data/app/com.facebook.katana-1/base.apk
列出特定 package 的安裝位置
第三步:取出 package
adb pull
$ adb pull /data/app/com.facebook.katana-1/base.apk1977 KB/s (29982092 bytes in 14.806s)
取出裝置中的特定檔案