# cat blog >> /dev/brain 2> /proc/mind
cat blog >> /dev/brain 2> /proc/mind
# cat sakura.py import IPython import angr import json import logging import r2pipe #angr.manager.l.setLevel(logging.DEBUG) fn = './sakura-fdb3c896d8a3029f40a38150b2e30a79' base = 0x400000 toFind = base + 0x110ca toAvoid = [] r2 = r2pipe.open(filename = fn) # mov byte [rbp - 0x1e49], 0 == \xc6\x85\xb7\xe1\xff\xff\x00 r2output = json.loads(r2.cmd('/j \\xc6\\x85\\xb7\\xe1\\xff\\xff\\x00')) for e in r2output: toAvoid.append(base + int(e['offset'])) #userInputBuffer = base + 0x2121e0 #afterUserInput = base + 0x110ba #state = p.factory.blank_state(addr = afterUserInput) #state.memory.store(userInputBuffer, state.se.BVS('userinput', 400 * 8)) #for i in range(400): # state.mem[userinput + i].char = state.se.BVS('x' + str(i), 8) p = angr.Project(fn) print p.arch print p.entry print p.filename p.factory.block(toFind).pp() print state = p.factory.entry_state() sm = p.factory.simgr(state) sm.explore(find = toFind, avoid = toAvoid) found = sm.found[0] dump = found.posix.dumps(0) print repr(dump) IPython.embed() # python sakura.py <Arch AMD64 (LE)> 4196128 sakura-fdb3c896d8a3029f40a38150b2e30a79 0x4110ca: lea rdi, qword ptr [rip + 0x2f9] 0x4110d1: mov eax, 0 0x4110d6: call 0x4006e0 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0092\x00\x00\x00\x0041\x00\x00\x00\x0091\x0017\x00378192\x00\x00638\x004683\x0029618\x00\x0081\x0071\x009837\x00\x00\x00\x0089\x0092\x00\x00\x00\x00936\x00915\x00\x00\x00\x00\x0081\x0012\x00\x00\x008216\x002843\x00\x00\x00\x0031\x0012\x00\x00\x00\x00498\x00931\x0037\x00\x0029341\x00\x00\x003792\x0062\x00192837\x0012\x007128\x00172\x00\x00\x00\x0019\x00\x00\x00\x00\x00\x0092\x00\x00\x00\x0091\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0014\x0065\x00\x00\x00271\x0049\x00\x00\x00\x0041835792\x00\x0089641275\x00125\x0013\x0073\x0091\x00\x0053\x0037\x0076\x0072\x0086\x00\x0086\x00\x00\x0026\x00\x00\x00\x00948\x00512\x00\x00\x0053\x00\x00\x0036\x00\x00\x0057\x0018\x0086\x00\x00\x0052\x00\x00\x0051\x0048\x0049\x00538\x0085\x0069\x00\x0085\x0017863294\x00\x0073615284\x00\x00\x0031\x0074\x00\x00\x00\x00\x00\x0035\x00123\x00' In [1]: sakura = Popen([fn], stdin = PIPE, stdout = PIPE) In [2]: flag = sakura.communicate(input = dump)[0] In [3]: print flag Out [3]: hitcon{6c0d62189adfd27a12289890d5b89c0dc8098bc976ecc3f6d61ec0429cccae61}
cat sakura.py
python sakura.py
sakura = Popen([fn], stdin = PIPE, stdout = PIPE)
flag = sakura.communicate(input = dump)[0]
print flag