1. Actionstil, der sogenannte Action-Stil bezieht sich auf die Verwendung der API, um Befehle an Windows oder APIs zu senden, um die Maus, die Tastatur usw. zu steuern, damit die Charaktere im Spiel bewegt oder angegriffen werden können. Plug-In "Stein". (Diese Art von Plug-In ist völlig Müll, TMD, jeder, der ein bisschen API kennt Verbessere deine Moral ^_ ^)
2. Lokaler Modifikationsstil. Dieses Plug-In unterscheidet sich nicht von einigen herkömmlichen Spielmodifikationen. -in "留" Die Schwierigkeit, die Methode zu schreiben, besteht darin, die Adresscodes zu finden. (Diese Art von Plug-In ist etwas schwieriger als das vorherige, aber es ist auch schwierig, dieses Plug-in zu verwenden. Dieses Plug-In kann Ihr Verständnis und Ihre Anwendung von Speicheradressen schnell verbessern. Dinge zur Verbesserung der Programmierungstechnologie)
3. Trojaner Stil. Um darüber zu sprechen ~~). an die angegebene E -Mail -Adresse. (Ich habe so etwas schon einmal geschrieben, aber ich habe es nie benutzt. Ich weiß, dass dieses Ding sehr unmoralisch ist, also benutze es in Zukunft nicht! ~~)
4. Beschleunigungstyp, dieses Plug-In kann das Spiel beschleunigen ... (Es tut mir leid, ich habe so etwas nicht getan, also kann ich mich nicht selbst kommentieren, ich schäme mich ~~).
5. Paketstil, dieses Plug-In ist ein Plug-In mit hoher Anklage und erfordert starke Programmierkenntnisse. Sein Prinzip ist es, das Paket zuerst abzufangen, es zu modifizieren und dann weiterzuleiten (Kao, es ist einfach zu sagen, Sie können es versuchen ~~~~). Dieses Plug-In ist für die meisten Online-Spiele geeignet und einige Online-Spiele sind auf diese Weise geschrieben.
Unter diesen Plug-Ins können die ersten drei einfach mit Sprachen wie VB und Deleps implementiert werden, während die beiden letztgenannten mit Programmierwerkzeugen wie VC problemlos implementiert werden müssen. (PH, bitte hören Sie sich die nächste Aufschlüsselung an)
(Ich bin ein Programmbegeisterter und kein professionelles Plug-In. Bitte verzeihen Sie mir, ob es unangemessenen Artikel gibt. In zukünftigen Artikeln werde ich den Schreibprozess der Aktion, die lokale Änderung, den Trojaner und den Paketstil ausführen. Detaillierte Erklärung )
Das Action-Plug-In analysiert das letzte Mal das einfachste Plug-In.
Soweit ich weiß, ist die typischste Anwendung lokaler modifizierter Plug-Ins im "Elf" -Spiel, da ich vor fast einem Jahr war (der "Elf" befindet sich noch in der Testphase) und viele Kollegen in meiner Firma "Elf" gespielt, also habe ich mir die Datenverarbeitungsmethode des Spiels angesehen und festgestellt, dass die Informationen, die sie dem Server gesendet haben Eine eigenständige Version des Spiels. Die Adresse nach meiner Idee und lassen Sie es das System automatisch einreichen, und es war in der Tat erfolgreich. Sprechen Sie hier Nonsense ~~~~, ok, schauen wir uns an, wie diese Art von Plug-In aus:
Bevor wir Plug-in machen, müssen wir hier ein spezifisches Verständnis des Windows-Speichers haben. Gleiche. Speicheradressen):
1. Zunächst müssen wir FindWindow verwenden, um den Griff des Spielsfensters zu kennen, da wir die ID des Prozesses nach dem Laufen des Spiels kennen müssen.
Hwnd FindWindow (
LPCTSTR LPCASSNAME, // ZIGER ZEICHEN AUF Klassenname
LPCTSTR LPWindowname // Zeiger auf den Fensternamen
);
2. Wir sind GetwindowThreadProcessid, um die Prozess -ID des entsprechenden Prozesses des Spielsfensters zu erhalten.
DWORD GetWindowthreadProcessid (
Hwnd hwnd, // Handle des Fensters
LPDWORD LPDWPROCESID // Variablenadresse für Prozesskennung
);
3. Nach dem Erhalt der Spiele -Prozess -ID wird der Prozess als nächstes mit den höchsten Berechtigungen geöffnet.
OpenProcess handeln (
DWORD DWDEDEDECACCESS, // Zugriffsflagge
Bool BinheritHandle, // Vererbungsflagge
DWORD DWPROCESSID // Prozesskennung
);
Wenn DWDesiedAccess der Ort ist, an dem Zugangsmethoden festgelegt sind, können wir viele Berechtigungen festlegen.
4. Nach dem Öffnen des Prozesses können wir Funktionen zum Speichern verwenden. Schauen wir uns die Verwendung von WriteProcessMemory an:
Bool writeProcessmemory (
Hope
Lpvoid lpbaseaddress, // Adresse, um zu schreiben
Lpvoid lpBuffer, // Zeiger auf Puffer, um Daten zu schreiben
DWORD NSIZE, // Anzahl der zu schreiben
LPDWORD LPNUMBEROFBYTESWRITTEN // Tatsächliche Anzahl der geschriebenen Bytes
);
5. Das Folgende ist, den Prozessgriff mit nahem Handle zu schließen und es ist abgeschlossen.
Dies ist die Methode zur Implementierung des Programms dieser Art von Game-Plug-In. Von XX -Spielen untersuchen wir den Code gemäß der obigen Methode:
Const
ResourceOffSet: DWORD = $ 004219F4;
Ressource: DWORD = 3113226621;
ResourceOffset1: DWORD = $ 004219F8;
Ressource1: DWORD = 1940000000;
ResourceOffset2: DWORD = $ 0043FA50;
Ressource2: DWORD = 1280185;
ResourceOffset3: DWORD = $ 0043FA54;
Ressource3: DWORD = 3163064576;
ResourceOffset4: DWORD = $ 0043FA58;
Resource4: DWORD = 2298478592;
var
HW: Hwnd;
PID: DWORD;
H: Thandle;
TT: Kardinal;
Beginnen
hw: = findWindow ('' xx '', nil);
Wenn hw = 0 dann
Ausfahrt;
GetWindowThreadProcessid (HW, @PID);
H: = openProcess (process_all_access, false, pid);
Wenn H = 0 dann
Ausfahrt;
Wenn Flatcheckbox1.Conted = true dann
Beginnen
WriteProcessMemory (H, Zeiger (ResourceOffset), @Resource, sizeof (Ressource), TT);
WriteProcessMemory (H, Zeiger (ResourceOffset1), @Resource1, sizeof (Ressourcen1), TT);
Ende;
Wenn Flatcheckbox2.Checked = true dann
Beginnen
WriteProcessMemory (H, Zeiger (ResourceOffset2), @Resource2, sizeof (Resource2), TT);
WriteProcessMemory (H, Zeiger (ResourceOffset3), @Resource3, sizeof (Resource3), TT);
WriteProcessMemory (H, Zeiger (ResourceOffset4), @Resource4, sizeof (Resource4), TT);
Ende;
MessageBeep (0);
Nahhandle (h);
schließen;
In diesem Spiel werden mehrere Adressen verwendet, um die zu übermittelten Daten zu überprüfen. Daher ist es nicht schwierig, Plug-Ins dieser Art von Spiel zu erstellen, und das Schwierigste ist, diese Adressen zu finden.
(Sie haben die Methode bereits klar gesehen, und die spezifische Praxis hängt von allen ab. Arten von Plug-Ins in zukünftigen Artikeln.
Das letzte Mal habe ich eine allgemeine Zusammenfassung der fünf Arten von Plug-Ins erstellt
Lassen Sie uns zunächst über Plug-Ins im Action-Stil sprechen, das auch die einfachste ist, die ich beim ersten Schreiben von Plug-Ins getan habe.
Ich erinnere mich, als ich noch in der "Stein" -Ara war, sah ich, dass jemand anderes eine Software (Plug-In) hatte und die Leute herumwandern (ich wusste nicht, was das Plug-In zu diesem Zeitpunkt vor sich ging^_^ ), also fand ich diese Art von Software hierher, um zu studieren (ich hörte, wie andere es Plug-In nennen, nachdem ich sie genommen habe) und stellte fest, dass so etwas nicht schwierig ist, dass das Gehen des Charakters nichts mehr ist Als ich an verschiedenen Stellen auf die Maus klickte.
1. Zunächst müssen wir die aktuelle Mausposition kennen (um die aktuelle Mausposition wiederherzustellen), damit wir die API -Funktion getCursorpos verwenden müssen, die wie folgt verwendet wird:
Bool getCursorpos (
LPIN -LPINT // Adresse der Struktur für den Cursorposition
);
2. Wenn wir die Maussposition an den Ort verschieben, an dem der Charakter wird, müssen wir die SetCursorpos -Funktion verwenden, um die Maussposition zu bewegen.
Bool setCursorpos (
int x, // horizontale Position
int y // vertikale Position
);
3. Simulieren Sie die Maus, um die Aktion zu drücken und zu veröffentlichen.
Void maus_event (
DWORD -DWFLAGs, // Flags geben verschiedene Bewegungen an/klicken Sie auf Varianten klicken
DWORD DX, // Horizontale Mausposition oder Positionsänderung
DWORD DY, // vertikale Mausposition oder Positionsänderung
DWORD DWDATA, // Menge der Radbewegung
DWORD DWEXTRAINFO // 32 BIT anwendungsdefinierte Informationen
);
In seinen DWFLAGs gibt es viele verfügbare Ereignisse wie das Verschieben von MouseeEventf_Move.
Okay, mit dem Vorwissen können wir sehen, wie die Charakterentfernung implementiert wird:
getCursorpos (Punkt);
SetCursorpos (Ranpoint (80, WindowX), Ranpoint (80, Fenster)); // Ranpoint ist eine hausgemachte zufällige Koordinatenfunktion
MOuse_Event (MouseEventf_Leftdown, 0,0,0,0);
MOuse_Event (MouseEventf_Leftup, 0,0,0,0);
setCursorpos (point.x, point.y);
Denken Sie nach dem Lesen des obigen Codes, denken Sie, dass das Wandern der Charaktere sehr einfach ist? ~ Ich kann eine zeichnen und drei nachahmen, und es gibt viele gute Dinge, die mit dieser Technik implementiert werden können (ich habe vor langer Zeit gesagt, TMD, diese ist eine Müll-Plug-in-Methode, glauben Sie es ~~~), als nächstes schauen wir uns die automatische Angriffsmethode im Spiel an (muss Verknüpfungsschlüsse für Angriffe im Spiel unterstützen). Die Verwendung von API ist anders ~~~~. Diesmal ist das, was wir verwenden möchten, die Funktion keybd_event, die wie folgt verwendet wird:
Void keybd_event (
Byte BVK, // Code virtueller Key
Byte Bscan, // Hardware -Scancode
DWORD -DWFLAGs, // Flags geben verschiedene Funktionsoptionen an
DWORD DWEXTRAINFO // Zusätzliche Daten, die mit dem Tastenanschlag verknüpft sind
);
Wir müssen auch wissen, dass der Scan -Code nicht direkt verwendet werden kann.
Uint MapVirtualKey (
Uint Ucode, // virtueller Key-Code oder Scancode
Uint Umaptype // Übersetzung zur Ausführung
);
Okay, sagen wir, dass dieser Schnellbetriebsschlüssel Strg+A ist.
KeyBD_Event (vk_control, mapvirtualKey (vk_control, 0), 0,0);
keyBd_event (65, mapvirtualKey (65,0), 0,0);
keyBd_event (65, mapvirtualKey (65,0), keyEventf_keyup, 0);
KeyBD_Event (vk_control, mapvirtualKey (vk_control, 0), keyEventf_keyup, 0);
Drücken Sie zunächst die Simulation in der Simulation, dann die A -Taste und geben Sie dann die Taste frei und lassen Sie schließlich die STRG -Taste frei.
(Wenn ich hier sehe, habe ich fast ein gewisses Verständnis für einfache Plug-Ins ~~~~, versuchen wir es? Wenn Sie etwas Besseres bekommen können, wenn Sie ein oder drei zeichnen, hängt dies von Ihrer Fähigkeit ab, es zu verstehen. ~~, aber aber Sei nicht zu früh glücklich.