참고한 글
https://fascination-euna.tistory.com/76 - x86dbg 사용법
문제의 전체 코드이다.
이 문제의 목적은 문제 설명에도 나와있듯이, GetDriveTypeA라는 변수를 조작해서 시스템이 HD를 CD-ROM으로 인식하게 하는 것이 목적이다.
일단 문제의 전체적인 흐름을 위의 사진을 보고 살펴보도록 하자.
디버깅 툴을 사용하면서 쭉 흐름을 따라온 사람이라면 알 수 있듯이, GetDriveTypeA가 실행된 뒤에 Breaking Point를 설정해서 변환값이 저장되는 EAX 레지스터를 살펴보면,
3임을 알 수 있다. 그렇다면, 이 과정이 진행된 후에, 과정을 보면,
cmp 전까지 과정을 살펴보면 esi값이 3번 증가하고, eax값이 2번 떨어지는 것을 볼 수 있다.
그후에 cmp 명령어를 통해서 서로 비교를 한후, je 명령어를 통해 같으면 우리가 원하는 부분으로 도달 시켜줌을 알 수 있다.
근데 나는 이상한 것이, 다른 write up을 보면, cmp전에 eax값은 1, esi값이 3이여야 하는데, 나는 eax값은 1로 잘 되어 있지만 esi값이 00401000을 가리키고 있어서 그런지 00401002이다.
그래서 나는 GetDriveTypeA의 값을 바꾸는 것이 아닌, je에서 jne로 바꾸어서 문제를 해결했다.
이 문제가 원하는 답은 아니었지만, 이렇게 해결할 수 있음을 알게 되었다.