-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCopyHexToBin.py
More file actions
88 lines (56 loc) · 2.05 KB
/
CopyHexToBin.py
File metadata and controls
88 lines (56 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# coding: utf-8
import ida_kernwin
import ida_loader
import idautils
import idaapi
import idc
from idc import *
def mHex(addr, rang):
addr = hex(addr).upper().rstrip('L').lstrip('0X')
if len(addr) < rang:
addr = addr.zfill(rang)
return addr
def LoadHexToBin():
#ida_kernwin.msg_clear()
filename = ida_kernwin.ask_file(0, "*.h86", "Открыть файл ...")
if not filename:
return
try:
f = open(filename, 'r+')
except:
print('[!] Ошибка открытия файла.')
return
segment = '0x00'
lenhex = 0
type = 0
addr = 0
value = 0
pADDR = 0
pos = 0
for line in f:
if line.startswith(":"):
lenhex = int(line[1:3], 16)*2
type = int(line[7:9], 16)
if type == 4:
segment = '0x'+line[11:13]
else:
pos = 0
addr = int(line[3:7], 16)
for hexpos in range(9, 9 + lenhex, 2):
value = line[hexpos : hexpos + 2]
pADDR = segment+mHex(addr+pos, 4)
pos += 1
patch_byte(int(pADDR, 16), 0)
if patch_byte(int(pADDR, 16), int(value, 16)):
print (pADDR + ' <- 0x' + value)
f.close()
#------------------------------------------------------------------------
def main():
# set 'loading idc file' mode
# idc.SetCharPrm(INF_GENFLAGS, ~INFFL_NOUSER|INFFL_LOADIDC|GetCharPrm(INF_GENFLAGS))
LoadHexToBin();
# clear 'loading idc file' mode
# idc.SetCharPrm(INF_GENFLAGS, INFFL_NOUSER|~INFFL_LOADIDC&GetCharPrm(INF_GENFLAGS))
# -------------------------------------------------------------------------
if __name__ == '__main__':
main()