Autorev
- nc로 접속하면 라운드마다 바이너리를 하니씩 날려 줌.
-
문제 제목 그대로 자동화 리버싱 툴을 만들어 풀어야 함.
- 그래프 뷰가 매우 기괴하게 생겼음.

- 아래 코드를 바탕으로 정형화된 형식을 찾음.

from pwn import *
def make_binary():
f = open("aa","w")
print s.recvuntil("...\n")
data = s.recvuntil("Answer ->", drop=True)
f.write(data)
return s
def make_objdump():
os.system("objdump -M intel -D aa | grep -2i cmp > a.txt")
def remove_file():
os.system("rm aa")
os.system("rm a.txt")
def read_file():
f = open("a.txt","r")
value_list = []
key_list = []
for line in f:
if "movzx" in line:
line_ = line.replace(" ","")
line_ = line_.split(",")
line_ = line_[-1].replace("\n","")
line_ = line_.replace("BYTEPTR[rbp-","").replace("]","").replace("0x","")
line_ = int(line_ , 16)
key_list.append(line_)
elif "al," in line:
try:
line = line.replace(" ","")
line = line.split(",")
line = line[-1].replace("\n","").replace("0x","")
line = int(line , 16)
value_list.append(line)
except:
continue
if len(value_list) > 300:
del value_list[0]
dic = {}
for i in range(len(key_list)):
dic.update({key_list[i]:chr(value_list[i])}) #add dic item
print dic
st = ""
for j in dic.values():
st += j
st = ''.join(reversed(st)) # string reverse
return st
def send_key(fd,key):
print key
fd.sendline(key)
print fd.recv(1024)
if __name__ == '__main__':
s = remote("wargame.kimtae.xyz",10013)
p = log.progress('start...')
i = 0
while True:
try:
p.status(str(i+1))
fd = make_binary()
make_objdump()
key = read_file()
send_key(fd,key)
remove_file()
i+=1
except:
break
s.interactive()

- 라운드를 모두 거치면 플래그를 받을 수 있음.