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)



실행한 결과이다.