리버싱 시그를 시작했다.

예전부터 하고 싶었던 과목이지만 어렵고 다른 것도 할것이 많아서 못하고 있엇지

이젠 시그로 묶었으니깐 열심히 해야징ㅋㅋ

 

Ezbeat이 추천해준 사이트 중 Code Engn의 문제를 풀어보기로 했다.

한글이고 쉬울거 같아서??ㅋㅋ

 

암튼 시작!!

 

문제:

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

실행하면 하드를 씨디로 인식하게 하라는 창이 뜨면서 프로그램이 죽는다.

위에 문제를 보면 GetDriveTypeA의 리턴값을 적절하게 수정하면 될 것 같다.

 

어제 ezbeat이 알려준 방법대로 Search for->All Intermodular Calls를 실행한다.

위 기능은 Import된 함수들의 목록을 보여주는 역할을 한다. 고로 API를 잘 하면 더 쉽게 Reversing을 할 수 있겠지??ㅋㅋ

문제에서 나왔던 GetDriveTypeA가 보인다. 일단 우클릭을 해서 브레이크 포인트를 찍고 실행해 보자.
참고로 F2: Break Point, F9: Run, F8: Step Over, F7: Step Into 이다. 잘 기억해 놓자.

암튼 F9를 눌러서 실행해서 리턴값이 뭐가 나오는지 확인해보자.

실행하면 위 GetDriveTypeA에서 멈춘 것을 확인할 수 있다. 이제 우리는 리턴값을 확인하면 되는데.

여기서 잠깐 x86의 Windows와 Linux는 리턴값을 대부분 EAX 레지스터에 저장한다는 것을 알아야 한다.

그래서 우리는 EAX 레지스터를 확인 할 것이다.

위 그림에서 보면 알겠지만 EAX의 값이 0x00000003 인것을 알 수 있다. 이 값이 아마도 HDD를 가리킬텐데 우리는 CD-ROM

으로 바꿔야한다. 어떻게 해야하나? MSDN을 봐야지.

자 위에서 보면 3이 드라이브를 가리킨다는 것을 알 수 있으며 우리가 원하는 것은 5번이라는 것을 쉽게 알 수 있다.

이제 EAX 레지스터를 수정하기만 하면 된다.

EAX 레지스터를 클릭해서 0x00000005로 바꾸고 실행.

올바른 결과가 출력됐다.

1번 문제 끝ㅋ

'Security > Reversing' 카테고리의 다른 글

CodeEngn 07  (0) 2010.04.12
CodeEngn 06  (0) 2010.04.12
Code Engn L04 Start  (0) 2010.04.06
Code Engn L03 Start  (0) 2010.04.05
Reverse L02 Start  (0) 2010.04.05

+ Recent posts