二進位修補¶
二進位修補用於對裝置上的檔案或程式進行修補。使用十六進位萬用字元進行查找並替換,支援高/低位萬用。例如,?? 代表任意一個位元組,B? 代表以 B 為高位(即 B0-BF)的任意位元組,如 BA、B1、B9。模式 49 BA ?? ?C 會匹配檔案中任意符合該模式的位元組序列。以下呼叫將把 test.bin 中所有與 AA BB CC D? 匹配的位元組序列替換為 AA BB CC DD,介面會返回替換的數量以及每次替換的偏移。
d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin")
>>> result = d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin")
>>> print(result.count)
1
>>> print(result.replaces[0].offset)
8123
備註
示範中僅展示了四位元組的匹配與替換,介面實際支援任意長度的多位元組匹配和替換,但匹配模式至少需要兩個有效的十六進位字元(即至少一個非萬用的位元組)。
如需限制最大替換數量,可透過 maxreplace 參數進行設定,預設會替換全部匹配項。
d.hex_patch("AA BB CC D?", "AA BB CC DD", "/data/test.bin", maxreplace=2)
還可以透過 dryrun 參數啟用測試模式,此時僅會為您在檔案中尋找匹配位置,而不進行實際的替換操作。
d.hex_patch("AA BB ?? ??", "AA BB 00 00", "/data/test.bin", dryrun=True)
提示
檔案路徑支援使用萬用字元匹配(glob)。例如 /data/app/*/test.bin 將匹配 /data/app 目錄下任意一級子目錄中的 test.bin 檔案。