Skip to content

Commit 0fc1dc1

Browse files
committed
Pain
1 parent 8656565 commit 0fc1dc1

14 files changed

+239
-259
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
.vscode/*
3+
iconbuster.py

findmyfunc.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,16 @@
22
import idaapi
33

44
def getsigloc(sig):
5-
segend = ida_segment.get_segm_by_name(".text").end_ea
6-
addr = ida_search.find_binary(0, segend, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
5+
segend = idaapi.get_segm_by_name(".text").end_ea
6+
addr = idaapi.find_binary(0, segend, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
77
return addr
88

9-
def main():
10-
sig = ida_kernwin.ask_str("", 0, "Insert signature: ")
9+
sig = idaapi.ask_str("", 0, "Insert signature: ")
1110

12-
oldsig = sig
13-
sig = sig.replace(r"\x", " ").replace("2A", "?").replace("2a", "?").strip()
11+
oldsig = sig
12+
sig = sig.replace(r"\x", " ").replace("2A", "?").replace("2a", "?").strip()
1413

14+
def main():
1515
loc = getsigloc(sig)
1616
if loc != idc.BADADDR:
17-
ida_kernwin.jumpto(loc)
18-
19-
if __name__ == "__main__":
20-
main()
17+
idaapi.jumpto(loc)

gamedata_checker.py

+19-16
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
from sys import version_info
77

8-
FUNCS_SEGEND = ida_segment.get_segm_by_name(".text").end_ea
8+
FUNCS_SEGEND = idaapi.get_segm_by_name(".text").end_ea
99

1010
def get_os():
1111
# Lazy af lol
12-
return "linux" if ida_nalt.get_root_filename().endswith(".so") else "windows"
12+
return "linux" if idaapi.get_root_filename().endswith(".so") else "windows"
1313

1414
def checksig(sig):
1515
if sig[0] == '@':
@@ -19,10 +19,10 @@ def checksig(sig):
1919
sig = sig.replace(r"\x", " ").replace("2A", "?").replace("2a", "?").replace("\\", "").strip()
2020
count = 0
2121
addr = 0
22-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
22+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
2323
while addr != idc.BADADDR:
2424
count = count + 1
25-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
25+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
2626

2727
return count == 1
2828

@@ -36,7 +36,7 @@ def get_gamedir(kv):
3636
gamedir = ""
3737
# If we've got multiple games supported, so let's just ask
3838
if len(kv.items()) > 1:
39-
gamedir = ida_kernwin.ask_str("", 0, "There are multiple supported games with this file. Which game directory is this for?")
39+
gamedir = idaapi.ask_str("", 0, "There are multiple supported games with this file. Which game directory is this for?")
4040
# Not in the basic game shit, check for support in default
4141
if gamedir not in kv.keys():
4242
default = kv.get("#default")
@@ -58,7 +58,7 @@ def get_gamedir(kv):
5858
supported = kv.get("#supported")
5959
if supported:
6060
if len(supported.items()) > 1:
61-
gamedir = ida_kernwin.ask_str("", 0, "There are multiple supported games with this file. Which game directory is this for?")
61+
gamedir = idaapi.ask_str("", 0, "There are multiple supported games with this file. Which game directory is this for?")
6262
if gamedir in default["#supported"].values():
6363
return gamedir
6464
return ""
@@ -86,10 +86,10 @@ def read_vtable(funcname, ea):
8686
offset = 0
8787
while ea != idc.BADADDR:
8888
offs = idc.get_wide_dword(ea)
89-
if not ida_bytes.is_code(ida_bytes.get_full_flags(offs)):
89+
if not idaapi.is_code(idaapi.get_full_flags(offs)):
9090
break
9191

92-
name = idc.get_name(offs, ida_name.GN_VISIBLE)
92+
name = idc.get_name(offs, idaapi.GN_VISIBLE)
9393
demangled = idc.demangle_name(name, idc.get_inf_attr(idc.INF_SHORT_DN))
9494
if demangled == None:
9595
demangled = name
@@ -99,7 +99,7 @@ def read_vtable(funcname, ea):
9999
funcs[demangled.lower()] = offset
100100

101101
offset += 1
102-
ea = ida_bytes.next_not_tail(ea)
102+
ea = idaapi.next_not_tail(ea)
103103

104104
# We've got a list of function names, let's do this really shittily because idk any other way
105105

@@ -152,7 +152,7 @@ def try_get_voffset(funcname):
152152

153153
# Let's chug along all of these functions, woohoo for option 2!
154154
for func in idautils.Functions():
155-
name = idc.get_name(func, ida_name.GN_VISIBLE)
155+
name = idc.get_name(func, idaapi.GN_VISIBLE)
156156
if not name or funcname not in name: # funcname should only be a plain function decl, so it would be unfettered in a mangled name
157157
continue
158158

@@ -181,18 +181,22 @@ def try_get_voffset(funcname):
181181

182182
def main():
183183
kv = None
184-
with open(ida_kernwin.ask_file(0, "*.txt", "Select a gamedata file")) as f:
184+
filereq = idaapi.ask_file(0, "*.txt", "Select a gamedata file")
185+
if filereq == None:
186+
return
187+
188+
with open(filereq) as f:
185189
kv = vdf.load(f)
186190

187191
if kv == None:
188-
ida_kernwin.warning("Could not load file!")
192+
idaapi.warning("Could not load file!")
189193
return
190194

191195
kv = list(kv.values())[0]
192196
os = get_os()
193197
gamedir = get_gamedir(kv)
194198
if not gamedir:
195-
ida_kernwin.warning("Could not find game directory in file")
199+
idaapi.warning("Could not find game directory in file")
196200
return
197201

198202
kv = kv[gamedir]
@@ -238,7 +242,6 @@ def main():
238242
# if os == "windows" and kv.get("Offsets"):
239243
# print("Offset checking is not supported on Windows binaries")
240244

241-
ida_kernwin.warning("Check console for output")
245+
idaapi.ask_form("Validated\nCheck console for output")
242246

243-
if __name__ == "__main__":
244-
main()
247+
main()

getfuncoffset.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,4 @@ def main():
1010

1111
print("Offset from %X to %X:\n%d (0x%X)" % (funcstart, addr, addr - funcstart, addr - funcstart))
1212

13-
if __name__ == "__main__":
14-
main()
13+
main()

isgoodsig.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import idc
22
import idaapi
33

4-
FUNCS_SEGEND = ida_segment.get_segm_by_name(".text").end_ea
4+
FUNCS_SEGEND = idaapi.get_segm_by_name(".text").end_ea
55

66
def main():
7-
sig = ida_kernwin.ask_str("", 0, "Insert signature: ")
7+
sig = idaapi.ask_str("", 0, "Insert signature: ")
88

99
# wtfwtfwtfwtf
1010
oldsig = sig
@@ -24,12 +24,11 @@ def main():
2424
def checksig(sig):
2525
count = 0
2626
addr = 0
27-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
27+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
2828
while addr != idc.BADADDR:
2929
count = count + 1
30-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
30+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
3131

3232
return count
3333

34-
if __name__ == "__main__":
35-
main()
34+
main()

makesig.py

+16-23
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,27 @@
22
import idautils
33
import idaapi
44

5-
FUNCS_SEGEND = ida_segment.get_segm_by_name(".text").end_ea
5+
FUNCS_SEGEND = idaapi.get_segm_by_name(".text").end_ea
66

77
def get_dt_size(dtype):
8-
if dtype == ida_ua.dt_byte:
9-
return 1
10-
elif dtype == ida_ua.dt_word:
11-
return 2
12-
elif dtype == ida_ua.dt_dword:
13-
return 4
14-
elif dtype == ida_ua.dt_float:
15-
return 4
16-
elif dtype == ida_ua.dt_double:
17-
return 8
18-
else:
19-
print("Unknown type size (%d)" % dtype)
20-
return -1
8+
return {
9+
idaapi.dt_byte: 1,
10+
idaapi.dt_word: 2,
11+
idaapi.dt_dword: 4,
12+
idaapi.dt_float: 4,
13+
idaapi.dt_double: 8,
14+
}.get(dtype, -1)
2115

2216
def print_wildcards(count):
2317
return "? " * count
2418

2519
def is_good_sig(sig):
2620
count = 0
2721
addr = 0
28-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
22+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
2923
while count < 2 and addr != idc.BADADDR:
3024
count = count + 1
31-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
25+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
3226

3327
return count == 1
3428

@@ -40,7 +34,7 @@ def makesig():
4034
print("Make sure you are in a function!")
4135
return
4236

43-
name = idc.get_name(addr, ida_name.GN_VISIBLE);
37+
name = idc.get_name(addr, idaapi.GN_VISIBLE);
4438
funcend = idc.get_func_attr(addr, idc.FUNCATTR_END);
4539

4640
sig = ""
@@ -49,12 +43,12 @@ def makesig():
4943

5044
addr = funcstart
5145
while addr != idc.BADADDR:
52-
info = ida_ua.insn_t()
53-
if not ida_ua.decode_insn(info, addr):
46+
info = idaapi.insn_t()
47+
if not idaapi.decode_insn(info, addr):
5448
return None
5549

5650
done = 0
57-
if info.Op1.type == ida_ua.o_near or info.Op1.type == ida_ua.o_far:
51+
if info.Op1.type == idaapi.o_near or info.Op1.type == idaapi.o_far:
5852
if (idc.get_wide_byte(addr)) == 0x0F: # Two-byte instruction
5953
sig = sig + ("0F %02X " % idc.get_wide_byte(addr + 1)) + print_wildcards(get_dt_size(info.Op1.dtype))
6054
else:
@@ -66,7 +60,7 @@ def makesig():
6660
size = idc.get_item_size(addr)
6761
while 1: # Screw u python
6862
loc = addr + i
69-
if ((idc.get_fixup_target_type(loc) & 0xF) == ida_fixup.FIXUP_OFF32):
63+
if ((idc.get_fixup_target_type(loc) & 0xF) == idaapi.FIXUP_OFF32):
7064
sig = sig + print_wildcards(4)
7165
i = i + 3
7266
else:
@@ -105,5 +99,4 @@ def makesig():
10599
def main():
106100
makesig()
107101

108-
if __name__ == "__main__":
109-
main()
102+
main()

makesigfromhere.py

+16-23
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,27 @@
22
import idautils
33
import idaapi
44

5-
FUNCS_SEGEND = ida_segment.get_segm_by_name(".text").end_ea
5+
FUNCS_SEGEND = idaapi.get_segm_by_name(".text").end_ea
66

77
def get_dt_size(dtype):
8-
if dtype == ida_ua.dt_byte:
9-
return 1
10-
elif dtype == ida_ua.dt_word:
11-
return 2
12-
elif dtype == ida_ua.dt_dword:
13-
return 4
14-
elif dtype == ida_ua.dt_float:
15-
return 4
16-
elif dtype == ida_ua.dt_double:
17-
return 8
18-
else:
19-
print("Unknown type size (%d)" % dtype)
20-
return -1
8+
return {
9+
idaapi.dt_byte: 1,
10+
idaapi.dt_word: 2,
11+
idaapi.dt_dword: 4,
12+
idaapi.dt_float: 4,
13+
idaapi.dt_double: 8,
14+
}.get(dtype, -1)
2115

2216
def print_wildcards(count):
2317
return "? " * count
2418

2519
def is_good_sig(sig):
2620
count = 0
2721
addr = 0
28-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
22+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
2923
while count < 2 and addr != idc.BADADDR:
3024
count = count + 1
31-
addr = ida_search.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
25+
addr = idaapi.find_binary(addr, FUNCS_SEGEND, sig, 0, idc.SEARCH_DOWN|idc.SEARCH_NEXT)
3226

3327
return count == 1
3428

@@ -40,20 +34,20 @@ def makesig():
4034
return
4135

4236
funcend = idc.get_func_attr(addr, idc.FUNCATTR_END);
43-
name = idc.get_name(funcstart, ida_name.GN_VISIBLE);
37+
name = idc.get_name(funcstart, idaapi.GN_VISIBLE);
4438

4539
sig = ""
4640
found = 0
4741
done = 0
4842
startaddr = addr
4943

5044
while addr != idc.BADADDR:
51-
info = ida_ua.insn_t()
52-
if not ida_ua.decode_insn(info, addr):
45+
info = idaapi.insn_t()
46+
if not idaapi.decode_insn(info, addr):
5347
return None
5448

5549
done = 0
56-
if info.Op1.type == ida_ua.o_near or info.Op1.type == ida_ua.o_far:
50+
if info.Op1.type == idaapi.o_near or info.Op1.type == idaapi.o_far:
5751
if (idc.get_wide_byte(addr)) == 0x0F: # Two-byte instruction
5852
sig = sig + ("0F %02X " % idc.get_wide_byte(addr + 1)) + print_wildcards(get_dt_size(info.Op1.dtype))
5953
else:
@@ -65,7 +59,7 @@ def makesig():
6559
size = idc.get_item_size(addr)
6660
while 1: # Screw u python
6761
loc = addr + i
68-
if ((idc.get_fixup_target_type(loc) & 0xF) == ida_fixup.FIXUP_OFF32):
62+
if ((idc.get_fixup_target_type(loc) & 0xF) == idaapi.FIXUP_OFF32):
6963
sig = sig + print_wildcards(4)
7064
i = i + 3
7165
else:
@@ -104,5 +98,4 @@ def makesig():
10498
def main():
10599
makesig()
106100

107-
if __name__ == "__main__":
108-
main()
101+
main()

nameresetter.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@ def main():
66
segstart = 0
77
segend = None
88

9-
segm = ida_segment.get_segm_by_name(".text")
9+
segm = idaapi.get_segm_by_name(".text")
1010
if segm:
1111
segstart = segm.start_ea
1212
segend = segm.end_ea
1313

1414
for fea in idautils.Functions(segstart, segend):
15-
flags = idc.get_func_attr(fea, FUNCATTR_FLAGS)
16-
if flags & ida_funcs.FUNC_LIB:
15+
flags = idc.get_func_attr(fea, idc.FUNCATTR_FLAGS)
16+
if flags & idaapi.FUNC_LIB:
1717
continue
1818

1919
idc.set_name(fea, "")
2020

21-
if __name__ == "__main__":
22-
main()
21+
main()

0 commit comments

Comments
 (0)