문제를 읽어보니 등록키를 찾아야 하는 것 같다.
문제를 다운로드하여주었다.
받은 파일을 peinfo를 통해 확인해보았더니 upx 패킹이 된 상태라고 되어있어서, Upx 툴을 이용하여 해당 파일로 들어가서 upx 언패킹을 진행하였다.
아! 그러고 혹시 몰라서 패킹된 상태와 언패킹 상태에서 모두 exe 파일을 실행시켜 보았는데 차이점은 없었다. CRC 부분은 없는 것 같다.
파일을 실행시키면 아래의 그림과 같다.
위아래, 두 군데에 정해진 값을 입력해야 하는 것 같다.
이제 X32 디버거로 분석해보았다.
일단 문자열 찾기를 통해서 알 수 있는 문자열이 있는지 확인해보았다.
아래쪽으로 내려가니, Congrats!라는 성공 문자열이 있는 것을 확인할 수 있었다.
해당 부분으로 이동하였다.
그림 6만으로는 노드의 이동을 보는 게 불편해서 그래프 모드로 확인하였다.
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, 라는 문자열이 출력된다.
문제에서는 등록키를 찾으라고 했으므로, 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 |