|
Thread |
Forum |
Last Post |
Posts |
Views |
 |
Breakpoint Hooking Problem
Posted on: Thu 17. Sep 2009, 13:51
puelo
Preview
Go To Post
Ahoy, ich befasse mich seit einigen Wochen ernsthaft mit dem Thema Hack Coding in CS bzw. HL Engine. Habe einen Loader geschrieben, welcher auch erfolgreich eine .dll injected. Nun habe ich in der .dll einige Funktionen , unter anderem eine welche Hooks für Breakpoints setzt. Ich kann normal CS starten, den Loader starten und die .dll wird injected, aber sobald ich einen server joinen will (egal ob online, oder LAN), friert das Game ein - etwa beim letzten drittel des Ladebalkens -. Habe dann durch auskommentieren die "kaputte" Stelle gefunden, aber konnte keinen wirklichen Fehler feststellen. Mit Ollydbg kann ich mich leider auch nicht dranhängen, denn wenn ich versuche hl.exe mit olly zu starten, dann kommt "Game currently unavailable". Wenn ich allerdings das Spiel öffne, und mich dann attache, und start drücke komme ich nichtmehr ins Game. Hier das betroffene Stück Code: TEXT Code: bool bpSetHooks(void) { if (!pExceptionHandler || !bpBackupRegisters()) return false; CONTEXT ctx = { CONTEXT_DEBUG_REGISTERS }; // Register #1 ctx.Dr0 = gBreakPoints.bp[0].dwAddr; ctx.Dr7 = 0x00000001; // Register #2 ctx.Dr1 = gBreakPoints.bp[1].dwAddr; ctx.Dr7 |= 0x00000004; // Register #3 ctx.Dr2 = gBreakPoints.bp[2].dwAddr; ctx.Dr7 |= 0x00000010; // Register #4 ctx.Dr3 = gBreakPoints.bp[3].dwAddr; ctx.Dr7 |= 0x00000040; return (SetThreadContext(gBreakPoints.hThread, &ctx) == TRUE); return true; }
Muss dazu sagen, dass dieses Codefragment nicht Original von mir stammt. ko1n und Marvv haben das ursprünglich verwendet, also keine Flames plx Danke für jede hilfreiche Antwort. MFG
|
VB, C/C++, Delphi, etc |
Thu 17. Sep 2009, 23:31
by puelo
|
4 |
736 |
 |
Breakpoint Hooking Problem
Posted on: Thu 17. Sep 2009, 13:51
puelo
Preview
Go To Post
Achja vergessen zu sagen. Die Funktion wird bereits schon beim ersten Start ausgeführt, also ohne das ich auf einen Server joinen muss, wobei sie da keine Probleme macht. Wenn ich diesen Teil auskommentiere kann ich auf einen Server joinen. Also irgendwas läuft da wohl falsch
|
VB, C/C++, Delphi, etc |
Thu 17. Sep 2009, 23:31
by puelo
|
4 |
736 |
 |
Breakpoint Hooking Problem
Posted on: Thu 17. Sep 2009, 13:51
puelo
Preview
Go To Post
Mhh hab den Fehler noch etwas eingrenzen können... Es betrifft nur die letzten beiden Register: TEXT Code: // Register #3 ctx.Dr2 = 0x4003000; //gBreakPoints.bp[2].dwAddr; ctx.Dr7 |= 0x00000010; // Register #4 ctx.Dr3 = 0x4004000; //gBreakPoints.bp[3].dwAddr; ctx.Dr7 |= 0x00000040; // todo: dynamic loop here
Wenn ich, wie oben schon getan, manuell eine Addresse einsetze, dann freezt das Spiel nicht. Die Funktion welche die Addressen setzt sieht folgendermaßen aus: TEXT Code: bool bpInitialize(breakpoints_t *pBreakPoints) { memcpy(&gBreakPoints, pBreakPoints, sizeof(gBreakPoints)); if (gBreakPoints.hThread == NULL) gBreakPoints.hThread = GetCurrentThread(); for (int i = 0; i < 4; i++) { if (*(gBreakPoints.bp[i].pSystemFunction) != NULL) continue; gBreakPoints.bp[i].dwAddr = gBreakPoints.bp[i].dwFunctionAddr; // length of opcode + 0x5 size_t sStubSize = oplen((BYTE *)gBreakPoints.bp[i].dwAddr); *(gBreakPoints.bp[i].pSystemFunction) = malloc((sStubSize + 0x5)); // copy the opcodes to the buffer memcpy(*(gBreakPoints.bp[i].pSystemFunction), (PVOID)gBreakPoints.bp[i].dwAddr, sStubSize); // add a jmp instruction to the original system function at the end of the buffer *(PBYTE)((DWORD)*(gBreakPoints.bp[i].pSystemFunction) + (DWORD)sStubSize) = 0xE9; *(PDWORD)((DWORD)*(gBreakPoints.bp[i].pSystemFunction) + (DWORD)sStubSize + 0x1) = (((DWORD)gBreakPoints.bp[i].dwAddr + (DWORD)sStubSize) - ((DWORD)*(gBreakPoints.bp[i].pSystemFunction) + (DWORD)sStubSize + 0x5)); } if (pExceptionHandler == NULL) pExceptionHandler = AddVectoredExceptionHandler(1, ExceptionHandler); return true; }
|
VB, C/C++, Delphi, etc |
Thu 17. Sep 2009, 23:31
by puelo
|
4 |
736 |
 |
Breakpoint Hooking Problem
Posted on: Thu 17. Sep 2009, 13:51
puelo
Preview
Go To Post
hat sich schon erledigt, hab die letzten beiden Debug Register Breakpoints manuell gesetzt. Danke trotzdem.
|
VB, C/C++, Delphi, etc |
Thu 17. Sep 2009, 23:31
by puelo
|
4 |
736 |