19.07.2012, 13:40
(Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2012, 13:41 von iNvIcTUs oRCuS.)
Also so wie's aussieht hat das Spiel was dagegen wenn man den Debugger aufschaltet und Breakpoints setzt. Dabei spielts keine Rolle ob es sich um Memory Breakpoints oder Hardware Breakpoints handelt. Und dieser Cheat Schutz ist auch im Keks von Skidrow noch enthalten...
Ferner glaub ich das Du da so auf die schnelle keinen brauchbaren Pointer findest. Aber - eine Code Injection ist hier definitiv auch eine einfache Lösung.
Original Code:
[code=ASM]JustCause2.exe+4103F0 - F3 0F11 46 40 - movss [esi+40],xmm0[/code]
Sprung zur Codecave:
[code=ASM]JustCause2.exe+4103F0 - E9 F88F1400 - jmp JustCause2.exe+5593ED[/code]
Codecave:
[code=ASM]JustCause2.exe+5593ED - F3 0F10 46 44 - movss xmm0,[esi+44]
JustCause2.exe+5593F2 - F3 0F11 46 40 - movss [esi+40],xmm0
JustCause2.exe+5593F7 - E9 F96FEBFF - jmp JustCause2.exe+4103F5
JustCause2.exe+5593FC - 90 - nop[/code]
Und das war schon der Ganze Zauber...
Im FPU Register XMM0 steht der aktuelle Zeitwert. Dieser wird in die entsprechende Adresse [ESI+0x40h] geschrieben. Und an Adresse [ESI+0x44h] steht der maximale/volle Zeitwert...
Diesen vollen Zeitwert lasse ich quasi ins XMM0 Register schreiben, dann wird der Originalcode ausgeführt der durch den Jump zur Codecave überschrieben wird. Und letztenendes wird wieder raus aus der Codecave gesprungen zum weiteren Programmablauf.
grEEtZ sILeNt heLLsCrEAm
Ferner glaub ich das Du da so auf die schnelle keinen brauchbaren Pointer findest. Aber - eine Code Injection ist hier definitiv auch eine einfache Lösung.
Original Code:
[code=ASM]JustCause2.exe+4103F0 - F3 0F11 46 40 - movss [esi+40],xmm0[/code]
Sprung zur Codecave:
[code=ASM]JustCause2.exe+4103F0 - E9 F88F1400 - jmp JustCause2.exe+5593ED[/code]
Codecave:
[code=ASM]JustCause2.exe+5593ED - F3 0F10 46 44 - movss xmm0,[esi+44]
JustCause2.exe+5593F2 - F3 0F11 46 40 - movss [esi+40],xmm0
JustCause2.exe+5593F7 - E9 F96FEBFF - jmp JustCause2.exe+4103F5
JustCause2.exe+5593FC - 90 - nop[/code]
Und das war schon der Ganze Zauber...
Im FPU Register XMM0 steht der aktuelle Zeitwert. Dieser wird in die entsprechende Adresse [ESI+0x40h] geschrieben. Und an Adresse [ESI+0x44h] steht der maximale/volle Zeitwert...
Diesen vollen Zeitwert lasse ich quasi ins XMM0 Register schreiben, dann wird der Originalcode ausgeführt der durch den Jump zur Codecave überschrieben wird. Und letztenendes wird wieder raus aus der Codecave gesprungen zum weiteren Programmablauf.
grEEtZ sILeNt heLLsCrEAm
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
Traineranfragen per PM werden prinzipiell gelöscht...