¿Cómo interceptar paquetes de juegos?
Primero guardamos los paquetes interceptados por WPE como un archivo de texto y luego lo abrimos. En este momento veremos los siguientes datos (aquí tomamos como ejemplo los datos enviados por el cliente PK clerk en Jin Yong's Heroes Club):
Primer archivo: SEND- gt; 7E 6B E4 17 13 13 12 13 12 13 67 1b enviar->0010 17 12 DD 34 12 12 12 17 12 0E 12 12 12 12 12 12 9BSEND->0000 E6 56 1E f 1 29 06 17 2 3B 0E 17 1a enviar->0000 E6 56 1B C0 68 12 12 12 5a enviar->0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 enviar->0000 E6 56 17 C9 12
< P> Segundo archivo: Enviar-GT; 0000 83 33 68 47 1B 0E 81 76 76 76 76 76 76 02 7 EST-> 0010 77 07 1c 77 77 77 77 72 77 77 6 dssend-> 0000 83 33 7B 94 4C 6 3 72 77 5E 6B 72 F3 enviar->0000 83 33 7E A5 21 77 77 3f enviar->0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 enviar->000 0 83 33 72 AC 77Descubrimos que el formato de datos de los dos propietarios de la tienda PK es el mismo, pero el contenido es diferente. Somos NPC de PK. ¿Por qué es diferente? Resulta que los paquetes de datos transmitidos por Jin Yong están cifrados antes de transmitirse a través de la red, por lo que el problema que enfrentamos es cómo descifrar el texto cifrado en texto sin formato y luego analizarlo.
Debido a que el cifrado general de paquetes de datos es una operación XOR, primero hablemos de qué es XOR. En pocas palabras, XOR significa "lo mismo es 0, la diferencia es 1" (esto es para bits binarios). Por ejemplo, 0001 y 0010 son XOR. Los comparamos bit a bit. El resultado XOR es 0011. El método de cálculo es: 0065438. Entonces, el cuarto dígito del resultado XOR es 0, 0, el tercer dígito de 0001 es 0, 0 y el tercer dígito de 0010 es 0. Según el principio de "lo mismo es 0, diferente es 1", el tercero dígito del resultado XOR El bit es 0, 0010. El 1 bit de 0001 es 1 y el 1 bit de 0010 es 0, por lo que el 1 bit del resultado XOR es 1, que es 0011. Encontrará muchas operaciones XOR en el futuro, por lo que puede familiarizarse con ellas primero, lo que será muy útil para el análisis.
Sigamos mirando los dos archivos anteriores. Según el sentido común, no todos los datos del paquete de datos serán valiosos. Cuando se desarrolle el juego, se reservará algo de espacio en bytes para futuras expansiones, lo que significa que habrá algunos "00" bytes en el paquete de datos. Al observar el archivo anterior, encontrará que hay muchos "12" en la primera marcha y muchos "77" en la segunda. ¿Significa esto que estamos hablando de "00"? Con el razonamiento aquí, ¡comencemos a actuar!
Hacemos XOR el primer archivo con "12" y el segundo archivo con "77". Por supuesto, el cálculo manual es problemático. Es mucho más conveniente para nosotros utilizar la "Herramienta de análisis de paquetes cifrados M2M 1.0" para calcular.
Obtenga los siguientes resultados:
Primer archivo: 1 envío->0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 envío->0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 00 892Enviar->0000 F4 44 0C E3 3B 13 05 00 29 1C 05 083Enviar->0000 F4 44 09 D2 7A 00 00 00 484Enviar->0000 F4 44 10 DA 0 1DB 6C 9 F6 05 02 27 35 01 00 005 Enviar -> 0000 F4 44 05 dB 00
Segundo archivo: 1 Enviar -> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 enviar->0010 05 00 70 6B 00 00 00 00 00 05 00 05 00 00 00 1 a2 enviar->0000 F4 44 0C E3 3B 13 05 00 29 1C 05 843 enviar->0000 F4 44 09 D2 56 00 00 00 484 enviado -> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 005 enviado -> 0000 F4 44 05 dB 00
Ha, dos documentos La mayoría son iguales, lo que significa que nuestro razonamiento es correcto. ¡Texto plano que necesitamos!
El siguiente paso es descubrir el significado de algunas palabras clave, lo que requiere interceptar una gran cantidad de datos para su análisis.
En primer lugar, encontraremos que cada paquete comienza con "F4 44" y el tercer byte cambia, pero los cambios son muy regulares. Echemos un vistazo al largo de cada bolsa. ¿Encontraste algo? Por cierto, ¡el tercer byte es la longitud del paquete! Al interceptar una gran cantidad de paquetes de datos, determinamos que el cuarto byte representa una instrucción, es decir, el cliente le dice al servidor qué hacer. Por ejemplo, el comando de combate solicitado al servidor es "30" y el comando de movimiento en combate es "D4". A continuación, debemos analizar el primer paquete "F4 44 65438 f 0306 c 79 f 605 01 01 0001 75 09 0500 CF 26 00000000 005 000 1 000 0000089". Debería haber un NPC que notifique al servidor sobre su PK, así que primero averigüemos dónde está el código del empleado. PKemos otro perro perdido (el que está afuera de Dali Inn): SEND- gt; 0000 F4 44 1F 30 D4 75 F6 05 01 00 01 00 01 00 01 75 09 send->; Los tipos de NPC en el juego no excederán los 65535 (FFFF), pero no se limitarán a palabras durante el desarrollo, lo que no favorece la expansión del juego, por lo que usaremos palabras dobles para verlo. Al comparar las dos bolsas "Staff" y "Small Potato", la atención se centra en "6C 79 F6 05" y "CF 26 00 00". (Es más fácil, pero no demasiado lento, jaja) Echemos un vistazo al embalaje de atrás. En los paquetes posteriores, debería haber códigos NPC, como los paquetes móviles. El juego permite ver el juego, por lo que el servidor debe conocer las coordenadas móviles del NPC y transmitirlas a otros jugadores que estén viendo el juego.
En la parte posterior del cuarto paquete "Enviar->0000 F4 44 10DA 01DB 6C 79 F6 05 02 27 35 010000" vimos "6C 79 F6 05" nuevamente, lo que inicialmente concluimos que era el nombre en clave del barman. (Este análisis implica mucho trabajo. Puede utilizar WPE para interceptar los datos y analizarlos usted mismo).
El análisis del primer paquete se coloca aquí temporalmente (no es necesario que comprendamos completamente la información). adentro todavía)
p>
Echemos un vistazo al cuarto paquete "SEND- gt; 0000 f44 10da 01 db 6 c 79 f 605027 35 010000", y luego interceptemos el PK del perro amarillo. paquete. (Saldrá el segundo perro). Mire el formato del paquete: SEND- gt; 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 send->; 00
Según el análisis anterior, el código del perro amarillo es "4 b 7 df 605" (100040011), pero ¿cómo distinguir los dos servidores del perro amarillo? Mire "eb03f 805" (100140011), que es el último código más 100000, jaja, para que el servidor pueda reconocer dos perros amarillos. Confirmaremos que este es efectivamente el caso de los paquetes interceptados por el enemigo en estado salvaje.
Entonces, el formato de este paquete debe ser claro: el tercer byte es la longitud del paquete, "DA" es el comando y el quinto byte es el número de NPC. Los 10 bytes que comienzan desde el séptimo byte representan información sobre un NPC, y un NPC más significa 10 bytes.
Si has jugado a Wangjin, debes saber que a veces aparecen refuerzos cuando te encuentras con enemigos de forma aleatoria. Aprovechemos esta mejora del juego y dejemos que aparezcan NPC mejorados en cada batalla.
A través de los paquetes de datos interceptados por los refuerzos durante la batalla, encontraremos que el servidor envió dicho paquete de datos: F4 44 12 e 9 b 03 f 805 02 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (aquí simplemente tomamos el código del perro amarillo como ejemplo). Entonces, ¡utilicemos tecnología de proxy independiente para engañar al cliente y al servidor!
Bien, la mitad del trabajo de llamar al NPC está hecho. Lo siguiente, cómo modificar y enviar paquetes de datos, lo continuaremos explicando en la siguiente sección.