日前網上有 MyTV X HTC One HD 版 Android app 流出,但由於程式限制了只有 HTC One 手機才可以使用,大部份用家得物無所用。當然,道高一尺,魔高一丈,很快的就有人放出破解版,解除了這個限制,Android 全機種都可以用了。
他是如何做到破解的呢?這篇文章會拆解一下這個流出來的 apk 檔,並提供一些工具給大家分析代碼,西杰相信這個過程並不困難,大部份 programmer 學一會兒就應該看得懂!(當然並不是所有 apk 檔都可以用同一方法來破解,加了殼的 apk 就比較困難了)
利申:本文章僅供教學用,請勿嘗試公開發佈破解檔案
工欲善其事,必先利其器,這次我們會用到 dex2jar 這個工具,它的用途是幫我們把 apk 爆開成多個 bytecode 檔,我們就是透過修改這些 bytecode 檔來破解 Android app 的了。值得一提的是,dex2jar 的 wiki 已經清楚說明如何把 apk 檔反譯成 bytecode 檔和如何重新打包,讀完以下教學仍不清楚的話可以參考一下。
下載了 dex2jar 之後,我們就可以開始反譯 apk 檔了,dex2jar 提供的例子是這樣:
# convert classes.dex in test_apk-debug.apk to test_apk-debug_dex2jar.jar d2j-dex2jar.sh -f -o test_apk-debug_dex2jar.jar test_apk-debug.apk # verify jar d2j-asm-verify.sh test_apk-debug_dex2jar.jar # convert to jasmin format d2j-jar2jasmin.sh -f -o test_apk_jasmin test_apk-debug_dex2jar.jar
三個步驟,第一步將 apk 檔內的 classes.dex 抽出來並反譯成 jar,classes.dex 就是主程式所在的地方。第二步是驗証 jar 檔(但我不清楚有什麼用,估計是驗証它是不是完整可執行的檔案吧)。第三步是把 jar 檔轉為 jasmin 格式(大概是 Java bytecode 的意思)。
應用在 mytv 上,上列三個 command 應為: