แพตช์ไบนารี (Binary Patch)¶
แพตช์ไบนารีใช้สำหรับแก้ไขไฟล์หรือโปรแกรมบนอุปกรณ์ โดยใช้ wildcard เลขฐานสิบหกในการค้นหาและแทนที่ รองรับ wildcard สำหรับ nibble (ครึ่งไบต์) เช่น ?? หมายถึงไบต์ใดก็ได้, B? หมายถึงไบต์ใดก็ได้ที่ขึ้นต้นด้วย B เช่น BA B1 B9 ดังนั้น wildcard 49 BA ?? ?C จะจับคู่กับส่วนใดๆ ในไฟล์ที่ตรงกับ 49 BA .. .C การเรียกใช้ฟังก์ชันด้านล่างนี้จะแทนที่ไบต์ทั้งหมดที่เป็น AA BB CC D[0-9A-F] ในไฟล์ test.bin ด้วย AA BB CC DD และฟังก์ชันจะคืนค่าจำนวนการแทนที่และตำแหน่ง offset ที่ถูกแทนที่
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)
นอกจากนี้ยังมีโหมดทดสอบ (dry run) ซึ่งจะทำการค้นหาตำแหน่งที่ตรงกันในไฟล์เท่านั้นโดยไม่ทำการแทนที่จริง
d.hex_patch("AA BB ?? ??", "AA BB 00 00", "/data/test.bin", dryrun=True)
คำแนะนำ
พาธของไฟล์ (file path) รองรับการใช้ wildcard (glob) ในการจับคู่ เช่น /data/app/*/test.bin จะค้นหาและจับคู่ไฟล์ test.bin ที่อยู่ในไดเรกทอรีระดับใดก็ได้ภายใต้ /data/app