Cómo interceptar datos de QQ especificado
En primer lugar, necesita instalar una VPC para poder ejecutar la versión para PC de QQ. En segundo lugar, debe tener los permisos del usuario root de su máquina.
Luego, inicia la VPC, pero tenga cuidado de no iniciar sesión en QQ primero.
Abre una ventana de terminal. Ingrese el comando su, ingrese la contraseña del usuario root en el mensaje e ingrese el usuario root. En este momento, el mensaje debería ser un signo #.
Ejecute el comando de terminal como root:
tcpdump -w dump.dat -s 0 udp
La función de este comando es interceptar los datos transmitidos en la red Baja.
-w dump.dat significa guardar el resultado en el archivo dump.dat.
-s 0 especifica guardar el paquete completo. Si se especifica un valor distinto de cero, se guardará la longitud de este valor.
udp se refiere únicamente a guardar datos del protocolo UDP (el protocolo utilizado por la comunicación de texto de Tencent).
(Si tiene una PC, también puede usar windump para interceptar paquetes de datos QQ en su PC. Windump es un programa de línea de comandos en Windows y sus parámetros son exactamente los mismos que tcpdump. Puede usar lt ; A href="http://windump.polito.it/"gt; http://windump.polito.it/lt;/Agt;
Luego iniciamos QQ en la VPC y realizamos las operaciones relevantes que queremos estudiar. Una vez completado, irá a la ventana de la terminal y presionará Ctrl-c para interrumpir la operación de tcpdump. En este momento, existe dump.dat en el directorio actual.
Luego, puedes abrir este archivo con hexedit y observar los resultados de nuestro volcado.
Hay datos conectados en su interior, que están encapsulados de acuerdo con la estructura jerárquica de "paquete QQ-gt; paquete UDP-gt; paquete IP-gt; encapsulación de capa de enlace-gt; formato de archivo tcpdump".
El siguiente es un fragmento de datos:
0008: A1 B2 C3 D4 00 02 00 04 lt; BRgt; 00 00 FF FF 00 00 00 01lt;BRgt;0024: 3F 44 32 28 00 0C 2D AFlt;BRgt;0032: 00 00 00 96 00 00 00 96lt;BRgt;0040: 00 06 25 60 F4 C0 00 lt; 0048: 93 A7 09 38 08 00 45 00lt; 0056: 00 88 8E 53 00 00 11lt; 4 1F 40 00 7 4lt ; 0080: C3 AD 02 08 16 00 22 00lt; B 38 E2 86 E1 8A F7 C8 lt; 0112: CA B2 01 76 ED 9E 2Blt; 6: FD FF 02 87 83 0B 32 57lt;BRgt;0144: 73 91 7F EF 7B 7A 60 CBlt;BRgt;0152: 44 A4 B5 CA 13 19 F6 CElt;BRgt;0160: D5 EC 2F D5 8A 88 22 48lt;BRgt; : 14 44 44 08 18 37 9D 8D LT; 0176: AA 42 9C 88 A4 AB 44 0DLT; 32 29 00 06 D0 EA 00; 00lt;BRgt ;0200: 00 68 00 00 00 68 00 06lt;BRgt;0208: 25 60 F4 C0 00 03 93 A7lt;BRgt;0216: 09 38 08 00 45 00 00 5Alt;BRgt;0224: 8E 5 4 00 00 80 11 B2 F9lt; 0232: C0 A8 01 66 3D AC F9 8A lt; 6: 1F 02 16 08 00 00 00 00lt;BRgt;0264: 00 00 00 00 00 00 00 00lt;BRgt;0272: 00 00 00 00 01 02 5E FDlt;BRgt;0280: 00 01 01 00 00 00 42lt ;BRgt;0288: 62 0B 9F 27 F3 D9 FB 05
lt; 0296: C6 54 E3 7F 01 E4 B4 01 lt; 0: 00 B3 00 00 00 B3 01 00lt; 0328: 5E FF FF FA 00 06 25 60 lt; gt; 0352 : 18 C0 B3 77 EF FF FAlt; BRgt; 04 09 07 6C 00 8D 91 43 lt; Tcpdump formato de archivo:
Lo primero que vemos es el papel de regalo más externo: el formato de archivo tcpdump. Su formato es el siguiente (para obtener una descripción detallada, consulte: información sobre el formato libpcap):
Encabezado del archivo | Datos de la capa de enlace | Datos de la capa de enlace |
En primer lugar, cada archivo comienza con un encabezado de archivo de 24 bytes de largo. Lo que necesitamos saber es que los primeros cuatro bytes son: A1 B2 C3 D4. no es el archivo de datos generado por tcpdump (si es el archivo generado por windump en la PC, entonces es D4 C3 B2 A1 para indicar que el endian en la PC es diferente, no necesitamos preocuparnos por esta diferencia aquí) .
Omita estos 24 bytes, el siguiente es un grupo de datos agrupados por "Encabezado del paquete de datos | Datos de la capa de enlace". El encabezado del paquete de datos no son los datos reales transmitidos en la red. La información que contiene es principalmente la hora en que se interceptó el paquete y otra información. Su longitud es de 16 bytes. Lo que nos importa son los bytes 8-11 y 9-15 (según los hábitos de programación, llamamos al primer byte el byte 0, lo mismo a continuación). El primero indica la longitud del paquete de datos de la capa de enlace posterior en el archivo y el segundo indica su longitud real. Los dos pueden diferir debido a un posible truncamiento. Como usamos el parámetro -s 0, deberían ser iguales. Desde el final del encabezado del paquete de datos hasta el número de bytes especificados por la longitud, es el paquete de datos de la capa de enlace realmente transmitido en la red. Luego, está el siguiente encabezado del paquete. De esta forma podemos eliminar la encapsulación del archivo tcpdump uno por uno y obtener los paquetes de datos realmente transmitidos en la red uno por uno. Por ejemplo, ignoramos el encabezado del archivo 3F 44 32 28... comenzando desde el byte 24 es el paquete de datos Los bytes 8 al 11 del paquete de datos: 00 00 00 96 es la longitud del paquete de capa de enlace de datos posterior. . En otras palabras, los 150 bytes (0x96 convertido a decimal) a partir de 40 bytes, 00 06 25 60..., son los paquetes de datos de la capa de enlace transmitidos por la red real. Luego, vimos el siguiente encabezado de paquete de 3F 44 32 29... en la posición 190 (40 150) byte.
De esta forma obtenemos los paquetes de datos de la capa de enlace uno a uno.
El primero en nuestro ejemplo anterior es:
0000: 00 06 25 60 F4 C0 00 03lt;BRgt;0008: 93 A7 09 38 08 00 45 00lt;BRgt;0016: 00 88 8E 53 00 00 80 11LT; 0024: 9D 9D C0 A8 01 66 CA 0032; 81 FD C2 34 1F 40 00 LT; 10 01 01 82 5D 90 6F 30 FD lt;BRgt;0056: 96 3B B1 0F E5 FF 8E 3Elt;BRgt;0064: 4B 38 E2 86 E1 8A F7 C8 lt;BRgt;0072: CA B2 01 76 B6 ED 9E 2Blt;BRgt; 97 FD B9 7F 23 B2 09 02 lt; FD FF 02 87 83 0B 32 57 lt; Un 60 CBlt; BRgt; 44 A4 B5 CA 13 19 F6 CE lt; 88 A4 AB 44 0Dlt; BRgt; 0144: 4B 23 74 AC ED 03
lt; BRgt; Paquete de capa de enlace:
A continuación, debemos arrancar el paquete de capa de enlace. papel de regalo. El formato del paquete de la capa de enlace está relacionado con el método de transmisión: si compartimos Internet en una LAN, generalmente se usa el protocolo Ethernet llamado RFC894, y en algunos casos es el protocolo 802.3 del RFC 1042. Si utiliza un módem para conectarse a Internet, puede que sea el protocolo SLIP de RFC 1055. Si utiliza ADSL, será el protocolo PPP de RFC 1548.
Los datos de la capa de enlace tienen poca importancia para nosotros. Todo lo que tenemos que hacer es quitar esta capa de papel de regalo.
RFC894/RFC1042/RFC 1548:
Las formas de estos tres protocolos son: lt; BRgt; encabezado | paquete IP (cola del paquete)
Para RFC894, el encabezado es de 14 bytes; para RFC1042, el encabezado es de 22 bytes; para RFC 1548, el encabezado es de 5 bytes. Cuando cruzamos estos bytes, tenemos los datos del paquete IP. No importa cuál sea el final del paquete, porque el propio contenido del paquete IP nos dirá su longitud.
En el paquete de datos de la capa de enlace anterior, omitimos 14 bytes, y el decimocuarto byte que comienza con 45 00 00 88 son los datos del paquete IP. También se pueden manejar otros protocolos de esta manera.
RFC 1055:
Los paquetes de datos IP se encapsulan en un par de caracteres 0xc0. Sin embargo, dado que no puede haber caracteres 0xc0 en el medio del paquete de datos, los caracteres 0xc0 originales se reemplazan por otros y debemos restaurarlos. El método consiste en buscar este paquete de datos y convertir 0xdb 0xdc a 0xc0; Es más problemático, así que al final no lo uses para interceptar datos.
Los 2-3 bytes del paquete IP son su longitud. La longitud del paquete IP a partir del byte 14 que vimos arriba es 00 88. Eso es 136 bytes. Por lo tanto, los 136 bytes a partir de 14 bytes son el paquete IP. De esta forma despegamos el papel de regalo de la capa de enlace y obtenemos el paquete IP.
El primer paquete IP de nuestro ejemplo anterior es:
0000: 45 00 00 88 8E 53 00 00 lt; BRgt; ;0016: CA 68 81 FD C2 34 1F 40 lt;BRgt;0024: 00 74 C3 AD 02 08 16 00lt;BRgt;0032: 22 00 10 01 82 5D 90 6F lt;BRgt;0040: 30 FD 96 3B : 09 02 71 22 94 E3 4B E8lt; 0080: E2 8F FD FF 02 87 0B lt; 60 CB 44 A4 B5 CA 13; 19 litros; BRgt; 0104: F6 CE D5 EC 2F D5 8A 88lt; 23 74 AC ED 03
lt;BRgt;Paquete IP
lt;BRgt;El paquete IP es un paquete de datos transmitido en la red que no tiene nada que ver con la línea de transmisión, y también es los datos que realmente necesitamos preocuparnos. El formato del paquete IP es:
Encabezado del paquete IP | Datos del paquete IP (aquí somos paquetes de datos UDP)
Encabezado del paquete IP, además de la longitud del paquete que acabamos de mencionar (sección palabras 2-3), hay varias informaciones importantes de las que debemos preocuparnos:
Los números 12-15 y 16-19 son las direcciones IP de origen y destino respectivamente. Utiliza cuatro bytes para representar una dirección IP y convierte cada byte a decimal, que es la dirección IP con la que estamos familiarizados. Por ejemplo, la dirección IP de origen anterior: C0 A8 01 66 es 192.168.1.102. Esta es la dirección IP de mi LAN, por lo que es un paquete enviado desde mi máquina. La dirección de destino es CA 68 81 FD, que es 202.104.129.253. Según nuestra comprensión posterior de los paquetes de datos QQ, sabemos que se trata de un paquete enviado al servidor, por lo que obtuvimos la dirección IP de un servidor QQ. (¡Tenga en cuenta que no todos los paquetes enviados se envían al servidor!)
Si encuentra un servidor que no conocía antes, es un descubrimiento muy importante.
En el byte 0, los 4 bits superiores son el número de versión de IP y los 4 bits inferiores son la longitud del encabezado IP. Por ejemplo, el primer byte del paquete de datos anterior es 45, sus cuatro bits de orden superior son 4, lo que indica que es lo que normalmente llamamos protocolo IPv4, y los cuatro bits de orden inferior son 5, lo que indica que la longitud del paquete de datos anterior es 45. El encabezado IP es 5X4=20 Bytes (la longitud del encabezado es de cuatro bytes). Esto muestra que a partir del byte 20 está la parte de datos del paquete IP, que es el contenido del paquete UDP.
De esta manera podemos eliminar el paquete UDP:
0000: C2 34 1F 40 00 74 C3 AD lt; 0016: 82 5D 90; 6F 30 FD 96 3B lt; 0024: B1 0F E5 FF 8E 3E 38 lt; 0048 : B9 7F 23 B2 09 02 71 22lt;BRgt;0056: 94 E3 4B E8 E2 8F FD FFlt;BRgt;0064: 02 87 83 0B 32 57 73 91lt;BRgt;0072: 7F EF 7B 7A 60 CB 44 t 0080: B5 CA 13 19 F6 CE D5 EC lt; 4 0D 4B 23lt; BRgt; 0112: 74 AC ED 03
lt; BRgt; paquete UDP
lt; el paquete UDP es el protocolo utilizado por la mayoría del software de mensajería instantánea. Su formato es:
Encabezado del paquete UDP | Datos del paquete UDP (aquí está el paquete del protocolo Tencent QQ)
El encabezado del paquete UDP tiene 8 bytes fijos.
Los bytes 0-1 son el número de puerto de origen y los bytes 2-3 son el número de puerto de destino. Generalmente, el número de puerto de nuestro cliente se puede seleccionar a voluntad (alguna información dice que es 4000, pero en realidad se descubre que la nueva versión de QQ se puede seleccionar a voluntad, sin restricciones). Por el paquete UDP anterior, sabemos por la información del paquete IP anterior que enviamos el paquete de datos, por lo que el número de puerto de destino es el número de puerto utilizado por el servidor. Este es 1F 40, que es el puerto 8000. Aún no se han encontrado otros puertos, por lo que si se descubre que un servidor utiliza otros puertos, será información muy importante.
Los primeros 4-5 bytes son la longitud del paquete UDP. Esto no es muy importante, pero también se puede utilizar para comprobar si hay algún error en nuestro proceso de eliminación.
Eliminamos los primeros 8 bytes, y el resto es el paquete del protocolo QQ:
0000: 02 08 16 00 22 00 10 01lt; FD 96 3Blt;BRgt;0016: B1 0F E5 FF 8E 3E 4B 38lt;BRgt;0024: E2 86 E1 8A F7 C8 CA B2lt;BRgt;0032: 01 76 B6 ED 9E 2B 97 FDlt;BRgt;0040: B9 7F 23 B2 09 02 71 22lt;BRgt;0048: 94 E3 4B E8 E2 8F FD FFlt;BRgt;0056: 02 87 83 0B 32 57 73 91lt;BRgt;0064: 7F EF 7B 7A 60 CB 44 A4lt; B5 CA 13 19 F6 CE D5 EC lt; 0080: 2F D5 8A 88 22 48 4Elt; ; BRgt 0104: 74 AC ED 03
Tenemos un gadget de línea de comando showUDP, que puede mostrar directamente el contenido del paquete UDP del archivo interceptado por tcpdump.
Paquete de protocolo QQ
lt; BRgt; La composición del paquete de protocolo QQ es:
Encabezado del paquete de protocolo QQ | >
El encabezado QQ tiene 7 bytes: los significados respectivos son:
Bytes 0-0: siempre 02, que indica el protocolo QQ básico. En la nueva versión de QQ, encontramos que también se usan 06 y 01. La función aproximada parece ser: 06 es solicitar al servidor (diferente de los servidores utilizados por diferentes QQ) que envíe algunos archivos con funciones desconocidas. 01 es el servidor que le envía este archivo. En la actualidad entendemos que se trata de la familia de protocolos 02.
Bytes 1-2: código de versión del software QQ del remitente. Si es 01 00, significa que el paquete se envía desde el servidor. En este momento, podemos obtener la IP del servidor verificando la dirección IP de origen.
Bytes 3-4: Código de comando QQ. Si se descubren nuevas instrucciones, esta será información importante.
Bytes 5-6: Número de secuencia de instrucción. Los comandos QQ siempre aparecen en pares, es decir, si una parte emite un comando, recibirá una respuesta con el mismo número de secuencia de la otra parte. Además, el número de secuencia de cada instrucción enviada por el remitente es uno más uno de la instrucción anterior. Dos aspectos a tener en cuenta son que cada parte mantiene su propio número de secuencia. Es decir, el número de secuencia actual del cliente y el número de secuencia actual del servidor son inconsistentes. Cuando el cliente es el emisor de instrucciones, usa su propio número de serie actual. el comando, y el servidor, como respondedor, usa el número de serie del comando recibido al responder, por el contrario, si el servidor es el remitente del comando, entonces usa su propio número de serie actual, independientemente del cliente. número de secuencia de una instrucción. Otra cosa es que, dado que el servidor se comunica con varios clientes al mismo tiempo, los números de secuencia de las instrucciones del servidor recibidas por cada cliente no son consecutivos y la continuidad de los números de secuencia no debe usarse como base para determinar la pérdida de paquetes.
Además, el primer número de serie del cliente al inicio de la comunicación se selecciona aleatoriamente, pero parece que no se ha encontrado ninguno mayor que 0x00ff. El paquete de cierre de sesión final siempre utiliza 0xffff como número de secuencia y no habrá respuesta.
El final del paquete es un byte, actualmente siempre es 0x03.
Dado que estamos interceptando todos los paquetes UDP en la máquina, necesitamos usar esta información para determinar de manera integral si el comando que estamos analizando actualmente es un comando QQ.
De esta manera podemos eliminar la parte de datos del paquete de comando QQ:
0000: 01 82 5D 90 6F 30 FD 96 lt; 3E 4Blt; 0016: 38 E2 86 E1 8A F7 C8 CA lt; 22 94 E3 0072: EC 2F D5 8A 88 22 48 14lt;
Hasta este punto, hemos podido observar la situación general de las instrucciones de ida y vuelta del cliente en la red y comprender el marco general del protocolo QQ. Además, se describirá el análisis de archivos de paquetes