import
os
import
shutil
def
hex_to_bytes(hex_str):
return
bytes.fromhex(hex_str)
def
read_binary_file(file_path, offset, size):
with
open
(file_path,
'rb'
) as
file
:
file
.seek(offset)
data
=
file
.read(size)
return
data
def
backup_file(file_path):
backup_path
=
file_path
+
".bak"
shutil.copy2(file_path, backup_path)
print
(f
"文件已备份到:{backup_path}"
)
def
modify_binary_file(file_path, offset, original_hex, modified_hex):
if
not
os.path.exists(file_path):
print
(f
"Didn't find {file_path}, skipping patch generation"
)
return
size
=
len
(original_hex)
/
/
2
data
=
read_binary_file(file_path, offset, size)
print
(f
"读取到的数据(原始字节):{data}"
)
print
(f
"读取到的数据(原始十六进制):{data.hex()}"
)
text
=
data.decode(
'utf-8'
)
if
data.find(bytes.fromhex(modified_hex)) !
=
-
1
:
print
(f
"{file_path} 已经修补了:)"
)
print
(f
"偏移地址:0x{offset} 大小:{size}"
)
return
if
data.find(bytes.fromhex(original_hex))
=
=
-
1
:
print
(f
"{file_path} 无法匹配到数据:)"
)
print
(f
"偏移地址:0x{offset} 大小:{size}"
)
return
print
(f
"原始字节匹配成功,正在修补文件..."
)
print
(f
"偏移地址:0x{offset} 大小:{size}"
)
backup_file(file_path)
byte_data
=
hex_to_bytes(modified_hex)
with
open
(file_path,
'r+b'
) as
file
:
file
.seek(offset)
file
.write(byte_data)
print
(f
"修改后的数据(字节):{modified_hex}"
)
print
(f
"文件修改完成!"
)
file_path
=
"PilotEdit.exe"
offset
=
int
(
"811CE0"
,
16
)
original_str
=
"30819D300D06092A864886F70D010101050003818B0030818702818100B163741C37A823BC53F624DCCBD465554FACAEAE91D640FE7BB4642124E92613C1FD4B930A7A386F062E5A42DBE4425AA18E1ABA301CD9550C59787387745C8569FC7F4114DE5E209BAB232FAC903CB1832497214DCE43E2AC91289AACE353C370C9C8598B6D1DFB6A5038444254D6280B490770B637C63E5346FD9837775955020111"
original_hex
=
"3330383139443330304430363039324138363438383646373044303130313031303530303033383138423030333038313837303238313831303042313633373431433337413832334243353346363234444343424434363535353446414341454145393144363430464537424234363432313234453932363133433146443442393330413741333836463036324535413432444245343432354141313845314142413330314344393535304335393738373338373734354338353639464337463431313444453545323039424142323332464143393033434231383332343937323134444345343345324143393132383941414345333533433337304339433835393842364431444642364135303338343434323534443632383042343930373730423633374336334535333436464439383337373735393535303230313131"
modified_str
=
"30819D300D06092A864886F70D010101050003818B00308187028181008BF8E3EB435F355159AEB633867A53454EDC4A9D4409976E465155D713DE8E32BF1B839ED0C28C11B4A3853E881D359E42A48FF61C1EE28EC3C9511603A710478561E8FECA6637E663F0E6150F23926C2066F23181A6AD734DB6CE2A8CB6A739C70C83D07CE8062FBB1625618C363B6A0BBB1D2EAFD13B70665F8A3EBAF7839B020111"
modified_hex
=
"3330383139443330304430363039324138363438383646373044303130313031303530303033383138423030333038313837303238313831303038424638453345423433354633353531353941454236333338363741353334353445444334413944343430393937364534363531353544373133444538453332424631423833394544304332384331314234413338353345383831443335394534324134384646363143314545323845433343393531313630334137313034373835363145384645434136363337453636334630453631353046323339323643323036364632333138314136414437333444423643453241384342364137333943373043383344303743453830363246424231363235363138433336334236413042424231443245414644313342373036363546384133454241463738333942303230313131"
print
(f
"/================================"
)
print
(f
"用户名: afdm@52pojie"
)
print
(f
"序列号: 695A4C6B944C6CD7761AF49EFFD15970D91A9E2DC381361AB222FABFFCC20AB78BFEF6041FC249D668872F1FE998CEA0D3A2D3D6842B8766386142A8D17D50EB5624ECAC2384C84278F6ECA3B06332934AF33AB0ACE4F99119CCCF3BE5F5BBB40036E1543E98FA7D9951C1CAF2638EBAECD37DBB7DE6751588552264895120E6"
)
print
(f
"/================================"
)
modify_binary_file(file_path, offset, original_hex, modified_hex)