CodeEngn.com Basic RCE L01
https://codeengn.com/challenges/
위의 사이트에서 풀어볼 수 있는 리버싱 문제다.
문제는 이러하다. 첨부된 파일을 다운로드하여 압축을 풀면 01.exe 파일이 있다. 아예 이쪽은 처음이여서,, 맥 환경에서 .exe를 어떻게 해야될지 모르겠던 나는!?!?!
parallels desktop을 이용하여 윈도우 환경을 구성했다.
01.exe를 실행시키면 "하드디스크?를 씨디롬처럼 인식하게 해라~" 뭐 이런 문장이 출력되고 확인 버튼을 누르면
이전에 부탁한걸 못들어줬더니 격한 반응을 보인다. 여기서 프로그램은 종료된다.
흠 그럼 올리디버거를 처음 개시해보자
올리디버거에서 01.exe를 오쁜한 모습이다. 위와 같이 01.exe를 어셈블리어 코드로 보여준다. 이를 이용해 분석해보자
우측에 저렇게 문자열이 보인다. 문자열을 이용해 이쯤이 무슨 작업을 하는 부분인지 대충 짐작할 수 있었다.
00401024 에서 진행하는 CMP 명령을 살펴보면 EAX와 ESI의 값을 비교한다.
다음 줄에 있는 JE 명령어는 Jump if Equal의 줄임말로서 위에서 비교한 CMP의 결과가 True라면 뒤의 주소값으로 점프한다.
여기서 점프하게 되는 0040103D는 위 사진에서 볼 수 있듯이 "OK, I really think that your HD is a CD-ROM! :p"을 출력하는 부분이다.
즉 저 CMP에서 비교 결과가 False 였다면 점프 없이 그대로 진행되어 "Nah... This is not a CD-ROM Drive!"라는 에러 문구가 출력이 된다.
True라면 위에서 언급한 결과가 나온다.
그렇다면 두가지 방법이 일단 눈에 보인다!
첫번째! CMP의 결과가 True가 나오게 바꾸는 방법
두번째! CMP의 결과가 거짓이여도 0040103D로 점프하게 하는 방법!
첫번째 방법은 그냥 EAX와 ESI를 비교하는 00401024에서 당연히 True가 나올 수 밖에 없는 CMP EAX, EAX로 변경해주는 것이다.
변경하고자 하는 명령을 더블클릭하면 위와 같이 바꿀 수 있다.
이렇게 바꿔주고 실행을 시켜보면~?
후핳 이렇게 문제가 원하는대로 풀었음을 확인할 수 있다~
두번째 방법으로 풀고자 한다면 위와 같이 JE 명령어를 CMP 결과에 상관없이 점프하는 JMP 명령어로 바꿔주자.
결과는 위와 같이 성공이닷
후핳 리버싱 신기하자나~?
댓글
이 글 공유하기
다른 글
-
[써니나타스 Suninatas] 리버싱 reversing No.10
[써니나타스 Suninatas] 리버싱 reversing No.10
2020.08.11 -
[드림핵 Dream hack] rev-basic-2
[드림핵 Dream hack] rev-basic-2
2020.08.06 -
CodeEngn Basic RCE L02
CodeEngn Basic RCE L02
2020.07.03