과제를 하면서 푼거를 추가해야지 흠
우선 EAX와 EBX를 보란다.
보면 EAX에는 사이즈가 들어가고 EBX에는 이상한 문자열이 들어있다.
이렇게 생성하는데 다른 방법보다도 그냥 pydbg로 죄다 파싱했다.
저 1000개의 값중 2번째로 사이즈가 큰거에 스트링을 묻는다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | from operator import itemgetter from pydbg.defines import * from pydbg import * import pefile result = {} def entry_point(dbg): disasm = dbg.disasm(dbg.exception_address) if disasm.startswith("jna"): disasm = dbg.disasm(dbg.exception_address) eax = dbg.context.Eax ebx = dbg.context.Ebx val = dbg.get_ascii_string(dbg.read_process_memory(ebx, 20)) if len(result) == 893: dbg.terminate_process() else: result.update({int(eax): str(val)}) dbg.single_step(True) return DBG_CONTINUE def single_step(dbg): dbg.bp_set(ep-1216, handler=entry_point, restore=False) return DBG_CONTINUE target = "codemap.exe" pe = pefile.PE(target) ep = pe.OPTIONAL_HEADER.AddressOfEntryPoint + pe.OPTIONAL_HEADER.ImageBase dbg = pydbg() dbg.set_callback(EXCEPTION_SINGLE_STEP, single_step) dbg.load(target) dbg.bp_set(ep-1216, handler=entry_point, restore=False) dbg.run() flag = (sorted(result.iteritems(), key=itemgetter(0), reverse=True)) while 1: num = input("num: ") print flag[num-1][0] print flag[num-1][1] | cs |
2번만 입력하면 되니깐 그냥 직접 입력함
'WARGAME > Pwnable.kr' 카테고리의 다른 글
pwnable.kr fix (0) | 2017.01.12 |
---|---|
pwnable.kr dragon (0) | 2017.01.11 |
pwnable.kr coin1 (0) | 2017.01.09 |
pwnable.kr simple login (0) | 2017.01.06 |
pwnable.kr passcode (0) | 2016.03.29 |