리버싱 시그를 시작했다.
예전부터 하고 싶었던 과목이지만 어렵고 다른 것도 할것이 많아서 못하고 있엇지
이젠 시그로 묶었으니깐 열심히 해야징ㅋㅋ
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번 문제 끝ㅋ