![]() |
Hilfe bei legalem Packet Sniffer benötigt
Hallo,
ich habe ein kleines Problem und ich hoffe sehr, dass ihr mir dabei helfen könnt. Ich habe vor einigen Wochen einen Auftrag angenommen, für den meine Firma einige sicherheitstechnische Aspekte eines älteren MMORPG prüfen muss. Wir sind hiermit schon fast durch und es fehlen nur noch ein paar Kleinigkeiten. Wir benötigen für die letzte Testreihe noch einen Packet Sniffer für eingehende Pakete. Leider ist unser hausinterner Experte auf dem Gebiet seit Montag für längere Zeit krankgeschrieben und es bleibt somit an mir hängen. Ich bin also hergegangen und habe den von ihm entwickelten Packet Editor (für ausgehende Pakete) beim Pointer/Hook angepasst. Leider funktioniert es nicht wirklich... das Script gibt zwar sämtliche Rückmeldungen aus, allerdings crasht der Client des Spiels bei der Übermittlung des abgefangenen Paketes an die ursprüngliche Funktion. Das integrierte AntiCheat-System wurde bereits umgangen und greift nicht. X32dbg gibt vor dem Crash folgende Meldung aus: "Erste Ausnahme [First chance exception] bei 701FB224 (C00000FD, EXCEPTION_STACK_OVERFLOW)!". Ich bin in diesem Bereich überhaupt kein Experte, allerdings vermute ich, dass der Fehler irgendwie mit dem Move der Funktion im Memory zusammenhängt. Ich kann hier leider keine detaillierten Informationen zum Script preisgeben, da diese auch in den falschen Händen landen könnten. Folgendes kann ich preisgeben:
Code:
Gerne zahle ich auch für einen Fachkundigen, der sich dem Problem annehmen möchte und einen vollständigen Einblick in das Script erhält. Das Script muss schnellstmöglich - spätestens bis morgen gegen 16:30 - fertiggestellt werden, damit wir unsere Fristen einhalten können.
procedure PlaceHook(ReplacementAddress: Pointer);
begin NearJmpSpliceRec.ReplAddr := ReplacementAddress; InitNearJmpSpliceRec(Pointer(NativeUInt(GetModuleHandleA('XXXXX.dll')) + $XXXXXX), @Proxy); end; procedure Proxy(Message: PNetworkMessage; Login: Boolean); stdcall; begin try begin SpliceNearJmp(NearJmpSpliceRec.FuncAddr, NearJmpSpliceRec.OldData); TSendToServerNew(NearJmpSpliceRec.ReplAddr)(Message, Login); // Call original func TSendToServerNew(NearJmpSpliceRec.FuncAddr)(Message, Login); //<-- Hier steigt das Script aus ohne in die Exception zu springen. SpliceNearJmp(NearJmpSpliceRec.FuncAddr, NearJmpSpliceRec.NewData); end; except on E : Exception do begin MessageBox(0, PChar(E.ClassName+' error raised, with message : '+E.Message), '', MB_TOPMOST); end; end; end; procedure SpliceNearJmp(FuncAddr: Pointer; NewData: TNearJmpSpliceRec); var OldProtect: DWORD; begin VirtualProtect(FuncAddr, SizeOf(TNearJmpSpliceRec), PAGE_EXECUTE_READWRITE, OldProtect); try Move(NewData, FuncAddr^, SizeOf(TNearJmpSpliceRec)); finally VirtualProtect(FuncAddr, SizeOf(TNearJmpSpliceRec), OldProtect, OldProtect); FlushInstructionCache(GetCurrentProcess, FuncAddr, SizeOf(TNearJmpSpliceRec)); end; end; Wir wurden mit der Prüfung des Online-Spiels durch den Publisher beauftragt. Es steht somit keine Computersabotage im Raum und die Entwicklung und das Testen des Online-Spiels durch uns ist somit legal. Vielen Dank im Voraus!! |
AW: Hilfe bei legalem Packet Sniffer benötigt
Die Exceptions, bedeutet die, dass der normale Stack übergelaufen ist? Falls ja, gibt es da zuviele Recursionen oder geht es um einen Exception-Stack?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz