본문 바로가기

Reversing/CodeEngn

[CodeEngn] Basic RCE L05 풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com


그림 1

문제를 읽어보니 등록키를 찾아야 하는 것 같다.

문제를 다운로드하여주었다.

 

받은 파일을 peinfo를 통해 확인해보았더니 upx 패킹이 된 상태라고 되어있어서, Upx 툴을 이용하여 해당 파일로 들어가서 upx 언패킹을 진행하였다.

아! 그러고 혹시 몰라서 패킹된 상태와 언패킹 상태에서 모두 exe 파일을 실행시켜 보았는데 차이점은 없었다. CRC 부분은 없는 것 같다.

 

그림 2
그림 3

파일을 실행시키면 아래의 그림과 같다.

위아래, 두 군데에 정해진 값을 입력해야 하는 것 같다.

그림 4

이제 X32 디버거로 분석해보았다.

 

일단 문자열 찾기를 통해서 알 수 있는 문자열이 있는지 확인해보았다.

아래쪽으로 내려가니, Congrats!라는 성공 문자열이 있는 것을 확인할 수 있었다.

 

그림 5

해당 부분으로 이동하였다.

 

그림 6

그림 6만으로는 노드의 이동을 보는 게 불편해서 그래프 모드로 확인하였다.

 

그림 7

 

6번 노드부터 차례대로 올라가면서 확인해보면,

Congratz가 출력되기 위해서는 4번 노드를 지나와야 한다. 그리고 4번 노드를 지나기 위해서는 2번 노드도 필수적으로 지나가야 한다.

 

그런데 2,4번 노드를 보면 처음 보는 문자열들을 확인할 수 있다.

 

일단 2번 노드부터 확인해보면, edx에 441014라는 값을 담고 있고 403b2c라는 함수를 호출하는데, 아래에 jne가 나오는 것으로 보아, 해당 문자열과 어떠한 값을 비교하는 함수라는 것을 추측할 수 있다.

 그리고 나서 바로 다음 분기문으로 가는데, 위에서 우리는 flag를 얻기 위해서 4번 노드로 진행해야 한다고 했으므로 3번으로 jump 하면 안 되는 것을 알 수 있다.

2번 노드의 jmp를 보면 jne이므로, 같지 않으면 jump를 취하는 것이므로, Registered User가 flag 중 하나일 것이라고 추측하였다.

 

이제 4번 노드로 가면, 2번 노드와 마찬가지고 44102c라는 문자열을 edx에 저장하고 비교 함수를 통해 비교하고 jne를 거치는 과정이므로, 여기에서도 GFX-754-IER-954가 flag일 것이라고 예측할 수 있다.

 

결국 정답을 확인해보면, 위의 Register User를 윗칸에, GFX-754-IER-954를 아래 칸에 입력하면 될 것이고 직접 해보면 우리가 원하는 대로 congrats, 라는 문자열이 출력된다.

 

그림 8

문제에서는 등록키를 찾으라고 했으므로, GFX-754-IER-954가 flag가 되게 된다.

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

[CodeEngn] Basic RCE L07풀이  (0) 2021.08.18
[CodeEngn] Basic RCE L06풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L04풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L03풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L02풀이  (0) 2021.07.31