01.exe 실행
프로그램 개요
<기호>에 들어가서 01.exe 를 클릭하고 EntryPoint 를 누른다.
위와 같은 코드는 오른쪽 주석 내용과 같이 MessageBox 관련 코드이다. call <JMP. &MessageBoxA>를 실행하면 위에 exe를 실행했을 때의 창이 뜬다. ‘확인’을 누르면 다음 줄로 넘어간다.
우선 GetDriveTypeA 코드는 넘어가겠다. (아무 일도 일어나지 않는다)
성공 메시지창을 띄워보자
다음 코드를 보면 ESI와 EAX를 각자 증가, 감소시키는 코드이다.
ESI 는 401000 → 401001 → 401002 → 401003 EAX 는 00000003 → 00000002 → 00000001
je 는 jump if equal 이다. ESI값과 EAX값이 같으면 40103D 주소로 이동하는 것이다. 그러나 두 개의 값이 다르므로 점프를 하지 않고 진행한다.
뒤의 코드는 Error 메시지박스를 띄우는 내용이다.
만약 je 점프가 되었다면?
화살표를 보면 알 듯이, “YEAH!” 라는 성공 메시지박스를 띄우는 코드로 이동한다.
그렇다면 ESI값과 EAX값을 같게 조작하여 je 코드에서 점프를 하도록 만들어야 겠다.
ESI의 값을 00000001로 바꾸어 보았다.
그러니 je 코드에서 바로 점프가 취해지는 것을 볼 수 있다.
그러면 이렇게 성공 메시지가 뜬다.
그 뒤 ExitProcess로 프로그램이 종료된다.
GetDriveType 의 리턴값은 무엇이 되어야 할까?
하지만 이 문제의 핵심은 GetDriveTypeA 의 내용은 아직 다루지 않았다. 이 함수의 리턴값을 알아야 한다. 그래서 해당 내용을 구글링 해보았다.
이 fileapi.h는 디스크 드라이브가 이동식, 고정, CD-ROM, RAM 디스크 또는 네트워크 드라이브인지 여부를 확인한다.
이 함수의 반환 값에 대한 테이블이 존재한다. 여기서 CD-ROM에 관한 리턴값은 5 라는 것을 알 수 있다.
그래서 이 문제의 정답은 5이다.
'Wargame' 카테고리의 다른 글
[Dreamhack] patch (0) | 2025.04.28 |
---|---|
[CodeEngn] Basic L04 풀이 (0) | 2025.04.04 |
[CodeEngn] Basic L02 풀이 (0) | 2025.04.04 |