用 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
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- 二進位制
- (二進位制)
- 十進位制——二 (八、十六 )進位制
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- Python使用struct處理二進位制PythonStruct
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 二進位制、十進位制與十六進位制相互轉化
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 二進位制轉十進位制快速方法
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 什麼是二進位制?二進位制如何轉換?
- 你知道二進位制、八進位制、十進位制、十六進位制的區別嗎?它們分別有什麼應用場景?
- Cocoapods 二進位制
- 04 二進位制
- leetcode -- 二進位制LeetCode
- JS的二進位制操作JS
- JavaScript十進位制轉換為二進位制JavaScript
- 十進位制轉二進位制推導(草稿)
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- Python處理十六進位制與二進位制轉換的問題——binascii自帶庫PythonASCII
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 進位制與二進位制及相關轉換
- 二進位制陣列陣列
- 二進位制或序列
- 1417 二進位制數的大小
- 3416:【例72.1】 二進位制轉化為十進位制
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- 【python】進位制轉換Python