본문 바로가기

Reversing/reversing.kr

reversing.kr 2번 Easy keygen 워게임 문제해결

반응형

문제를 풀기 전 reversing.kr 1번 문제를 먼저 풀고 2번으로 넘어오는 것을 추천한다.

2022.07.30 - [Reversing] - reversing.kr 1번 Easy Crack 문제풀이

reversing.kr 2번 Easy keygen 개요

문제를 풀기에 앞서 간단한 PE분석을 진행하도록 하겠다.

PE분석

분석 내용을 보면 엔트리 포인트와 파일 오프셋을 확인할 수 있고, C++로 개발된 것을 알 수 있다.

 

Easy keygen 1

Easy Keygen.exe를 실행하면,  input name과 input Serial을 받는다. 그리고 ReadMe.txt 파일을 보면 이번 문제의 목표가 있다. 해석해보면 시리얼 번호가 '5B134977135E7D13'인 이름을 찾아야 한다. 각설하고 이제 시작해보도록 하자.

 

reversing.kr 2번 Easy keygen 문제풀이

F8을 눌러가면서 프로그램을 진행하면서 문제풀이를 해보도록 하겠다.

 

 

Easy keygen 2

4011EA에서 프로그램이 시작된다. 천천히 F8을 누르면서 input name이 나올 때까지 진행해보자.

 

 

Easy keygen 3

프로그램을 읽으면서 진행하다 보면, 401299 번지에서 CALL과 함께 input name이 출력되는 것을 알 수 있다. 더 자세히 알기 위해 재시작하고 F7으로 함수를 확인해보자.

 

 

Easy keygen 4
Easy keygen 5

보면 아스키코드로 Input Name: 이 출력되는 부분과 Easy Keygen5 사진처럼 %s로 문자열을 입력받는 함수가 호출되는 것을 알 수 있다. F8을 한번 더 눌러서 Input Name에 간단하게 abcd를 입력해보자.

 

 

Easy keygen 6

우리가 콘솔 창에서 입력한 abcd가 EDI에 저장되는 모습이다. 이후 EAX, EBP, ESI를 초기화하고,

40106에서 REPNE SCAS를 통해 문자열의 길이를 구하고 있다. 

 

 

Easy keygen 7

실제로 abcd를 입력하였으니, 문자열 길이 4가 ECX에 저장되는 것을 확인하였다.

 

 

Easy keygen 8

이제 우리가 입력한 문자열을 하나씩 순서에 따라 XOR 연산을 진행한다. 문자 'a'의 아스키코드는 0x61이다.

따라서 EDX는 61이고, ECX는 10, 20, 30, 10, 20, 30 해당 문자 위치에 따라 값이 변하는 것을 확인할 수 있다.

문자열('abcd') XOR 결과값
a: 0x61 XOR 0x10  == 0x71
b: 0x62 XOR 0x20  == 0x42
c: 0x63 XOR 0x30  == 0x53
d: 0x64 XOR 0x10  == 0x74

우리가 입력한 문자열을 전부 XOR 하고 나면 반복문을 탈출하게 된다. XOR한 것이 해당 사용자의 Serial number가 된다.

 

 

Easy keygen 9

다시 프로그램을 진행해서 우리가 도출한 Serial number 값인 '71425324'를 input Serial에 입력해주면, EAX에 우리가 입력한 값이 저장된다. 

 

 

Easy keygen 10

이후 방금 입력한 EAX와 기준 값 ESI를 비교하여 참이면 'Correct!'가 출력된다.

 

 

Easy keygen 답

이러한 원리로 5B134977135E7D13을 구하면 문제가 해결된다.

답 :K3yg3nm3

 

코딩을 해서 구하는 경우, 아래 URL을 참고하여 코딩해보자.

https://github.com/leeggoggal/Python/blob/master/reversing.kr_easy_keygenme_reverse_xor.py

728x90