Das Prog benutzt die alt bekannte API GetDriveTypeA bzw. GetDriveTypeW. um herauszufinden, ob wir das Prog auf
einer CD-Rom haben.
DAs Prog in Olly laden.
Wenn man nicht gestört werden will unter Options->DebuggingOptions-> Excep...
alle Haken setzen.
Dann einen BP auf GetDriveTypeA setzen. Z.B. mit dem Commandline plugin "bp GetDriveTypeA"
Vorher sehen wir uns noch die APi näher an.
Rückgabewert Laufwerkstyp
3 Festplatte
5 CD/DVD
usw.
Alles klar?
Nun das Prog laufen lassen,
Wir werden an der API halten
ganz unten rechts, sehen wir denn aktuelln untertsuchten Pfad.
Von @ bis Z wird alles durchgegangen
MOV EDI,EDI -> Hier halten wir
PUSH EBP
MOV EBP,ESP
CMP DWORD PTR SS:[EBP+8],0
JE SHORT kernel32.7C822D23
PUSH DWORD PTR SS:[EBP+8]
CALL kernel32.7C80E2A4
TEST EAX,EAX
.....
CALL kernel32.GetDriveTypeW -> UUUHU
POP EBP
RETN 4
Dann mit f8 weiter, bis wir "CALL kernel32.GetDriveTypeW" passiert haben.
Jenachdem was der aktuell untersuchte Laufwerksbuchstabe beinhaltet, wird der Wert in
EAX differieren.
Wenn wir das PRog nun z.B. auf der Festplattenpartition G: haben, und diese untersucht wird,
enthält EAX 3.
DAs einzige, was wir machen müssen ist dann nur noch nach kernel32.GetDriveTypeW mit einem
doppelklick auf eax zugreifen und aus der drei eine fünf machen.
Alle bp löschen. mit f9 und bingo.
Ist jetzt natürlich nur in der aktuellen Laufzeit.
Aber nen Patch im Kernel bzw. nen loader ist ja kein Problem.