blacksalamander
Easy_Keygen 본문
먼저 프로그램을 실행시켜본다.
아무 값이나 넣었을 때 틀렸다는 것을 볼 수 있다.
ReadMe.txt 을 읽어보면 Serial 이 5B134977135E7D13 일 때 Name 값을 찾으라고 쓰여있다.
이제 Name 값을 찾아보자.
OllyDbg 프로그램을 실행시킨 후 EasyKeygen 파일을 연다.
문자열에서 우리가 접근할 수 있는 데이터를 확인해본다.
Text string 을 보면 아까 오답을 넣었을 때 출력된 문자열(Wrong)이 보인다.
더블클릭하여 들어가 보자.
이 부분을 포함하는 함수의 첫 부분으로 가본다.
이제 프로그램의 흐름을 파악해보자.
계속 실행하다 보면 프로그램 창에서 Input Name 을 입력받는다.
Name 에 abcdefghij 을 입력했다.
값이 0x0019FE18 주소에 저장되었다.
MOVSX ECX, BYTE PTR SS:[ESP+ESI+C] 는 0x0019FE08 + 0x0 + 0xC = 0x0019FE14 의 바이트 값을 ECX 에 넣으라는 뜻으로
0x0019FE14 에는 10 값이 있으므로 ECX 에 0x00000010 값이 들어간다.
MOVSX EDX, BYTE PTR SS:[ESP+EBP+10] 는 0x0019FE08 + 0x0 + 0x10 = 0x0019FE18 의 바이트 값을 EDX 에 넣으라는 뜻으로
0x0019FE18 에는 a(ASCII : 0x61) 값이 있으므로 EDX 에 0x00000061 값이 들어간다.
XOR ECX, EDX 은 0x00000010 ^ 0x00000061 = 0x00000071 값을 ECX 에 넣는다.
0x0019FE7C 에 71 값이 들어간다.
계속 실행을 하다 보면 이 구간이 반복된다.
반복문의 두 번째를 실행해본다.
MOVSX ECX, BYTE PTR SS:[ESP+ESI+C] 는 0x0019FE08 + 0x1 + 0xC = 0x0019FE15 의 바이트 값을 ECX 에 넣으라는 뜻으로
0x0019FE15 에는 20 값이 있으므로 ECX 에 0x00000020 값이 들어간다.
MOVSX EDX, BYTE PTR SS:[ESP+EBP+10] 는 0x0019FE08 + 0x1 + 0x10 = 0x0019FE19 의 바이트 값을 EDX 에 넣으라는 뜻으로
0x0019FE19 에는 b(ASCII : 0x62) 값이 있으므로 EDX 에 0x00000062 값이 들어간다.
XOR ECX, EDX 은 0x00000020 ^ 0x00000062 = 0x00000042 값을 ECX 에 넣는다.
0x19FE7E 에 42 값이 들어갔다.
반복문의 세 번째를 실행해본다.
MOVSX ECX, BYTE PTR SS:[ESP+ESI+C] 는 0x0019FE08 + 0x2 + 0xC = 0x0019FE16 의 바이트 값을 ECX 에 넣으라는 뜻으로
0x0019FE16 에는 30 값이 있으므로 ECX 에 0x00000030 값이 들어간다.
MOVSX EDX, BYTE PTR SS:[ESP+EBP+10] 는 0x0019FE08 + 0x2 + 0x10 = 0x0019FE1A 의 바이트 값을 EDX 에 넣으라는 뜻으로
0x0019FE1A 에는 c(ASCII : 0x63) 값이 있으므로 EDX 에 0x00000063 값이 들어간다.
XOR ECX, EDX 은 0x00000030 ^ 0x00000063 = 0x00000053 값을 ECX 에 넣는다.
0x19FE80 에 53 값이 들어갔다.
계속 실행하면 ESI 은 0, 1, 2 값을 반복하고 EBP 은 계속 증가하는 것을 알 수 있다.
CMP EBP, ECX 에서 0xA, 0xA 서로 값이 같으므로 반복문을 빠져나온다.
Name(abcdefghij) 의 Serial(7142537445567748597A) 값을 알아냈다.
프로그램을 다 실행한 결과 Correct 을 출력했다.
정리하면,
a / b / c / d / e / f / g / h / i / j = 0x61 / 0x62 / 0x63 / 0x64 / 0x65 / 0x66 / 0x67 / 0x68 / 0x69 / 0x6A
0x61 / 0x62 / 0x63 / 0x64 / 0x65 / 0x66 / 0x67 / 0x68 / 0x69 / 0x6A
^ 0x10 / 0x20 / 0x30 / 0x10 / 0x20 / 0x30 / 0x10 / 0x20 / 0x30 / 0x10
----------------------------------------------------------------------------------------
0x71 / 0x42 / 0x53 / 0x74 / 0x45 / 0x56 / 0x77 / 0x48 / 0x59 / 0x7A
이란 것을 알 수 있다.
즉, Serial 값 5B134977135E7D13 은
0x5B / 0x13 / 0x49 / 0x77 / 0x13 / 0x5E / 0x7D / 0x13
^ 0x10 / 0x20 / 0x30 / 0x10 / 0x20 / 0x30 / 0x10 / 0x20
-----------------------------------------------------------------------
0x4B/ 0x33 / 0x79 / 0x67 / 0x33 / 0x6E / 0x6D / 0x33 (= K / 3 / y / g / 3 / n / m / 3)
K3yg3nm3 인 것을 알 수 있다.
값 : K3yg3nm3
'Reversing.kr' 카테고리의 다른 글
Easy_CrackMe (0) | 2019.01.26 |
---|