Files
SuperMega/pe/r2helper.py
T
2024-05-09 21:04:37 +01:00

42 lines
1.0 KiB
Python

import r2pipe
import os
from model.defs import *
from utils import hexdump
def r2_disas(data: bytes):
filename = "r2_data.bin"
ret = {
'text': None,
'color': None,
'hexdump': None,
}
ret["hexdump"] = hexdump(data)
# r2 cant really handle shellcode when not in files...
with open(filename, "wb") as f:
f.write(data)
code_len = len(data)
if code_len > 0x2000:
ret['text'] = "Code too long for r2: {}".format(code_len)
ret['color'] = "Code too long for r2: {}".format(code_len)
return ret
r2 = r2pipe.open(filename, flags=['-2'])
r2.cmd('aaa')
r2.cmd('e scr.color=0')
r2.cmd('e asm.bytes=true')
ret['text'] = r2.cmd('pD {}'.format(code_len))
ret['text'] = '\n'.join(ret['text'].splitlines()) # fix newlines
r2.cmd('e scr.color=2')
ret['color'] = r2.cmd('pD {}'.format(code_len))
ret['color'] = '\n'.join(ret['color'].splitlines()) # fix newlines
r2.quit()
os.remove(filename)
return ret