문제
이 프로그램의 등록키는 무엇인가.
05.exe를 ollydbg에 돌리면 위와 같은 메시지 창이 뜬다.
F9를 통해 실행시키면 아래와 같은 프로그램이 뜨게 된다.
여기서 뭘 더 해야할 지 모르겠어서 PEView로 열어보았다.
PEView로 열어보니 UPX0과 UPX1이라고 되어 있는 부분이 있었고, 이를 보고 UPX로 패킹되어 있음을 의심해 보았다.
PEiD로 돌려보니 UPX로 패킹되어 있는 것을 볼 수 있었고, 따라서 05.exe를 언패킹 해보았다.
언패킹을 수행한 후 PEView로 열어보았다.
PEView로 연 후 05.exe의 SECTION CODE 부분에서
cracked successfully Congrats! 라는 메시지를 찾았고, 그 위에 시리얼 키가 있었다.
이를 입력하니 문제가 풀렸다.
근데 이렇게 푸는 문제가 맞는 걸가. . . ? 다른 분들은 어떻게 풀었는지 찾아봐야겠다. . .
Ollydbg 써서 다시 풀어보았다.
Ollydbg에서 오른쪽 마우스 - Search for - All references text strings 를 누르면 사용된 문자열들을 볼 수 있다.
CrackMe cracked successfully라는 메시지 위에 Registered User라는 문자열과 키로 보이는 값이 있다.
처음에 키로 보이는 곳에만 breakpoint를 걸고 시작해보았는데, 해당 주소의 명령어가 실행되지 않았다.
그 이유는 아래와 같다.
그림을 보면 Registered User에 해당하는 명령어와 그 다음 주소의 명령어,
그리고 키 값에 해당하는 명령어와 그 다음 주소의 명령어가 똑같았다.
아래가 키 값이라고 생각해봤을 때 CALL로 호출하는 함수가 CMP라고 유추해볼 수 있다.
직접 타고 들어가보자.
00401014에는 Registered User값이 들어있고, 00440F2F에서 이 문자열을 EDX로 복사한다.
이때 EAX에는 내가 입력한 값이 들어간다.
다음 주소에서는 00403B2C를 호출한다.
00403B2C에서 수행되는 명령어의 구조는 아래와 같다.
함수 수행이 다 된 후에 값이 같으면 Z에 1이 설정되어서 JNZ를 타고 실패 구문으로 넘어가지 않게 된다.
만약 동일하지 않은 값을 넣으면 Z가 0으로 설정되고 JNZ를 타고 실패 구문으로 넘어가게 된다.
이런 식으로 프로그램은 Registered User와 키 값에 대한 비교를 각각 수행하고 맞으면 성공 문장을 출력하게 된다.
'Wargame > CodeEngn' 카테고리의 다른 글
CodeEngn Basic RCE L07 (0) | 2021.05.10 |
---|---|
CodeEngn Basic RCE L06 (0) | 2021.05.09 |
CodeEngn Basic RCE L04 (0) | 2021.05.02 |
CodeEngn Basic RCE L03 (0) | 2021.05.02 |
CodeEngn Basic RCE L02 (0) | 2021.05.02 |