- 反組譯(Decompile) :
工具其實比想象的多, 之前因為工作需要也碰過幾種, 剛好翻到一篇文章列出有名的幾種. 大部分都能夠取得apk內res目錄下的資源, 如圖案, 字串, xml等. - Apktool : 本篇文章使用此種, 將apk轉換成android的組語smali格式.
- dex2jar + jdgui : 這個超強, 只要程式不要太複雜, 可以看到完整的java code.
- baksmali : 也能產生smali code.
- dexdumptest : 沒用過, 不過是原生提供的工具.
- 步驟
- 下載apktool.jar, 準備apk檔案, 輸入
java -jar apktool.jar d xxx.apk out
紅色請換成想反組譯的apk, 跑完後會產生out目錄, 裡面會有source code的smali版本, resource檔案, 以及AndroidManifest.xml - 然後就可以直接編輯smali檔案, 做想要的修改. smali可能有點難以理解, 不過如果搭配dex2jar + jdgui產生的java source, 應該可以看懂大部分的內容.
我的目標是把廣告移調, 方式稍後再提. - 修改完成後要重新產生新的apk, 也很簡單
java -jar apktool.jar b out out.apk
會將修改後的檔案重新打包成apk - 這時候還不能重新安裝回機器上, 如果直接安裝會看到
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
Android app需要sign過才能安裝, 但是一般狀況下, 我們不可能有開發者當初開發者用來sign app的key, 需要自己想辦法. 偷懶的話可以用debug key, 我是選擇重新產生一組key. 官方網站有教學, 這邊簡述方式.
keytool -genkey -v -keystore xxx.keystore -alias yyy -keyalg RSA -keysize 2048 -validity 10000
紅色部分都可以自己更改, 記得就好 - 然後就是sign apk
jarsigner -verbose -keystore xxx.keystore out.apk yyy - 然後就可以將apk安裝回去拉
adb install out.apk - 修改(移除廣告)
- 要移除廣告, 就要先理解一下廣告怎麼加進去的, 大宗應該是google提供的方式. 如果在返組譯的AndroidManifest.xml看到
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
就代表是用此種方式, 另外可能也會用AdMob之類的. - 如果該apk使用的是google way, 要顯示廣告就一定會用到
adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
之類的code, 所以可以利用grep找到該smali code位置, 將之移除即可
2012年4月5日 星期四
Android decompile and recompile
最近在用一些Free Android App發現有廣告十分的礙眼, 加上之前有報導這些Ad時相當的耗電, 於是有了自行將Ad拿掉的念頭, 以下的紀錄都是實驗性質, 進行非法行為本人既不負責, 謝謝.
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言