Wargame/CodeEngn

CodeEngn Basic RCE L17

esyeonge 2021. 5. 19. 20:29
문제
Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가
힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)

언제나 그랬듯 . . ~ 성공 구문을 찾아보자!

 

Good Boy 부분이 성공 구문인 것 같다.

해당 위치로 이동해보자.

 

성공 구문 위에 CALL과 JNZ가 있는 것을 알 수 있다.

CALL을 통해서 부르는 함수가 CMP임을 추측해볼 수 있고, 그 결과에 따라 Good Boy가 출력되거나 아니면 sleep이 된다.

CALL 명령어에 BP를 걸어두고 실행해보자.

 

Name 값은 1, Key 값은 문제에 기재된 값을 넣었다.

그랬더니 Pleas Enter More Chars라는 문자열이 뜬다.

 

'Pleas Enter More Chars...' 라는 메시지가 뜨는 부분을 찾아서 가보면, 글자수를 3보다 크게 입력해야 실행이 가능하도록 되어 있다. 

그래서 일단 아무 값이나 넣어서 실행을 시켰다.

 

CMP 문 안으로 들어가보니, 내가 입력한 키 값은 EAX에 비교 대상이 되는 키 값은 EDX에 들어가는 것을 알 수 있다.

그럼 지금 BP를 잡아둔 주소에서는 키 값 설정을 하지 않는 것을 알 수 있다.

 

 그래서 그 위에 있는 CALL 명령어에 다 BP를 걸어두고 어디서 키 값이 설정되는지 알아보자.

 

0045BB95에서 MOV를 통해서 입력했던 Name 값이 EAX로 들어가는 것을 볼 수 있다.

함수로 들어가서 살펴보자.

 

함수 설명에 앞서서, 입력값이 12333333일 때의 키 값은 다음과 같다.

 

for문을 하나하나 보자.

 

(1) 빨간색으로 표시한 반복문(0045B89D - 0045B8C2)을 돌면 가장 처음 키 값인 A3EE가 나온다. 

 

(2) 빨간색으로 표시한 반복문(0045B8D5-0045B8F7)을 돌면 Stack에 그 다음 키 값인 1213가 나온다.

 

(3) 0045B90F에서 호출하는 함수를 수행하면 Stack에 그 다음 키 값인 571F706B가 나온다.

 

(4) 빨간색으로 표시된 반복문(0045B929-0045B954)을 돌면 EDI에 그 다음 키 값인 3D2A가 나온다.

 

(5) 빨간색으로 표시된 반복문(0045B96F-0045B9AE)를 돌면 EBX에 그 다음 키 값인 EBCE가 나온다.

 

키는 이런식으로 만들어진다.

그럼 우리는 (1)번을 활용해서 문제에 주어진 키 값의 맨 앞 4자리 BEDA가 나오는 값을 찾으면 된다.

하나하나 다 돌려봐도 되지만, 코드를 작성해서 해보자.

 

처음 반복문인 위의 명령어를 풀어서 쓰면 아래와 같다.

 

EBX = SS[EBP-4] => 내가 입력한 것 전체
ESI = DS[EBX+ECX-1] => 내가 입력한 것 순서대로 들어감
ESI = ESI + EDX
ESI = ESI * 772
EDX = ESI
EDX = EDX * ESI
ESI = ESI + EDX
ESI = ESI | ESI
ESI = ESI * 474
ESI = ESI + ESI
EDX = ESI
ECX = ECX + 1
EAX = EAX - 1
0이 아니면 jmp

 

위의 내용을 바탕으로 코드를 작성하자. 가장 처음 EDX 값은 0이다.

 

Python으로 위와 같이 코드를 작성하였다.

 

F에서 BEDA 문자를 찾을 수 있었다!

F의 MD5값은 800618943025315f869e4e1f09471012이다.

소문자를 대문자로 바꾸어주면 800618943025315F869E4E1F09471012가 되고, 이를 입력하니 문제가 풀렸다!

 

정답 : 800618943025315F869E4E1F09471012

 

 

'Wargame > CodeEngn' 카테고리의 다른 글

CodeEngn Advanced RCE L05  (0) 2021.05.24
CodeEngn Basic RCE L18  (0) 2021.05.20
CodeEngn Basic RCE L16  (0) 2021.05.18
CodeEngn Basic RCE L15  (0) 2021.05.17
CodeEngn Basic RCE L14  (0) 2021.05.17