본문 바로가기

WARGAME/Pwnable.kr

pwnablekr codemap

과제를 하면서 푼거를 추가해야지 흠

우선 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' 카테고리의 다른 글

pwnablekr codemap  (0) 2017.07.06
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