進階程式設計 2015/01/11

22
進階程式設計 哲輝

Upload: samael-wang

Post on 30-Jul-2015

215 views

Category:

Technology


8 download

TRANSCRIPT

Page 1: 進階程式設計 2015/01/11

進階程式設計⺩王哲輝

Page 2: 進階程式設計 2015/01/11

反編譯

Page 3: 進階程式設計 2015/01/11

Android 編譯流程

Page 4: 進階程式設計 2015/01/11

Android 編譯流程

資源檔 -> 編譯過的資源檔.java -> .class -> .jar -> .dex

Page 5: 進階程式設計 2015/01/11

Android 編譯產出

應⽤用程式專案

程式庫專案

編譯

ant

gradle

.jar + 資源檔

.apk

.aar

Page 6: 進階程式設計 2015/01/11

Android 編譯產出

應⽤用程式專案

程式庫專案

編譯

ant

gradle

.jar + 資源檔

.apk

.aar

apk / jar / aar 其實都是 zip 檔

Page 7: 進階程式設計 2015/01/11

解開 apk - unzip

LennaActivity.apk unzip

Page 8: 進階程式設計 2015/01/11

dex 轉 jar - dex2jar https://code.google.com/p/dex2jar/

Page 9: 進階程式設計 2015/01/11

dex2jar 基本⽤用法

d2j-dex2jar.bat classes.dex

將 class.dex 轉成 class.jar

Page 10: 進階程式設計 2015/01/11

反編譯 jar - JD-GUIhttp://jd.benow.ca/

Page 11: 進階程式設計 2015/01/11

JD-GUI

Page 12: 進階程式設計 2015/01/11

但是資源檔 全是亂碼...

Page 13: 進階程式設計 2015/01/11

解開 apk - apktoolhttps://code.google.com/p/android-apktool/

Page 14: 進階程式設計 2015/01/11

apktool 基本⽤用法

apktool.bat d LennaActivity.apk

解開 apk

解開 apk 但是不要反組譯 javaapktool.bat d -s LennaActivity.apk

Page 15: 進階程式設計 2015/01/11

如何找出 ⼿手機上的 apk?

Page 16: 進階程式設計 2015/01/11

第⼀一步:找出 package name

Page 17: 進階程式設計 2015/01/11

模擬器可⽤用 Hierarchy Viewer

Page 18: 進階程式設計 2015/01/11

或者從 Google Play Store

Page 19: 進階程式設計 2015/01/11

第⼀一步:找出 package 位置

Page 20: 進階程式設計 2015/01/11

密技 - Package Manager

$ adb shell pm path com.facebook.katanapackage:/data/app/com.facebook.katana-1/base.apk

列出特定 package 的安裝位置

Page 21: 進階程式設計 2015/01/11

第三步:取出 package

Page 22: 進階程式設計 2015/01/11

adb pull

$ adb pull /data/app/com.facebook.katana-1/base.apk1977 KB/s (29982092 bytes in 14.806s)

取出裝置中的特定檔案