HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가
CodeEngn Basic RCE L01 (abex' 1st crackme)
*GetDriveTypeA
타입에 따라 반환 값이 다르다
CD-ROM의 경우 5인 것을 그냥 확인 가능. .
하지만 다른 방법으로 확인해보기로 한다
처음 실행시키면 해당 창이 뜬다
CD-Rom으로 인식시키라고 한다
1. ZF값을 변조 시켜 점프 시킨다.
00401000 | 6A 00 | push 0 |
00401002 | 68 00204000 | push 01.402000 | 402000:"abex' 1st crackme"
00401007 | 68 12204000 | push 01.402012 | 402012:"Make me think your HD is a CD-Rom."
0040100C | 6A 00 | push 0 |
0040100E | E8 4E000000 | call <JMP.&MessageBoxA> |
00401013 | 68 94204000 | push 01.402094 | 402094:"c:\\\\"
00401018 | E8 38000000 | call <JMP.&GetDriveTypeA> |
0040101D | 46 | inc esi | esi:EntryPoint
0040101E | 48 | dec eax |
0040101F | EB 00 | jmp 01.401021 |
00401021 | 46 | inc esi | esi:EntryPoint
00401022 | 46 | inc esi | esi:EntryPoint
00401023 | 48 | dec eax |
00401024 | 3BC6 | cmp eax,esi | esi:EntryPoint
00401026 | 74 15 | je 01.40103D |
00401028 | 6A 00 | push 0 |
0040102A | 68 35204000 | push 01.402035 | 402035:"Error"
0040102F | 68 3B204000 | push 01.40203B | 40203B:"Nah... This is not a CD-ROM Drive!"
00401034 | 6A 00 | push 0 |
00401036 | E8 26000000 | call <JMP.&MessageBoxA> |
0040103B | EB 13 | jmp 01.401050 |
0040103D | 6A 00 | push 0 |
0040103F | 68 5E204000 | push 01.40205E | 40205E:"YEAH!"
00401044 | 68 64204000 | push 01.402064 | 402064:"Ok, I really think that your HD is a CD-ROM! :p"
00401049 | 6A 00 | push 0 |
0040104B | E8 11000000 | call <JMP.&MessageBoxA> |
00401050 | E8 06000000 | call <JMP.&ExitProcess> |
00401055 | FF25 50304000 | jmp dword ptr ds:[<GetDriveTypeA>] |
0040105B | FF25 54304000 | jmp dword ptr ds:[<ExitProcess>] |
00401061 | FF25 5C304000 | jmp dword ptr ds:[<MessageBoxA>] |
00401026 | 74 15 | je 01.40103D
ZF는 연산 결과 값이 0이면 1반환(참)
ZF가 0 > 점프하지 않고 계속 진행하여
ZF가 1 > 40103D로 점프
해당 부분에서 ZF가 0임을 확인할 수 있고
이를 1로 변조시켜주면
해결할 수 있다.
2. 조건 분기 명령어 je 대신 jmp로 바꿔준다
그래서 HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴 값을 구해보면
이때 EAX는 3, ESI는 0임을 알 수 있는데
중간에 EAX 값은 총 -2, ESI 총 +3 되는 것을 볼 수 있다
EAX-2 = 0+3
EAX = 5
정답 = CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴 값
: 5
728x90
'Wargame > CodeEngn' 카테고리의 다른 글
Basic RCE L06 (0) | 2023.12.19 |
---|---|
Basic RCE L05 (0) | 2023.12.19 |
Basic RCE L04 (0) | 2023.12.19 |
Basic RCE L03 (0) | 2023.11.22 |
Basic RCE L02 (0) | 2023.11.22 |