반응형

abex crack me #2 문제 풀이

 

abexcm2.exe
0.02MB

 

 

 

 

우선 abexcm2.exe 파일의 구조를 한번 살펴 보겠습니다. 

compiler는 Microsoft Visual Basic이고, linker는 Microsoft Linker를 이용한 프로그램입니다. 

시작 주소는 0x00401238 임을 확인할 수 있습니다.

abexcm2.exe 파일을 ollydbg로 로드하여 리버싱을 해보겠습니다. 

0x00401238 주소부터 명령어가 수행됩니다. 

0040123D 주소를 수행시켜 보면 아래와 같이 팝업이 생성되고, Name, Serial 쓰는 부분이 있습니다. 

Name과 Serial에 각각 abcd, efgh를 입력하고, check 버튼을 눌러 보겠습니다.

그러면 아래와 같이 serial이 잘못 되었다고 메시지 박스가 출력됩니다. 

이 문제는 serial을 맞추는 문제인 듯 합니다. 

 

우선 "Wrong serial!" 문구를 찾아 팝업을 출력시키는 구문을 찾고, 그 구문 위쪽에 분기되는 명령어를 찾아보겠습니다.

 

"Wrong serial!" 문구를 찾기위해 Search For > All referenced text strings를 이용합니다. 

찾은 부분을 더블 클릭하면, 그 주소로 이동됩니다. 

찾은 00403458 주소의 아래 부분을 보면 MSVBVM60.rtcMsgBox를 Call하는데, 

이 부분이 "Wrong serial!" 메시지 박스를 출력하는 부분으로 추정할 수 있습니다. 

이제 이 메시지 박스 출력하게끔 하는 분기하는 명령어를 가진 코드를 찾기 위해 위쪽으로 올라가며 코드를 찾아 보겠습니다.

00403332 주소에 JE 명령어가 있는데, 이 명령어를 기준으로 코드가 분기되는 것을 볼 수 있습니다. 

00403329 주소에 __vbaVarTstEq함수가 문자열을 비교하는 구문으로 볼 수 있고, 이 비교하는 결과값에 따라 코드가 분기되는 것으로 추정할 수 있습니다 

__vbaVarTstEq 함수에 전달인자로는 바로 위쪽에 EDX, EAX 값을 사용하는 것으로 보입니다. 

EDX 값은 [EBP-44] 주소의 값을 넣고, EAX는 [EBP-34] 주소의 값을 넣는 것을 볼 수 있습니다. 

그럼 00403329 주소에 breakpoint를 걸고(F2), 이 EDX, EAX 값을 확인해 보도록 하겠습니다.

 

breakpoint를 걸었다면, ctrl + F2 키로 프로그램을 재시작하고, F9를 눌러 breakpoint까지 오도록 하겠습니다.

 

EAX 값과 EDX값을 확인할 수 있고, EAX와 EDX에 있는 0012F424 주소와 0012F434 주소를 확인해보겠습니다.

0012F424 주소와 0012F434 주소 값을 보면 0012F42C 주소의 값과 0012F43C 주소의 값이 다른 것을 볼 수 있습니다.

스택에서 0012F42C, 0012F43C 주소의 값을 보면 UNICODE로 "C5C6C7C8"과 메시지 박스에서 입력하였던 "efgh"가 있는 것을 볼 수 있습니다.

그러면 이 두 값을 비교하여 분기되는 것을 알 수 있는데, 메시지 박스에 "C5C6C7C8"를 입력해 보도록 하겠습니다.

아래와 같이 입력하고 Check 버튼을 누르면 성공적으로 Congratulations! 팝업이 출력되는 것을 확인할 수 있습니다.

반응형

'WarGame > crack me' 카테고리의 다른 글

simples crack me #6 문제 풀이  (0) 2020.08.26
abex crack me #5 문제 풀이  (0) 2020.08.26
abex crack me #4 문제 풀이  (0) 2020.08.25
abex crack me #3 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17
반응형

abex crack me #1 문제 풀이

 

abexcm1.exe
0.01MB

 

 

abexcm1.exe를 실행시켜 보면, 아래와 같이 Messagebox가 출력됩니다. 

Messagebox에 있는 내용을 보면 HD를 CD-Rom으로 생각하게 만들어 보라는 내용입니다. 

 

 

확인을 누르면 Error Messagebox가 출력되고, CD-ROM drive가 아니라고 출력됩니다. 

그리고 확인을 누르면 프로그램이 종료됩니다. 

 

ollydbg로 보면 아주 짧은 어셈블리 코드를 확인할 수 있습니다. 

이 문제는 "OK. I really think that your HD is a CD-ROM! :p"를 출력하도록 하는 문제인 듯 합니다. 

그럼 분석해 보겠습니다. 

 

0040100E 주소의 MessageBoxA 함수를 실행하면, 메시지 팝업이 출력됩니다. 

확인을 누르면 다음 구문이 실행됩니다.

00401018 주소의 GetDriveTypeA 함수를 실행시키면, EAX 값이 변경됩니다. EAX 값에 GetDriveTypeA 함수의 Return value 값이 저장되는 듯 합니다. 

 

msdn에서 GetDriveTypeA 함수를 찾아보면 Return value 0x3이 DRIVE_FIXED이고, 0x5가 DRIVE_CDROM(우리가 찾는 설정)입니다. 

그 아래 구문을 수행해보면, ESI를 증가, EAX 감소, ESI를 2번 증가, EAX를 감소시킨 후, 

EAX값과 ESI 값을 비교하여, 같으면 0040103D로 점프하고, 아니면 바로 아래 구문이 수행됩니다. 

지금 상태에서는 EAX 값이 0x1이고, ESI 값이 0x2라 비교하면 다른 값이기 때문에 바로 아래 구문이 수행될 것입니다.

 

0040103D 주소로 점프하기 위한 방법은 여러 방법이 있겠지만 JE 명령어를 바꾸어 해결해 보겠습니다.  

JE 명령어를 JNZ으로 변경하고 실행시키면, 0040103D 주소로 점프하는 것을 볼 수 있습니다.

 

그러면 아래와 같이 성공 메시지 박스를 출력하게 됩니다.

반응형

'WarGame > crack me' 카테고리의 다른 글

simples crack me #6 문제 풀이  (0) 2020.08.26
abex crack me #5 문제 풀이  (0) 2020.08.26
abex crack me #4 문제 풀이  (0) 2020.08.25
abex crack me #3 문제 풀이  (0) 2020.08.25
abex crack me #2 문제 풀이  (0) 2020.08.25

+ Recent posts