(codeEngn) Challenges : Basic 01

2018. 7. 5. 17:43WarGame/CodeEngn

코드엔진 Basic 1


----------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------


음..일단 문제는 이렇군요 파일을 다운로드받고 실행시켜보죠


1번째 실행


확인을 누르니...


왠지 HD룸을 CD-ROM으로 바꾸어야 할거 같은 느낌인데요... 느낌이 맞기를^^


그럼 ollyDbg로 한번 까보도록 할게요!



F9를 눌러서 바로 main함수가 있는 위치로 이동해줍시다!




맨위에서 "Make me think your HD is a CD-ROM"이라는 알림을 출력하게끔 되어있네요.

그 후는 "CMP EAX, ESI", EAX와 ESI를 비교해서 같으면 "YEAH!" 명령어로 가고 다르면 "ERROR"명령어로 가게끔 되어있습니다. 음... 이거를 푸는방법은 두가지가 있을 것 같습니다.


1. jmp를 직접 지정해서 아래구문으로가기 (codeEngn에서 원치 않는 방법)




이렇게 설정해주면 CMP명령어가 참이든 거짓이 상관없이 바로 아래 실행으로 내려 갈 수 있습니다. 정석적인 방법은 아니지만 그래도 아래를 실행 할 수 있는 방법 이였습니다.


제대로 된 명령이 실행되는군요 (grin)





2. GetDriveType A명령어의 return값 설정하기 (codeEngn에서 원하는 방법)


원래 문제가 이거였기때문에 GetDriveTpyeA의 리턴값을 찾아야합니다.



(https://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx)

에들어가서 함수에 대해 찾아보니 이러한 표를 찾을 수 있었습니다.


----------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------


위를보면 DRIVE_CDROM 의 RETURN값이 5 이면 CD-ROM drive로 인식한다고합니다. 

그럼 EAX의 값이 return 값이니 변조를해봅시다.


아래 코드를보면 DEC EAX가 2번 있어서 2를 더해준 7을 넣어줬습니다.


실행을 해보니....




실패군요... 왜그런지 살펴보았더니 CMP에서 EAX, ESI를 비교할때 두개가 같아야 하네요.

그럼 ESI에 있는 값음 EAX에 그대로 복사해서 넣어봐야겠군요.



이렇게 ESI에 있는 값은 복사해서 EAX에 넣어주었어요.

결과는.....




성공이네요(grin)


문제를 푸는과정에서 직접적으로 Auth가 필요한 문제가 아니였지만 

다양한 방법으로 풀어볼 수 있는 좋은 기회가 아니였나 싶습니다. 굳굳

Auth는 아마 문제를 잘읽어보면 풀이과정중 어디엔가 숨어있지 않을까 싶네요...




궁금점은 댓글 or 카카오톡오픈채팅으로 부탁드립니다~

놀라울정도로 칼답입니다.