Wargame/CodeEngn

CodeEngn Basic RCE L05

esyeonge 2021. 5. 2. 03:05
문제
이 프로그램의 등록키는 무엇인가.

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