用 python 修改二進位制的 AndroidManifest.xml
APK上架市場前修改幾次versionCode
和versionName
是常有的事情,大部分都是溝通上的問題,因為一個包要經過 開發->測試->己方運營->平臺方運營->平臺方測試(可能有),這是一條崎嶇漫長的路,過程中可能有人連這兩個版號是啥有啥用都不是很清楚,無奈。
既然避免不了就只能想辦法解決了:
- 方法一: 修改原始碼重新構建
- 優點:簡單有效
- 缺點:
- 耗時長,因為要重新構建
- 開發容易夾帶私貨。如果再加上開發那邊分支管理混亂!!!(作為一個測試人員我已經不敢往下再想了,恐懼ing。。。)
- 方法二:使用Apktool,解包->修改->重新打包
- 優點:避免了方法一中的問題
- 缺點:
- 需要環境匹配,JDK版本和Apktool版本需要匹配
- 部分包經過處理,Apktool無法正常執行
- 重新構建後導致部分資源的壓縮發生變化而不能正常讀取
那麼能不能直接修改APK中的AndroidManifest.xml呢?因為aapt
和AXMLPrinter2.jar
都可以直接解析二進位制的AndroidManifest.xml,所以直接修改應該是可行的,只要知道檔案的結構。
說到這裡不能不從懷裡掏出這張MindMac大神從AXMLPrinter2.jar
原始碼中分析出來的結構圖,膜拜Orz
四年前拿者這張寶圖,再到同性交友網GitHub上找到了一個java的專案,並在上面做了二次開發解決了修改版本的問題,原以為一切就應該到此結束了。
但是、
但是、、
但是、、、
Bug會遲到但是從不缺席:
在把versionName
從1.9
修改成1.10
後APK安裝失敗,通過定位問題後發現是AndroidManifest.xml解析錯誤,嘗試著想在原來的程式碼上修復這個Bug,結果失敗了。果然程式碼這個東西少了註釋這個紅娘,很快就和你行同陌路了。
不過好在寶圖還在,正好最近在學習Python,而且構建那塊也是用Python處理,一切都在告訴我『用Python重擼一遍吧』
好了廢話了那麼多直接上鍊接吧
https://github.com/CodyGit/ManifestEditor
Bug最終浮出了水面:
在新增字串時都是2個位元組的新增,但是每個Chunk必須是4個位元組的倍數,當把1.9
改成1.10
新增了1個字元對應就是2個位元組,需要在StringChunk
的 末尾不上2個自己0x00
等會兒,Android需要修改iOS就不需要了?推薦你使用/usr/libexec/PlistBuddy
超香的。
相關文章
- Android逆向(一) —— AndroidManifest.xml 二進位制解析AndroidXML
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- python進位制轉換(二進位制、十進位制和十六進位制)及注意事項Python
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 二進位制與二進位制運算
- 用C#實現二進位制的減法(包括二進位制小數)C#
- 進位制詳解:二進位制、八進位制和十六進位制
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- Python 十進位制轉換為二進位制 高位補零Python
- (二進位制)
- 二進位制
- 用二進位制去控制分享
- 十進位制——二 (八、十六 )進位制
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 二進位制、十進位制與十六進位制相互轉化
- Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 位,位元組,二進位制,十六進位制間的關係
- 二進位制轉十進位制快速方法
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 什麼是二進位制?二進位制如何轉換?
- 04 二進位制
- Python使用struct處理二進位制PythonStruct
- Python讀寫二進位制檔案Python
- 【轉帖】Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- 修改二進位制引數檔案(SPFILE)的方法之一
- mysql修改二進位制log-bin報錯的問題MySql
- JavaScript十進位制轉換為二進位制JavaScript
- Oracle二進位制與十進位制轉換Oracle
- 十進位制轉二進位制推導(草稿)
- JS的二進位制操作JS
- JavaScript 二進位制的 ASTJavaScriptAST
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機