-
CodeEngn Basic RCE 16$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:08
해당 파일을 열어 보니 다음과 같이 프로그램이 실행 됩니다.
Name을 입력받고 Password를 입력 받는 것으로 보아 CodeEngn을 입력 했을때 필요한 Password를 찾는 것 같습니다.
일단 문자열을 찾아 보겠습니다.
프로그램 화면에 등장하는 아무 문자열이나 BP을 걸고 주소를 따라 가 봤습니다.
시작 주소는 401390 이였습니다.
하지만 저는 문자열이 다 출력된 후에 입력을 받는 구간 까지 도달 해야 하기때문에 F9를 이용해서 401447로 한번 가보겠습니다.
그리고 Name을 입력받는 주소인 401501에 BP를걸고 F9를 입력하면 다음과 같이 Name을 입력 할 수 있습니다.
그리고 아래로 좀 더 내려가 보면 Password를 입력 받는 주소인 401589가 나옵니다. 해당 주소를 실행하면 Password를 입력 받을 수 있습니다.
Password로 1234를 입력해 보겠습니다.
그리고 아래쪽을 보면 성공과 실패로 나뉘어 지는 CMP 명령어와 분기 점을 찾을 수 있습니다.
CMP 명령어가 존재 하는 40159F를 BP 걸고 F9를 실행하면 다음과 같은 명령어를 확인 할 수 있습니다.
CMP EAX, DWORD PTR SS:[EBP-3C] 라는 명령어를 찾을 수 있고 현재 EBP는 70FF38이라는 것을 알 수 있습니다. EBP의 현재 주소를 Dump로 확인해 보겠습니다.
명령어를 확인해 보면 제가 입력한 Password가 EAX에 현재 들어있기 때문에 EAX와 EBP-3C에 위치한 문자열과 비교 하는 것을 알수 있습니다.
EBP-3C = 70FF38 - 3C = 70FEFC입니다.
70FEFC ~ 70FEFF 까지의 문자열을 확인해 보면 다음과 같습니다.
리틀 엔디안 방식으로 들어 있기 때문에 변환을 시키면 16진수로 E4C60D97 입니다.
그러므로 16진수인 E4C60D97를 10진수로 바꾸면 다음과 같습니다.
16 진수 E4C60D97 = 10진수 3838184855
Password는 3838184855입니다.
'$ 리버싱 $ > CodeEngn Basic RCE' 카테고리의 다른 글
CodeEngn Basic RCE 19 (0) 2019.05.07 CodeEngn Basic RCE 17 (0) 2019.05.07 CodeEngn Basic RCE 15 (0) 2019.05.07 CodeEngn Basic RCE 14 (0) 2019.05.07 CodeEngn Basic RCE 13 (0) 2019.05.06