mirror of
https://github.com/dobin/SuperMega
synced 2026-06-02 17:27:10 +00:00
42 lines
1.0 KiB
Python
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 |