본문 바로가기

Wargame/reversing.kr

[reversing.kr] 2번 Easy Keygen

2번 문제를 다운받으면 exe 파일과 txt 파일의 압축파일이 다운받아진다.



txt 파일에는 위와 같이 적혀있다.





exe 실행파일을 실행시키면 Name과 Serial을 입력하는 창이 뜬다.


메모장에 있는 Serial 값일 때의 Name을 찾으면 될 것 같다.




이뮤니티 디버거로 exe 파일을 분석해봐야겠다.


F9를 눌러 한 번 실행시켜  주었다.





[마우스 우클릭] -> [Search for] -> [All referenced text strings]

를 눌러 string을 확인해봤다.





Correct!Wrong이 보인다.


저 부분이 중요할 것 같아 더블클릭하여 이동했다.





Wrong 부분으로 점프하는 구간에 BP를 걸어두었다.


그리고 위에 있는 반복문을 확인해봤다.





ESI에 name을 넣고, EAX에 serial을 넣어 비교한다.





name에 "abcedfg"를 넣어주었는데 ESI에 있는 name 값은 그게 아니다.


윗부분에서 name 값을 변환시켜 시리얼 값을 만드는 것 같다.





반복문이 있다. 반복문 윗부분에는 문자열의 길이를 알아내는 코드도 있다.


반복문 처음에 BP를 걸고, 다시 실행하여 한 줄 한 줄 실행시켜 보니 ECX에 16진수 10을, EDX에 name 맨 앞자리인 "a"를 넣어주었다. 그리고 그 둘을 xor 시켜준다.


두 번째에는 16진수 20과 "b"를 xor 시켜준다. 세 번째는 16진수 30과 xor 연산을 한다.


그 다음에는 ESI를 0으로 바꿔주고, 다시 16진수 10과 xor 연산을 한다.


이를 토대로 python 코드를 짰다.



1
2
3
4
5
6
7
8
9
10
11
12
str = "5B134977135E7D13"
count = 1
name = ""
 
for i in range(0len(str), 2) :
    name += chr(int(str[i:i+2],16) ^ 16*count)
    if count == 3 :
        count = 0
    count += 1
print(name)
 

cs



실행하면 "K3yg3nm3" 이 나온다.

'Wargame > reversing.kr' 카테고리의 다른 글

[Reversing.kr] 1번 Easy Crack  (0) 2019.02.07