78 lines
1.9 KiB
Python
Executable File
78 lines
1.9 KiB
Python
Executable File
#!/home/kali/htb/challenges/reversing/Spooky License/angr/bin/python3
|
|
|
|
from __future__ import print_function
|
|
from builtins import range
|
|
import os
|
|
import sys
|
|
|
|
import nampa
|
|
|
|
|
|
def eprint(*args, **kwargs):
|
|
print(*args, file=sys.stderr, **kwargs)
|
|
|
|
|
|
def iprint(indent, *args, **kwargs):
|
|
kwargs['sep'] = ''
|
|
print(" " * indent, *args, **kwargs)
|
|
|
|
|
|
def format_functions(ff):
|
|
out = []
|
|
for f in ff:
|
|
out.append('{}{:04X}:{}'.format('(l)' if f.is_local else '', f.offset, f.name))
|
|
return ' '.join(out)
|
|
|
|
|
|
def format_tail_bytes(bb):
|
|
out = []
|
|
for b in bb:
|
|
out.append('({:04X}: {:02X})'.format(b.offset, b.value))
|
|
return ' '.join(out)
|
|
|
|
|
|
def format_refs(rr):
|
|
out = []
|
|
for r in rr:
|
|
out.append('(REF {:04X}: {})'.format(r.offset, r.name))
|
|
return 'XXX'.join(out)
|
|
|
|
|
|
def print_modules(node, level):
|
|
for i, m in enumerate(node.modules):
|
|
fmt = '{}. {:02X} {:04X} '
|
|
if m.length < 0x10000:
|
|
fmt += '{:04X} '
|
|
else:
|
|
fmt += '{:08X} '
|
|
iprint(
|
|
level,
|
|
fmt.format(i, m.crc_length, m.crc16, m.length),
|
|
format_functions(m.public_functions),
|
|
' ' + format_tail_bytes(m.tail_bytes) if len(m.tail_bytes) > 0 else '',
|
|
' ' + format_refs(m.referenced_functions) if len(m.referenced_functions) > 0 else ''
|
|
)
|
|
|
|
|
|
def recurse(node, level):
|
|
iprint(level, nampa.pattern2string(node.pattern, node.variant_mask), ':')
|
|
if node.is_leaf:
|
|
print_modules(node, level + 1)
|
|
else:
|
|
for child in node.children:
|
|
recurse(child, level + 1)
|
|
|
|
|
|
def main(fpath):
|
|
sig = nampa.parse_flirt_file(open(fpath, 'rb'))
|
|
for child in sig.root.children:
|
|
recurse(child, level=0)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) != 2:
|
|
print("Usage: {} input_file.sig".format(sys.argv[0]))
|
|
exit()
|
|
|
|
main(sys.argv[1])
|