一缩功、問題描述
在上一篇文章晴及,我們已經介紹了如何修改arsc文件,直接利用AXMLEditor工具進行二進制文件修改嫡锌,可以實現對屬性和標簽的增刪改虑稼。這樣我們就不需要在反編譯apk文件,然后修改xml在回編譯了势木。而本文就用一個案例來分析這個工具的用法蛛倦,我們用一個回編譯失敗的apk包文件,那就是我們常用的WX啦桌,我們想實現的效果很簡單溯壶,在WX的啟動頁面篡改一下,啟動的是我們插入的廣告頁面,效果如下:
看到這里且改,我們要做的很簡單验烧,定義一個廣告Activity啟動頁面,然后把這個廣告Activity配置到清單文件入口即可又跛。我們需要做兩件事:修改代碼+修改AndroidManifest.xml文件了噪窘。
二、案例操作
第一步:修改代碼
這個比較簡單了效扫,也是我們后續(xù)修改代碼不進行反編譯的一個重要操作直砂。直接利用壓縮文件解壓出WX的apk包中的主dex文件classes.dex菌仁,然后利用baksmali.jar和smali.jar工具進行反編譯成smali代碼。當然這里看到有一個操作就是反編譯了济丘。不過反編譯代碼一般都很多報錯情況,如果更牛逼的是二進制修改dex文件洽蛀。哎,感覺那個操作就太費勁了郊供。真心不敢嘗試了峡碉。所以就還是利用這個工具進行需更修改吧。一般這里報錯幾乎很少的驮审。這個工具網上很多鲫寄,自行搜索下載即可疯淫。我們也可以利用這個工具去修改jar文件地来,可以先把jar文件利用dx命令轉化成dex然后在反編譯成samli文件進行修改即可熙掺。工具用法很簡單:
如果真的沒找到這個工具未斑,可以留言單獨發(fā)給你們吧。
那么這個插入廣告的smali代碼難道要手動編寫币绩?那是肯定不是的蜡秽,我們可以定義一個demo工程,然后編寫好這個廣告開平Activity载城,然后在反編譯我們的demo應用拿到對應的smali語法。然后直接將代碼文件拷貝到剛剛用baksmali工具反編譯之后的文件夾目錄下即可:
一定要注意文件的包名是對應的文件夾名稱诉瓦。所以沒有對應的文件夾需要手動新建文件夾。放完之后直接利用smali工具在進行回編譯成dex文件即可。然后在利用壓縮文件直接替換apk文件中的classes.dex文件即可睬澡。
第二、修改清單文件
上面我們就成功的把代碼插入到了dex文件中了煞聪,下面還需要修改他的清單配置文件,把我們的廣告Activity配置成啟動頁面昔脯,但是WX默認的啟動頁面是:
所以我們第一步得先用AXMLEditor.jar工具刪除這個activity標簽啄糙,為什么是刪除呢云稚?其實我們是想修改這個標簽隧饼,讓他不要成為啟動頁面静陈,但是直接刪除intent-filter操作有點費勁燕雁,所以直接刪除這個標簽鲸拥,然后在插入即可:
java -jar AXMLEditor.jar -tag -r activity com.tencent.mm.ui.LauncherUI AndroidManifest.xml AndroidManifest_out.xml
我們依然利用壓縮工具解壓出他的AndroidManifest.xml文件進行操作拐格,操作完成之后,我們需要插入操作了捏浊,因為我們需要插入廣告頁面和剛剛被我們刪除的頁面,所以直接在插入的xml文件中這么定義:
然后命令也很簡單:
java -jar AXMLEditor.jar -tag -i insert.xml AndroidManifest.xml AndroidManifest_out.xml
這樣我們就把xml中的內容插入到了WX的清單配置文件中了呛伴。有的同學會好奇,關于WX原來的那個啟動頁面谒所,我們在插入的時候刪除了好幾個屬性,其實是因為現在AXMLEditor.jar不支持引用的屬性操作劣领。所以這里就直接刪除了姐军,而這些屬性其實不是太影響使用的尖淘。所以可以忽略不管了奕锌。
三村生、簽名安裝
然后我們把修改之后的xml替換WX的apk中的xml文件即可惊暴。這時候我們就完成了代碼和配置的全部替換工作趁桃,接下來我們還得做一步辽话,就是需要刪除WX之前的簽名文件,這個可以直接在壓縮文件中刪除META-INF文件夾即可油啤。
刪除之后典徘,我們就可以利用jarsigner工具直接簽名即可益咬。簽名之后安裝逮诲,我們如果在這個過程中操作不當會出現安裝包損壞的錯誤信息。所以可以簡單的排查文件梅鹦,可能是我們修改xml文件出錯了。我們可以直接用jadx打開apk文件:
正常的情況下冗锁,是不會報錯的,插入成功的蒿讥,如果包損壞的話抛腕,這里就打不開xml文件了芋绸。
四、操作總結
到這里我們就成功插入了廣告頁面摔敛,看看效果如下:
這樣我們就省去了反編譯和回編譯的復雜操作,也可以避免了很多錯誤處理全封。所以從這里可以看到二進制修改文件的需求還是有的。下面就來總結一下刹悴,對于我們在使用apktools工具進行反編譯失敗的時候行楞,我們可以這么做來避免:
第一步:利用baksmali和smali工具直接修改器對應的dex文件
第二步:利用AXMLEditor.jar工具直接修改對應的xml文件
而我們只需要利用壓縮文件直接解壓出dex文件和xml文件即可。修改之后在替換原來的文件土匀,刪除簽名文件子房。再次簽名即可使用了。這樣的操作問題少也方便就轧。
工具源碼下載地址:https://github.com/fourbrother/AXMLEditor
五证杭、總結
關于Android中資源文件修改后面還會繼續(xù)進行,我們需要直接二進制修改resource.arsc文件妒御,插入資源文件的功能解愤,不過這個工作會比這個難點,因為resource.arsc文件格式更為復雜乎莉。不過如果完成了送讲,以后可以不用在擔心回編譯遇到的各種錯誤問題了奸笤。也不需要再一次反編譯和回編譯操作了就可以實現篡改apk文件了。
更多內容:點擊這里
關注微信公眾號李茫,最新技術干貨實時推送
編碼美麗技術圈
微信掃一掃進入我的"技術圈"世界
掃一掃加小編微信添加時請注明:“編碼美麗”非常感謝揭保!