¿Cómo funciona QQ?
Después de que el cliente QQ obtenga el token de inicio de sesión, enviará una solicitud de inicio de sesión al servidor. Enviará una solicitud de inicio de sesión que contiene información de inicio de sesión al servidor. Solicitar inicio de sesión. El servidor primero verificará si el número, la dirección y la versión del cliente pueden iniciar sesión en el servidor. Si puede, el servidor verificará que la información de inicio de sesión del cliente sea coherente con la información de inicio de sesión almacenada en el servidor. Si hay una coincidencia, se devolverá al cliente un paquete de inicio de sesión exitoso. Si no hay ninguna coincidencia, el inicio de sesión fallará. Porque hay muchos servidores QQ. Es posible que necesite administrar diferentes versiones e IP de QQ. Por lo tanto, si el número del cliente, la dirección IP y la versión no pueden iniciar sesión en el servidor. El servidor devolverá un paquete de redireccionamiento. Deje que el cliente inicie sesión en otros servidores. De hecho, todo el proceso de inicio de sesión de QQ es un proceso simple de dos pasos.
Después de comprender el proceso de inicio de sesión de QQ. También necesitamos entender el formato del paquete con el cuerpo humano. Para analizar el contenido de los datos que necesitamos. El paquete de datos del proceso de inicio de sesión de QQ se divide en tres partes: encabezado, contenido y cola. El paquete de datos del proceso de inicio de sesión de QQ se divide en tres partes: encabezado, contenido y cola. El formato del encabezado se fija en el número de secuencia del comando de la versión del cliente 0x02, número QQ. Entre ellos, 0x02 es un indicador de 1 byte; la versión del cliente es de 2 bytes. Se utiliza para indicar la versión del comando del cliente QQ 2 bytes. Indica el tipo de comando a enviar. Por ejemplo, solicitud de inicio de sesión de token de inicio de sesión, etc.; el número de secuencia es un número aleatorio de 2 bytes, que se utiliza en la sesión QQ para confirmar si el paquete de respuesta corresponde al paquete de solicitud. De forma predeterminada, el cliente QQ incrementa en 1 cada vez; el número QQ es un número QQ de 4 bytes. No importa qué campo utilice el servidor. El final del paquete del proceso de inicio de sesión de QQ se fija en 0x03.
1. Solicitar paquete de token de inicio de sesión
El contenido del paquete es la información específica de un comando. Cuando el paquete que solicita el token de inicio de sesión se envía por primera vez, el comando del paquete es 0x0062. El paquete de solicitud completo es el siguiente. ;
El paquete de datos devuelto por el servidor
es relativamente complejo, como se muestra a continuación;
donde 0x18 representa la longitud del token de inicio de sesión predeterminado de Now QQ. La longitud del token es 0x18. Este token se genera en el lado del servidor. No tenemos forma de conocer el algoritmo de generación específico. Debe generarse haciendo referencia a la dirección I, el puerto y otra información del cliente QQ. Puerto y otra información para generar este token, porque el token que obtiene en la máquina A no podrá iniciar sesión en la máquina B. Si cambia la dirección IP de la Máquina A, no podrá iniciar sesión. No podrás iniciar sesión.
2. Inicie sesión en el paquete de software.
Si queremos robar contraseñas de QQ lo más importante es el paquete de inicio de sesión. Contiene información sobre la contraseña de QQ. El paquete está estructurado de la siguiente manera:
La clave inicial es un número aleatorio de 16 bytes que se utiliza para el cifrado. El punto más importante aquí es que la clave está cifrada con una cadena vacía.
La llamada clave de cifrado es el texto cifrado después del cifrado MD5 usando la contraseña QQ dos veces, y luego usa el texto cifrado como clave para cifrar una cadena vacía. Este método de cifrado utiliza el algoritmo TEA de retroalimentación. El resultado del cifrado en el paquete de inicio de sesión QQ y deja que el servidor lo verifique. El algoritmo de cifrado QQ utiliza un mecanismo de relleno especial. El servidor QQ se puede utilizar para verificar si la contraseña del usuario es correcta. . Hay otros contenidos en el paquete de inicio de sesión de QQ, como el estado de inicio de sesión, la versión de la secuencia de inicio de sesión y muchos contenidos desconocidos. Pero estos contenidos no nos son muy útiles para descifrar la contraseña de QQ.
Es importante mencionar que el paquete de token de inicio de sesión solicitado anteriormente no estaba cifrado y todas las partes del paquete de inicio de sesión, excepto la clave inicial, deben estar cifradas. El algoritmo de cifrado es el mismo que el algoritmo retroalimentado. por TÉ.
Después de recibir el paquete de inicio de sesión, el servidor QQ primero debe usar la clave inicial para descifrar el resto del paquete de inicio de sesión. Si el descifrado es exitoso, la información secreta en el paquete de inicio de sesión descifrado usando la clave inicial. se guardará en el servidor y el paquete de inicio de sesión descifrado utilizando la clave inicial se guardará en el servidor. Si el descifrado se realiza correctamente, la cadena vacía cifrada por la clave de contraseña se descifrará utilizando la información de texto cifrado almacenada en el servidor. No se sabe si la contraseña almacenada en el servidor QQ es texto sin formato o una clave de contraseña. No estoy seguro de si es el texto sin cifrar o la clave guardada en el servidor QQ. Por tanto, si la contraseña enviada por el usuario es correcta, el servidor utilizará la clave criptográfica para descifrar la contraseña de 16 dígitos. Sólo si la contraseña enviada por el usuario es correcta el descifrado podrá realizarse correctamente. De lo contrario, la función de descifrado devolverá nulo y la verificación fallará. Al verificar que la contraseña del cliente QQ es correcta. Devuelve un paquete de datos de inicio de sesión exitoso. El formato es el siguiente:
Algoritmo de cifrado QQ
Comprender el protocolo de comunicación de inicio de sesión QQ anterior no es suficiente para descifrar la contraseña QQ. También necesitamos dominar el algoritmo de cifrado QQ. Como se mencionó anteriormente, la clave de contraseña es el resultado de dos cifrados MD5 de la contraseña del usuario. Luego, el resultado vacío se utiliza como clave para cifrar utilizando el algoritmo TEA. TEA es la abreviatura de Tiny Encrypt Arithmetic. TEA es la abreviatura de Tiny Encrypt Arithmetic. Como sugiere el nombre, se trata de un algoritmo de cifrado relativamente simple y pequeño. Cifra 8 bytes de texto sin formato utilizando una clave de 16 bytes. Cifra texto sin formato de 8 bytes con una clave de 16 bytes, lo que da como resultado un texto cifrado de 8 bytes. También es posible descifrar de forma inversa texto plano a partir de texto cifrado. El algoritmo específico se puede encontrar en línea. No entraré en detalles aquí.
Sin embargo, QQ usa TEA estándar, pero QQ usa un mecanismo de retroalimentación de relleno especial, es decir, los mensajes QQ se dividen en múltiples unidades de cifrado. Cada unidad de cifrado es de 8 bytes. TEA se utiliza para el cifrado. El resultado del cifrado sirve como clave para la siguiente unidad. Si el texto plano en sí no es múltiplo de 8, se rellena. Para convertirlo en múltiplo de 8, agregue un número aleatorio de 32 bits al comienzo del texto sin formato. Debido a la existencia de retroalimentación, incluso el mismo texto sin formato producirá contraseñas completamente diferentes si se utilizan números aleatorios diferentes. Debido al uso de diferentes números aleatorios, incluso el mismo texto sin formato producirá un texto cifrado completamente diferente.
El resultado de utilizar este algoritmo especial de retroalimentación de relleno es que el texto cifrado sólo se puede descifrar con la clave que lo cifró. Si se utiliza la clave incorrecta. No se pueden obtener resultados de llenado correctos. La situación más común es que al descifrar el texto cifrado se obtiene un valor de relleno distinto de 0, por lo que el descifrado falla.