본문 바로가기

CTF

[코드엔진] basic 1 풀이

그냥 저냥 한거 남기려는 글...다른사람이볼때 참고가될지는 모르겠습니다....

프로그램 시작

프로그램을 시작해보니 나의 하드디스크를 CD-Rom으로 인식시키라고 하네요

일단 여기서 할수있는게없으니 확인을눌러봅니다.

 

아니라고하네요.

그러면 봐봅시다

디버거로 열어봅시다.

일단 아까 메시지로 보았단 CD-Rom으로 인식시켜달라는 문자열이 보이는곳으로 와봤습니다.

위에 사진을보면 call하고 messageboxA라는 함수를 부르는데 이름만봐도 아까봤던 메시지박스를 띄워주는 친구같네요. 저친구에다가 CD-Rom을 인식시켜줘라고 저에게 말했던거같습니다.

짜잔.

그렇다면 아래의 call GetdriveTypeA는 뭘까요 이 친구의 리턴값을 푸는문제였죠?

리턴값은 이친구를실행하고 저한테 돌아오는 값인데 일단한번봅시다.

 

저 GetdriveTypeA 이라는 친구를 실행하고 보니 EAX에 3이라는값이 들어왔네요 즉 리턴값은=3 이라는말입니다.

중요한순간

이제 리턴값을 받고보니 inc ,dec , cmp , je 라는말이있는데요 천천히 봐보면

inc는 1을증가시켜라

dec는 1을감소시켜라

cmp는 비교해라

je는 같으면 점프해라

라는 말입니다 천천히봐볼께요 위에위에 사진을보면 EAX는 3이였고 ESI 는 401000인데

순서대로 EAX 1감소 ESI 1증가 ESI 1증가 EAX1감소네요 그렇다면 EAX는 1일것이고 ESI는 401003이네요?

봐봅시다.

 

자 그럼 다음 라인 CMP인데요 비교를하는데 이제 EAX와 ESI를 비교하겠대요 큰지 작은지 같은지를 비교합니다

그다음라인은 JE 같으면 점프 하라는말이고요. 지금은 같지않으니 점프하지않겠죠?

그러면 그다음은 처음에봤던 CD-ROM이 아니라고 안된다는 문구가 출력됩니다 . 즉 점프를해야하는것이죠

EAX값 변경

EAX값을 마우스로 클릭해서 ESI랑 똑같이 변경해봅니다.

그렇게하고 CMP를 만나고 같으니 JE 점프

 

끝입니다.

문제가 GetdriveTypeA 의 리턴값은 무엇이되어야하는가였으니 401003 이 정답이 겠네요.

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

정답체크 해보니 401003 이아니네요 다시 풀어보고 올리겠습니다

'CTF' 카테고리의 다른 글