Hey leute,
ich bin gerade dabei einen kleinen PacketLogger zu schreiben und stoße da auf ein Problem. Ich möchte nicht groß drum reden und fange am besten gleich mit meinem Problem an:
Also ich möchte gerne diese Funktion hooken:
Aufruf:
Da es aus meiner Sicht eine __fastcall funktion ist und das Paramter in edx übergeben wird lese ich mit meinem 2. Parameter das Packet aus. Die MessageBox gibt mir auch das komplette Packet aus. Das Problem entsteht wenn ich die orginale funktion aufrufen möchte :
005DBB73 8BD8 MOV EBX,EAX -> hier wird das Register EBX verändert und dadurch ensteht her:
CMP BYTE PTR DS:[EBX+31],0
der Crash.
das Problem ist halt das mein hook irgendwie das eax register verändert und nicht sichert.
Kann mir vlt jemand sagen wie ich das verhindern kann.
mfg Lazeboy
das ecx und edx genutzt wird weiß ich ja nur wird halt vor dem funktion aufruf eax gesetzt und auf eax habe ich ja keinen zugriff drauf wenn ich keine naked funktion schreibe.
also da überschreibe ich zwar nur irgendwie gehört das zur Calling Convention denn die beiden push kommen erst danach. Das ist zwar ein problem aber das richtige problem ist eig. das oSend mit einem veränderten paramter eax aufgerufen wird. Habe ich gerade dank dir bemerkt
also da überschreibe ich zwar nur irgendwie gehört das zur Calling Convention denn die beiden push kommen erst danach. Das ist zwar ein problem aber das richtige problem ist eig. das oSend mit einem veränderten paramter eax aufgerufen wird. Habe ich gerade dank dir bemerkt
Hm, verstehe auch nicht ganz wo der ganze Code in SendHook herkommt. Ich würde das Ding ausziehen und dann sollte da auch nicht viel mehr drin sein als 'ne Calling Convention, dein MB Call und ein jump zurück.
Ansonsten wäre ein Weg in die Compiler Optionen gegangen.
Etwaige Einstellungen wie Optimierung, standardmäßige Calling Conventions und andere Spielereien verfälschen gerne mal den Code.
könntest du mir sagen welchen genauen einstellungen ich verändern muss um jegliche optimierung zu entfernen. Denn ich habe das problem das wenn ich eine Funktion per dll Calle und die dll in embacadero c++ builder erstelle funktioniert das ganze jedoch in Vc++ nicht gehört jetzt nicht ganz zu dieser topic aber wegen jeden problem ne neue topic aufmachen ist auch nicht das wahre
also ich habs mir nochmal angeguckt das problem ist das man in c++ builder AnsiString benutzen kann und das ist nötig ich wüsste aber nichts was man dem AnsiString in visual c++ gleichstellen kann.
Also ich habs mir nochmal angeguckt das problem ist das man in c++ builder AnsiString benutzen kann und das ist nötig ich wüsste aber nichts was man dem AnsiString in visual c++ gleichstellen kann.
Da gibts wohl nix, was dem zu 100% entspricht. Musst du entweder selbst nachbaun oder du versuchst es mit std::string
Soweit ich weiß, besteht ein AnsiString aus jeweils einem Dword für den Referencecounter und die Länge und aus einem null-terminiertem Char-Array.
Eine AnsiString-Variable zeigt allerdings nicht auf solch eine Struktur, sondern direkt auf das Array, wobei die beiden anderen Members über ein negatives Offset angesprochen werden. Heißt es lässt sich wie ein normales Char-Array bzw. wie einen Pointer auf einen null-terminierten String benutzen.
Code:
const char *Packet = "say test";
MOV EDX,Packet
kann schlecht funktionieren, da EDX ' yas' als Wert erhält.
Wieso genau benötigst du denn einen AnsiString? Anscheinend übergibst du doch lediglich einen normalen null-terminierten String. Oder erwartet die Funktion tatsächlich einen AnsiString? Statt des .c_str() würde auch ein mov edx,offset Packet bzw. lea edx,[Packet] reichen.
Edit:
Btw. es gibt keine x86/x64 Calling Convention von MS, die EAX für Parameter verwendet. Von Borland gibt es register, die EAX, EDX und ECX verwendet und standardmäßig in Delphi benutzt wird. Das Pendant dazu in Borland C++ wird wohl fastcall sein.
sowohl bei string als auch bei char* oder char[](ohne length) gibts nach der "NULL terminierung" noch irgendwelche sinnlosen werte. Bei AnsiString fällt dies weg und was dem enstpricht ist char[length].
EDIT:
habe mich wohl geirrt und die falsche dll injeziert oder so... das problem besteht immer noch und ich weiß ehrlich gesagt nicht mehr weiter und auch nicht wie ich sowas nach programmieren sollte das würde den rahmen von meinem packet logger ein wenig sprengen XD
EDIT2:
ohh man....
schon fast als ob ich hier nen protokoll halte. Ich bin ein wenig verwirrt denn das wiederspricht ja allen Regeln.
das funktioniert:
Register Hilfe pls 09/24/2011 - CrossFire - 1 Replies Hay Leute habe Da so ein Probelm Das Nervt also habe einen acc aber mein freund hatt sich Registriert und auch Aktiviert in der Email aber da steht Wenn er sich in Crossfire einloggen iwas mit Aviable in der region oder so was :( und bei mir das selbe wenn ich sein acc teste warum? wie kann er sich anmelden
[Cracking & Hooking] Suche Hilfe bei Engine von LC 05/21/2011 - Last Chaos - 13 Replies Da ich ja nun Anfangen möchte Last Chaos Tools zuschreiben (vorzugsweise mit c# oder c++ oder auch notfallsweise .net) suche ich eine hilfe die mir ggf ein wenig die Last Chaos Engine näher bringt auf gut deutsch gesagt die materie der Engine.
Gefragt sind leute wie Falo, KD, Wursti und ggf andere.
Da die Aktive & Erfahrene Scripter/Progger ein wenig die Lust verloren haben bzw auch keine Zeit mehr haben möchte ich gerne anbieten sofern wie möglich die Aufgaben zu übernehmen zumindestens...
[HILFE]HP Register... 06/30/2010 - Metin2 Private Server - 1 Replies Hallo,
ich habe eine Homepage aber indiese will ich mein Register Script rein machen ...
aber es geht nicht so ganz..
kann mir einer Helfen via Teamviewer?
lg Marci
SW-sro register hilfe!!! 02/19/2010 - SRO Private Server - 1 Replies könnte mir jemand ein kleines tut zeigen. .
kann mich auf der seite nicht registrieren . ist voll schwer!
Ressourcen Tool überschreibt andere Datein. 12/31/2009 - S4 League - 6 Replies Ich hab seit kurzem erst, dass das Ressourcen Tool anderen Datein überschreibt, als die die er sollte.
z.B:
Ich expotiere die Datei default_item.x4 und änder dort die Werte.
Nun impotiere ich die Datei wieder.
Jetzt expotiere ich die Item_info.x4 Datei und veränder etwas, speicher sie ab und impotiere sie.
Wenn ich nun S4 starte, bleibt es beim Laden hängen und wird beendet.
Nun öffne ich wieder das Ressourcen Tool und expotiere z.B default_item.x4 und öffne sie.