abex crack me #2 문제 풀이
우선 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 |