wargame/reversing.kr
Easy_KeygenMe
Sanguine
2014. 6. 10. 17:40
키젠 문제이다.
키젠 문제는 네임과 시리얼의 관계를 알아내는것이 목적이다.
문제파일에 Readme.txt 를 읽어보면
시리얼이 주어지고, 해당하는 이름을 맞추란다.
네임이 주어지고 시리얼을 맞추는것이면 해당하는 네임을 넣고 트레이싱하면 쉽게 구할수있다.하지만 이건 역으로 구하는 것이기 때문에 키 생성 알고리즘을 찬찬히 봐야한다.
일단 ida로 보면
해당하는 문자열을 받고 그 문자열을 한글자씩 가져와서,
차례대로 0x10,0x20,0x30이랑 xor시켜서 키를 생성한다.
그 헥스값 그대로 sprintf해서 메모리에 쓴다음,
사용자가 입력한 키값과 일치하는지 비교한다.
그래서 역으로 다시 한글자씩 가져와 xor시키는 코드를 짜보았다.
import string
prob="5B134977135E7D13"
def s2h(prob):
i=0
for x in range(0,len(prob),2):
trans=prob[x:x+2]
if i==0:
af=int(trans,16)^0x10
i=i+1
elif i==1:
af=int(trans,16)^0x20
i=i+1
else :
af=int(trans,16)^0x30
i=0
print chr(af),
s2h(prob)
실행한 결과이다.