1. Estilo de acción, el llamado estilo de acción se refiere a usar la API para enviar comandos a Windows o API para controlar el mouse, el teclado, etc., para que los personajes del juego puedan moverse o atacar. Plug-in "Stone". (Este tipo de complemento es completamente basura, TMD, cualquiera que sepa un poco de API sabe qué hacer, pero este complemento también es algo bueno de nivel de entrada. Aunque no puede mejorar su efectividad de combate, puede Mejora tu moral ^_ ^)
2. Estilo de modificación local. -En "留" La dificultad de escribir el método es encontrar los códigos de dirección. (Este tipo de complemento es un poco más difícil que el anterior, pero también es difícil usar este complemento ~~ Este complemento puede mejorar rápidamente su comprensión y aplicación de direcciones de memoria. Es bueno que sea bueno. cosas para mejorar la tecnología de programación)
3. Estilo troyano. Para hablar de ello ~~). a la dirección de correo electrónico especificada. (He escrito algo como esto antes, pero nunca lo he usado. Sé que esto es muy inmoral, ¡así que no lo uses en el futuro! ~~)
4. Tipo de aceleración, este complemento puede acelerar el juego ... (Lo siento, en realidad no he hecho este tipo de cosas, así que no puedo comentar sobre mí mismo, me da vergüenza ~~)
5. Estilo de paquetes, este complemento es un complemento de alta dificultad y requiere fuertes habilidades de programación para escribir. Su principio es interceptar el paquete primero, modificarlo y luego reenviarlo (kao, es fácil de decir, puede probarlo ~~~~). Este complemento es adecuado para la mayoría de los juegos en línea.
Entre estos complementos, los tres primeros se pueden implementar fácilmente utilizando lenguajes como VB y DelEPS, mientras que los dos últimos deben implementarse fácilmente utilizando herramientas de programación como VC. (Ph, por favor escuche el próximo desglose)
(Soy un entusiasta del programa y no un complemento profesional, así que, por favor, perdóname si hay algún artículo inapropiado. En futuros artículos, haré el proceso de acción de escritura, modificación local, troyano y estilo paquetes. Explicación detallada )
La última vez que analizamos el complemento de acción.
Hasta donde yo sé, la aplicación más típica de los complementos modificados locales está en el juego "elf", porque hace casi un año (el "elfo" todavía está en la etapa de prueba), y muchos colegas en mi compañía Jugué "Elf", así que observé el método de procesamiento de datos del juego y descubrí que la información que envió al servidor existe en la memoria (mi primer sentimiento después de leerlo es: no hay mucha diferencia entre modificar este tipo de juego y modificar Una versión independiente del juego. La dirección de acuerdo con mi idea y deja que el sistema lo envíe automáticamente, y de hecho fue exitoso. Habla sin sentido aquí ~~~~, OK, echemos un vistazo a cómo está hecho este tipo de complemento:
Antes de hacer un complemento, necesitamos tener una comprensión específica de la memoria de Windows. Lo mismo. direcciones de memoria):
1. En primer lugar, debemos usar FindWindow para conocer el mango de la ventana del juego, porque necesitamos saber la identificación del proceso después de que el juego se ejecute.
Hwnd findwindow (
LPCTSTR LPClassName, // puntero al nombre de la clase
Lpctstr lpwindowname // puntero al nombre de la ventana
);
2. GetWindowThreadProcessid para obtener el ID de proceso del proceso correspondiente de la ventana del juego.
Dword getwindowthreadprocessid (
Hwnd hwnd, // mango de la ventana
LPDWORD LPDWPROCESSID // Dirección de variable para el identificador de procesos
);
3. Después de obtener la identificación del proceso del juego, lo siguiente es abrir el proceso con los permisos más altos.
Manejar OpenProcess (
DWord dwDesiredAccess, // Bandera de acceso
Bool binherithandle, // manejar bandera de herencia
DWord dwprocessid // Identificador de procesos
);
Donde DwDesiredAss es el lugar donde se establecen los métodos de acceso, puede establecer muchos permisos.
4. Después de abrir el proceso, podemos usar funciones para operar en la memoria. , echemos un vistazo al uso de WriteProcessMemory:
Bool writeProcessMemory (
Manejar hprocess, // manejo para procesar cuya memoria está escrita para
LPVOID LPBASEADDRESS, // Dirección para comenzar a escribir para
Lpvoid lpbuffer, // puntero a buffer para escribir datos a
DWord nsize, // número de bytes para escribir
LPDWORD LPNumberOfByTesWritten // Número real de bytes escritos
);
5. Lo siguiente es cerrar el mango del proceso con CloseHandle y se completa.
Este es el método para implementar el programa de este tipo de complemento de juego. de los juegos xx estudiemos el código de acuerdo con el método anterior:
estúpido
ResourceOffset: dword = $ 004219f4;
recurso: dword = 3113226621;
ResourceOffSet1: dword = $ 004219f8;
Resource1: DWord = 1940000000;
ResourceOffSet2: dword = $ 0043fa50;
recursos2: dword = 1280185;
ResourceOffSet3: dword = $ 0043fa54;
recursos3: dword = 3163064576;
ResourceOffSet4: dword = $ 0043fa58;
recurso4: dword = 2298478592;
varilla
HW: HWND;
PID: DWORD;
H: Thandle;
TT: Cardinal;
Comenzar
hw: = findwindow ('' xx '', nil);
Si hw = 0 entonces
Salida;
GetWindowThreadProcessid (hw, @pid);
H: = OpenProcess (process_all_access, falso, pid);
Si h = 0 entonces
Salida;
Si Flatcheckbox1.Checked = True entonces
Comenzar
WriteProCessMemory (H, Pointer (ResourceOffset), @Resource, Sizeof (recurso), TT);
WriteProCessMemory (H, Pointer (ResourceOffset1), @Resource1, Sizeof (Resource1), TT);
fin;
Si Fleatcheckbox2.Checked = True entonces
Comenzar
WriteProCessMemory (H, Pointer (ResourceOffset2), @Resource2, Sizeof (Resource2), TT);
WriteProCessMemory (H, Pointer (ResourceOffset3), @Resource3, Sizeof (Resource3), TT);
WriteProCessMemory (H, Pointer (ResourceOffset4), @Resource4, Sizeof (Resource4), TT);
fin;
MessageBeep (0);
CloseHandle (H);
cerca;
Este juego utiliza múltiples direcciones para verificar los datos que se enviarán, por lo que no es difícil crear complementos de este tipo de juego, y lo más difícil es encontrar estas direcciones.
(Ya ha visto el método claramente, y la práctica específica depende de todos. Jaja ~~~~~~~, pero no seas demasiado feliz demasiado temprano. Este tipo de juego en línea representa una minoría, por lo que usaré otros Tipos de complementos en futuros artículos.
La última vez que hice un resumen general de los cinco tipos de complementos.
En primer lugar, hablemos de complementos de estilo de acción, que también es el más fácil que hice cuando escribí complementos por primera vez.
Recuerdo que cuando todavía estaba en la era de "piedra", vi a alguien más teniendo un software (complemento) y la gente podía deambular (no sabía lo que el complemento estaba pasando en ese momento^_^ ), entonces descubrí que este tipo de software viene a estudiar (escuché que otros lo llamarán después de tomarlo), y descubrí que este tipo de cosas no es difícil de implementar. que hacer clic en el mouse en diferentes lugares.
1. En primer lugar, necesitamos conocer la posición actual del mouse (para restaurar la posición actual del mouse), por lo que necesitamos usar la función API GetCursorPos, que se usa de la siguiente manera:
Bool getcursorpos (
LPPOINT LPPOINT // Dirección de estructura para la posición del cursor
);
2. Cuando movemos la posición del mouse al lugar donde va el personaje, necesitamos usar la función SetCursorpos para mover la posición del mouse.
Bool setcursorpos (
int x, // posición horizontal
int y // posición vertical
);
3. Simule el mouse para presionar y liberar la acción.
Nulo mouse_event (
DWORD DWFLAGS, // FLAGS especificando varias variantes de movimiento/clic
DWORD DX, // Cambio de posición o posición del mouse horizontal
DWORD DY, // Cambio de posición o posición vertical del mouse
Dword dwdata, // cantidad de movimiento de la rueda
DWORD DWEXTRAINFO // 32 bits de información definida por la aplicación
);
En sus DWFLAGS, hay muchos eventos disponibles, como MouseEventF_Move, presione MouseEventF_Leftdown con el botón izquierdo, suelte mouseEventf_leftup con el botón izquierdo.
De acuerdo, con el conocimiento anterior, podemos ver cómo se implementa la eliminación de personajes:
getCursorpos (punto);
setCursorpos (RanPoint (80, WindowX), RanPoint (80, Windowy)); // RanPoint es una función de coordenada aleatoria casera
mouse_event (mouseEventf_leftdown, 0,0,0,0);
mouse_event (mouseeventf_leftup, 0,0,0,0);
setCursorpos (Point.x, Point.y);
Después de leer el código anterior, ¿crees que el vagabundo de los personajes es muy simple? ~, Puedo dibujar uno e imitar tres, y hay muchas cosas buenas que se pueden implementar utilizando esta técnica (he dicho hace mucho tiempo, tmd, esto es un método de complemento de basura, lo creas ~~~), a continuación, echemos un vistazo al método de ataque automático en el juego (debe soportar las claves de atases para los ataques en el juego). La API utilizada es diferente ~~~~, esta vez lo que queremos usar es la función KeyBD_Event, que se usa de la siguiente manera:
Void keybd_event (
Byte bvk, // código de tecla virtual
Byte bscan, // código de escaneo de hardware
DWORD DWFLAGS, // FLAGS especificando varias opciones de función
DWORD DWEXTRAINFO // Datos adicionales asociados con KeyStroke
);
También debemos saber que el código de escaneo no se puede usar directamente.
Uint mapvirtualkey (
Uint UCode, // código de tecla virtual o código de escaneo
Uint umaptype // traducción para realizar
);
Bien, digamos que esta clave de conexión rápida es Ctrl+A.
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);
Primero, presione la tecla CTRL en simulación, luego presione la tecla A, luego suelte la tecla A y finalmente suelte la tecla CTRL.
(Al ver aquí, casi tengo una cierta comprensión de los complementos simples ~~~~ Vamos a intentarlo? Si puede obtener algo mejor si dibuja uno o tres, depende de su capacidad para comprenderlo. ~~, pero No seas feliz demasiado temprano.