728x90


앞으로 코드엔진의 리버싱 문제를 짬짬히 올려보려 합니다!!

(언제까지 열정을 가지고 할지는 모르지만...)



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

Challenges : Basic 01


 

Author : abex


 

Korean :
HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가

English :
What value must GetDriveTypeA return in order to make the computer recognize the HDD as a CD-Rom


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


위 실행파일을 실행시키면




hd를 cd-rom으로 인식하게 하라고 뜨네요

그리고 확인을 누르면


CD-ROM이 아니라고 에러창을 표시합니다. 자 이제 이것을 올리디버그로 열어보면



이런 화면이 뜨게 될 것입니다. 그리고 401018번지에서 GetDriveTypeA함수를

호출하는 것을 보실 수 있습니다.


http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa364939(v=vs.85).aspx


위 msdn문서를 참고하시면 GetDriveType 함수의 반환값은 3이 될 것입니다. (HDD이므로)

실제로 F8을 눌러 실행을 진행시키시면 



위 같이 EAX 레지스터 값이 3일 될 것입니다. (함수의 반환값은 EAX에 저장이 됩니다.)


이떄 레지스터를 두번 클릭하면 레지스터값을 변경할 수 있습니다.



우리는 cd로 인식하게 할거니까 5의 값을 입력하면 (msdn문서 참조) 되겠죠?


수정하고 진행하시면 안되는 분들이 계실 겁니다.


그 이유는 컴퓨터마다 ESI레지스터 초기 값이 다른데


저같은 경우에도



ESI 초기값이 -1 이어서



이렇게 비교문에서 다른 값이 되기 때문에


에러메시지가 나올수 밖에 없는 것입니다.


해서 EAX값은 4로 수정하시면 정상 출력이 될 것입니다.


그러나 레지스터값을 수정하는 방법은 일시적이므로




다른 방법으로는 어셈블리 내용을 수정하는 방법이 있습니다.




이렇게 INC ESI를 NOP(아무것도 하지않음)으로 수정하여


GetDriveType함수의 반환값이 3이어도 올바른 메시지를 출력하게끔 수정하였습니다.


 진행하시면 원하는 메시지를 출력하게 될 것입니다.


(수정후 우클릭 Copy to executable - All modifications 클릭후

나온창에서 다시 우클릭 Save file 하시면 수정된 내용을 저장도 하실 수 있습니다.)



JMP문을 수정하는 방법도 있지만 실행때마다 메모리 번지가 달라질수 있어서


좋은 방법은 아니라고 합니다.

728x90

+ Recent posts