Probleme bei Dll Datei
-
Tag an alle ich hab heute ein Tutorial gefunden um in C++ einen simplen Gamehack zu schreiben ,habe mir also als erstes die Adressen/ Offsets mit Ce gesucht ( sind auch 100% die richtigen da sie nach mehrfachem Neustart des Spieles auch noch funktionieren.
Nun wollte ich eine dll Datei schreiben ,da es ja sehr nervig ist das ganze immer mit Ce zu machen .
Mein Problem ist allerdings ,dass sich bei jeder Injektion der dll ins Spiel direkt das Fenster des Spieles schließt( das liegt an keinem Schutz es ist ein ungeschützter Privat server wo man Problemlos andere dll Dateien laden kann.
Es liegt also scheinbar an einem Fehler in meiner dll ,da mir der Kompiler aber keinen Hinweis gibt wäre ich euch sehr dankbar wenn mal jmd über den Quelltext schaut und mir den Fehler evtl erläutern würde.Hier ist der Quelltext
#include <Windows.h> #include <iostream> DWORD BasePointer = 0; // Wir deklarieren den BasePointer und setzten ihm den Wert 0 #define Points 0x000005ba // Hier definieren wir unseren Offset des Pointers #define Points2 0x00000004 bool State = false; // Brauchen wir später für das einschalten und auschalten des Hacks void punkte() // unsere main funktion { if(State) { DWORD dwBasePointer = *(DWORD*)BasePointer; // Unser Pointer den wir als hilfe verwenden werden um einen Wert der Adresse hinzu zufügen if(dwBasePointer != 0) // Wenn der Pointer nicht 0 ist wird der Wert zugewiesen { DWORD &dwPoints = *(DWORD*)(dwBasePointer + Points); // Hier machen wir eine neue Variable durch den Base Pointer und denn Offset und haben somit die Pointer Adresse DWORD &dwPoints2 = *(DWORD*)(dwPoints + Points2); std::cout << dwPoints2 << std::endl; } } else // Vom State, also deaktivieren wir hier den Hack { DWORD dwBasePointer = *(DWORD*)BasePointer; // machen wieder eine neue Variable wie oben if(dwBasePointer != 0) // wenn der Pointer nicht 0 ist wird der Wert zugewiesen { DWORD &dwPoints = *(DWORD*)(dwBasePointer + Points); // wie oben definieren wir mithilfe des Pointers und Offsets die Adresse DWORD &dwPoints2 = *(DWORD*)(dwPoints + Points2 ); dwPoints2 = 0; //setzt den wert 0, also ist der Hack deaktiviert } } } DWORD WINAPI HackThread(LPVOID unused) { //---Hier wird unser BasePointer ausgerechnet ! DWORD ImageBase = (DWORD)GetModuleHandle(0); //Die Image Adresse ist in diesem fall FT_Client, holen uns also den Module Handle BasePointer = ImageBase + 0x003D0868; // Um den BasePointer zu bekommen nehmen wir die Image Adresse und unsere Modul Adresse //--------------------------------------------- for(; ;) //Eine unendliche schleife weil wir die Adresse gefreezt haben wollen ;) { punkte(); //unsere main funktion wird ausgeführt if(GetAsyncKeyState(VK_F1)&1)State =! State; // Mit F1 aktivieren und deaktivieren wir den Hack Sleep(10); } } BOOL WINAPI DllMain(HINSTANCE mod, DWORD DWORD_GRUND, LPVOID res) { switch(DWORD_GRUND) { case DLL_PROCESS_ATTACH: //Falls die dll erfolgreich injeziert wird CreateThread(0, 0, &HackThread , 0, 0, 0); // Wir erstellen den Thread in dem dann später injezierten Process break; case DLL_PROCESS_DETACH: //Falls die dll den Process nicht mehr findet MessageBoxA(0, "Not Loaded", "Info",0); //Eine Messagebox die sagt das dll nicht mehr geladen ist break; } return TRUE; }
Mir ist klar ,dass er im moment noch nicht sinnvoll ist ,aber ich wollte das ganze erstmal testen bevor ich es ausbaue.
-
Du hantierst mit irgendwelchen Offsets (z.B. 0x003D0868) und wunderst dich das es hier zu einem Absturz kommt
Ein exception handler sollte zumindest die Crashs unterdrücken.
-
1. Keine threads in DllMain erzeugen: http://msdn.microsoft.com/en-us/library/windows/hardware/gg487379.aspx
2. Mach besser ein debounce nach GetAsyncKeyState
3. Lass doch mal Stück für Stück was weg, bis es nicht mehr crasht...
-
Das kann ich jetzt so nicht rauslesen, dass man "CreateThread" nicht verwenden darf. Man darf nur keine Thread-Synchronisation machen!
-
Da ich nicht genau weiß was du da machst (oder glaubst zu machen, mit den ganzen Offsets sieht das etwas komisch aus) kann ich auch nicht sagen was falsch ist.
Schon mal mit einem Debugger (wie z.B. OllyDbg) den Prozess untersucht ?
Du kannst ja anfangs deines Threads mittels inline Assembly einen int 3-Breakpoint setzen und dann Schritt für Schritt durchgehen, vielleicht schreibst du ja doch in einen verbotenen Bereich.
-
Ich gehe mal stark davon aus, dass es in deiner Void-Funktion punkte() zum Crash kommt. Die prozentuale Wahrscheinlichkeit ist dort sehr hoch.
Ich rate dir, dass du erstmal ein paar Bücher liest, bevor du dich gleich an ein Thema wie Gamehacking heranwagst. Anhand deiner Kommentare kann man sehen, dass du nicht weißt, was du tust.
Auch wenn du das nicht hören willst, aber so wie jetzt ist das Zeitverschwendung. Im Bereich Systemprogrammierung muss man eben im Bereich des Gamehackings einiges lernen.
Das Problem hier ist, dass du nicht weißt, was du machst und viele Anleitungen fürs Gamehacking mit CE sind auch nicht gerade fachlich gut verfasst. Selbst wenn dein Code aus Zufall mal keine logischen Fehler enthält und auch keine Exception auftritt und das gewünschte Ziel erreicht ist, dann steckt dahinter doch kein eigenes Wissen. Bei logischen Fehlern / Exceptions kann dir auch der Compiler nicht helfen.
Ich weiß, dass es eine schöne Sache ist, Gamehacks zu schreiben, vor allem wenn man sieht, was man damit alles "anstellen" kann. Aber dazu ist eben auch einiges an Arbeit möglich.
Ich hoffe und wünsche dir, dass du, wenn du es wirklich gerne lernen willst, auf einen guten Weg kommst. Also bitte sieh meinen Text nicht als Angriff, sondern als einen guten Rat, der dir helfen soll.
-
Aber dazu ist eben auch einiges an Arbeit möglich
Ich meinte natürlich nötig.
-
sobittenicht schrieb:
Ich gehe mal stark davon aus, dass es in deiner Void-Funktion punkte() zum Crash kommt. Die prozentuale Wahrscheinlichkeit ist dort sehr hoch.
Ich rate dir, dass du erstmal ein paar Bücher liest, bevor du dich gleich an ein Thema wie Gamehacking heranwagst. Anhand deiner Kommentare kann man sehen, dass du nicht weißt, was du tust.
Auch wenn du das nicht hören willst, aber so wie jetzt ist das Zeitverschwendung. Im Bereich Systemprogrammierung muss man eben im Bereich des Gamehackings einiges lernen.
Das Problem hier ist, dass du nicht weißt, was du machst und viele Anleitungen fürs Gamehacking mit CE sind auch nicht gerade fachlich gut verfasst. Selbst wenn dein Code aus Zufall mal keine logischen Fehler enthält und auch keine Exception auftritt und das gewünschte Ziel erreicht ist, dann steckt dahinter doch kein eigenes Wissen. Bei logischen Fehlern / Exceptions kann dir auch der Compiler nicht helfen.
Ich weiß, dass es eine schöne Sache ist, Gamehacks zu schreiben, vor allem wenn man sieht, was man damit alles "anstellen" kann. Aber dazu ist eben auch einiges an Arbeit möglich.
Ich hoffe und wünsche dir, dass du, wenn du es wirklich gerne lernen willst, auf einen guten Weg kommst. Also bitte sieh meinen Text nicht als Angriff, sondern als einen guten Rat, der dir helfen soll.
Danke für deine Hilfe ich weiß selbst ,dass sowas eigentlich weniger für mich geignet ist ,da ich noch nicht soweit bin
es wäre dennoch schön gewesen sowas mal erschaffen zu haben ,aber ich merke schon dass du auf jedenfall Recht hast.
Nochmal zur erklärung ich hatte mit Ce die Adresse der Geschwindigkeit eines Spieles gefunden.Habe diese bis zum Ende verfolgt ,bis dann dort "Metin2.exe"+0x003D0868 herauskahm.Die Offsets um zu dieser "EndAdresse" zu gelangen waren 5ba und 4 . Aus diesem Grund habe ich versucht mittels Getmudulehandle im Falle einer Erfolgreichen Injektion die Image Base Adresse des Spieles auszulesen.Auf diese addierte ich nun die Modul Adresse 0x003D0868 . Daraufhin musste ich laut Turial die Offsets noch durch die Pointer meine Offsets 5ba und 4 hinaufaddieren. Leider ist das ganze wie du schon sagtest schlecht erklärt ,und das lustigste die Kommentare stammen alle nicht von mir ich habe sie zur Hilfe dran gelassen alle sind vom Autor des Threads sprich ich bekomme auch noch das falsche beigebracht dadurch
Kann mir jmd von euch denn ein gutes Internet Tutorial zur WinApi ( am besten in verbindung mit C++ wenn es sowas gibt )nennen am besten eins was bei der WinApi zumindest von 0 anfängt?
-
Hi.
Es gibt nicht "ein Buch" für die WinAPI. Die WinAPI ist die Schnittstelle zwischen dem Betriebssystem und der Anwendersoftware (Code, der im Ring3 läuft).
Das heißt, dass es darauf ankommt, was du machen willst. Die WinAPI ist aufgrund ihrer Aufgabenstellung einfach zu komplex, zu umfangreich und daher in unterschiedliche Kontexte geordnet.In deinem Fall möchtest du gerne Process Handling betreiben. In dem Fall gibt es eine Übersicht zu den Process and Thread Functions auf MSDN.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684320(v=vs.85).aspx
In jedem Fall empfehle ich dir entsprechende Literatur, das hilft nämlich am meisten. So bekommst du die bestmöglichste Erklärung, wenn du es dir selbst beibringen willst. Fragen kannst du ja dann immernoch hier im Forum, wenn etwas unklar sein sollte.
Ich selbst besitze z.B. einige Bücher, mit denen ich einiges gelernt habe, aber auch das Internet spielt eine tragende Rolle (MSDN, Foren, Papers, andere Coder...).
Die Bücher, die ich habe, handeln über allgemeine Informatikgrundlagen (technische-, praktische-, theoretische- und angewandte Informatik), Assembler Programmierung, C++, Reverse Engineering (Linux). Außerdem habe ich noch ein Buch über Delphi Programmierung.
Und da hat man dann einiges zu lesen.^^
Fazit: Wenn du es wirklich gerne lernen willst und die nötige Gedult aufbringen kannst, dann empfehle ich dir Bücher zu kaufen. Eventuell auch mal andere Fragen, welche Bücher zu empfehlen sind bzw. auf Amazon Kundenrezensionen lesen etc.
Wie gesagt, Gamehacking ist Kunst, und die ist relativ schwer bzw. aufwendig zu lernen, aber dann.... kann man sich kreativ entfalten.
Jedenfalls wünsche ich dir viel Erfolg.
MfG