사용 툴 : ollydbg
문제를 풀기 위해 다운받은 exe 파일을 열어보면 다음과 같은 화면이 나온다.
Name과 Serial을 입력하고 Check 버튼을 누르면 Wrong이라는 창이 뜬다.
아무래도 프로그램 내에서 Name이나 Serial 문자열을 정답 문자열..?과 비교하는 연산이 있는 것 같다...
그렇다면 일단 문자열 참조 검색을 통해 Main 함수나 EntryPoint를 찾고, 비교 연산이 이루어지는 부분을 중점으로 보면 되지 않을까...?
ollydbg에서 파일을 열고 문자열 참조 검색을 하면 "Error", "Please enter at least 4 chars as name!", "Congratulations", "Yep, this key is right!", "Wrong serial!" 등 우리가 알아볼 수 있는 문자열들이 나온다. 근데 "Please enter at least 4 chars as name!"이라는 문자열까지는 입력받은 문자열 자체가 유효한 문자열인지 검색하는 것 같고... 그냥 "Congratulations" 문자열 주변에서 분기문을 찾으면 될 것 같다.
3번째 줄에 보면 함수호출을 하는 CALL 명령어가 나온다. 아무래도 이 vbaVarTstEq라는 함수에서 비교 연산이 이루어지는 것 같다...
그리고 CALL 명령어의 윗부분을 보면 스택에 어떠한 값들을 두번 PUSH하는 모습을 볼 수 있다.
PUSH EDX
PUSH EAX
비교 연산을 하는 함수라면 EDX와 EAX 값이 중요할 것 같아서 403329 주소에 중단점을 걸고 프로그램을 실행시켜보았다.
중단점까지 프로그램을 실행시키고 먼저 EDX 레지스터에 들어가있는 주소를 검색해보니 덤프창에 문자열 두개가 떴다. 하나는 "D2C5D1C9", 하나는 "12345" 이었다.
생각해보니 "12345"는 아까 내가 시리얼 코드로 입력했던 문자열이었다.
'그렇다면 "D2C5D1C9" 문자열이 무얼 의미할까?' 생각해보다가 일단 아까 실행시켰던 프로그램의 시리얼 코드 입력란에 이 문자열을 대입시켜 보았다.
어떨결에 풀렸다...ㅎ
아무래도 내가 입력한 Name 문자열 값에 따라 시리얼 코드를 생성해주는 로직이 있는 것 같다.
'Security > Reverse Engineering' 카테고리의 다른 글
rev-basic-3 풀이 (0) | 2025.02.05 |
---|---|
리버싱 기초 문제 풀이 (0) | 2025.02.04 |
rev-basic-2 풀이 (0) | 2025.01.22 |
rev-basic-1 풀이 (0) | 2025.01.22 |
리버싱 기초 (0) | 2025.01.14 |