Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis sobre el principio de envío de virus de cola QQ

Análisis sobre el principio de envío de virus de cola QQ

Recientemente, estalló el virus QQ tail. A menudo recibo mensajes de internautas con colas, así que por curiosidad, vine a estudiar cómo surge este virus. En primer lugar, no conozco el principio real del virus de cola QQ. Simplemente adiviné y escribí un programa similar para lograr la explosión de la cola QQ. Cuando el usuario abre la ventana de envío de mensajes QQ, el virus ingresará automáticamente texto en el cuadro de texto del mensaje y luego lo enviará sin esperar la reacción del usuario.

Para implementar el programa, primero debe encontrar el identificador de la ventana de envío de mensajes QQ y los identificadores de ventana del cuadro de texto del mensaje y el botón de enviar.

Cómo encontrar el identificador de la ventana de envío de mensajes QQ

Hay dos tipos de ventanas de envío de mensajes QQ, uno es el modo de mensaje, en cuyo caso el título de la ventana contiene el texto del mensaje a enviar, y el otro es el modo chat, en cuyo caso el título de la ventana contiene el texto con el que se va a chatear.

El identificador correspondiente se puede encontrar a través de la ventana de enumeración.

//Obtener la ventana de envío de mensajes de QQ

Función GetQQWnd:HWND;

Definir variables

hCurrentWindow:HWnd;

wnd text:String;

Inicio

hCurrentWindow := GetWindow(identificador de aplicación GW _ hwnd primero);

Y hCurrentWindow & lt& gt hacer

Inicio

WndText:= GetWndText(hCurrentWindow);

If (Pos(wndtext en chat)>) o (Pos(enviar mensaje WndText)> )Entonces

Inicio

Resultado:= hCurrentWindow

Salir;

Fin;

hCurrentWindow:= GetWindow (hCurrentWindow GW _ HWNDNEXT);

Fin;

Resultado:=;

Fin;

Cómo encontrar el identificador del botón de enviar ventana

Después de encontrar la ventana de envío de mensajes QQ, puede encontrar el identificador del botón enviar. Si el identificador de la ventana es qqWnd, puede utilizar un bucle para buscar ventanas con la palabra enviar en el texto. Después de los experimentos, se descubrió que el botón de enviar es la primera subventana del formulario, por lo que se puede utilizar.

BTN wnd:= GetDlgItem(qqWnd); //Botón Enviar

Obtiene el identificador del botón enviar.

Cómo encontrar el identificador de la ventana del cuadro de texto del mensaje

El cuadro de texto del mensaje es difícil de encontrar, pero primero puede ingresar algunas letras como abcd, etc. cuadro de texto del mensaje, para que podamos usar lo anterior. Se encontró el método. Sin embargo, se descubrió mediante experimentos que el cuadro de texto del mensaje no es una subventana directa de la ventana QQ, sino una subventana de una de las subventanas que se puede utilizar mediante experimentos.

txt wnd:= GetWindow(GetDlgItem(qqWnd)GW _ CHILD); //Cuadro de texto

Obtener

Cómo obtener el texto del mensaje original cuadro de texto

Para obtener el texto del cuadro de texto del mensaje original, solo necesita la función API que se muestra a continuación.

//Obtener texto de la ventana

Función GetWndText(hWnd:hWnd):String;

Definir variables

ret:LongInt;

Texto de varias líneas: PChar

Buf: entero;

Inicio

ret:= SendMessage(hWnd WM _ GETTEXTLENGTH)+;

get mem(mText Ret);

Probar

buf:= LongInt(mText);

Enviar mensaje(hWnd WM _ GETTEXT Ret Buf);

Resultado:= StrPas(mText);

Finalmente

FreeMem(mText Ret);

Fin;

Finalmente

FreeMem(mText Ret);

Fin;

p>

Fin;

Cómo agregar texto al cuadro de texto del correo electrónico original

Lo opuesto a recibir texto

//Enviar texto a la ventana

p>

Procedimiento SetWndText(hWnd:hWnd ; texto: cadena);

Definir variables

ret:LongInt;

Texto multilínea: PChar

Buf: entero

p>

Iniciar

GetMem(longitud de texto multilínea (texto));

StrCopy(mText PChar(Text ));

Probar

buf:= LongInt(mText);

SendMessage(hWnd WM _ SETTEXT Buf);

Finalmente

FreeMem(longitud de texto multilínea (texto ));

Fin;

Fin;

Si se hace clic en el botón enviar automáticamente.

Todo está listo, ahora toca empezar a publicar. Para enviar un mensaje automáticamente, podemos simular que se hace clic en el botón enviar.

SendMessage(btnWnd WM _ LBUTTONDOWN MK _ LBUTTON);

SendMessage(BTN wnd WM _ LBUTTONUP);

Simulando una pulsación del ratón en el botón de inicio; Presione y suelte para realizar la función de hacer clic y enviar.

Las otras siete funciones de sincronización son relativamente simples, por lo que no entraré en detalles aquí.

Todos los códigos fuente son los siguientes

Unidad

Conexión

Uso

Variables de la herramienta del sistema de mensajes de Windows; Formulario de control gráfico de clase

Control estándar de diálogo control extendido;

Tipo

TForm = clase(TForm)

Temporizador: TTimer

Botón: TButton

Editar: TEdit

Etiqueta: TLabel

Botón: TButton

Temporización del programa Temporizador (remitente : a objetar);

Clic en el botón de proceso (remitente: a objetar);

Clic en el botón de proceso (remitente: a objetar);

Privado

{Declaración Privada}

Pública

{Declaración Pública}

Fin;

Definir variables

Formulario: TForm

Rendimiento

{$R * dfm}

//Obtener texto de ventana

Función GetWndText(hWnd: hWnd):String;

Definir variables

ret:LongInt;

Texto multilínea: PChar

Buf: entero;

Inicio

ret:= EnviarMessage(hWnd WM _ GETTEXTLENGTH)+;

obtener mem(mText Ret);

p>

Pruebe

buf:= LongInt(mText);

SendMessage(hWnd WM _ GETTEXT Ret Buf);

Resultado:= StrPas( mText);

Finalmente

FreeMem(mText Ret);

End;

End;

/ /Enviar texto al ventana

Procedimiento SetWndText(hWnd:hWnd; text: string);

Definir variables

ret:LongInt;

Multilínea texto: PChar

Buf: entero;

Inicio

GetMem(Longitud de texto de varias líneas (texto));

StrCopy( mText PChar(Text));

Intentar

buf:= LongInt(mText);

SendMessage(hWnd WM _ SETTEXT Buf

);

Finalmente

FreeMem(longitud de texto multilínea (texto));

Fin

Fin

//Obtener QQ's ventana de envío de mensajes

Función GetQQWnd:HWND;

Definir variables

hCurrentWindow:HWnd;

wnd text :String;

Iniciar

hCurrentWindow := GetWindow(identificador de aplicación GW _ hwnd primero);

Y hCurrentWindow & lt& gt hacer

Iniciar

WndText:= GetWndText(hCurrentWindow);

Si (Pos(wndtext en chat)>) o (Pos(enviar mensaje WndText)>) entonces

Iniciar

Resultado:= hCurrentWindow

Salir;

Fin;

hCurrentWindow:= GetWindow(hCurrentWi

ndow GW _ HWNDNEXT);

Fin;

Resultado:=;

Fin;

//Procesamiento de tiempo

Programar programa temporizador;

Definir variables

qqWnd txt wnd BTN wnd:HWND;

Mensaje: cadena;

Iniciar

qqWnd:= GetQQWnd;

Salir si qqWnd=;

BTN wnd:= GetDlgItem(qqWnd); //Botón Enviar

txt wnd:= GetWindow(GetDlgItem(qqWnd)GW _ CHILD); //Cuadro de texto

Salir si (btnWnd=) o (txtWnd=);

msg:= GetWndText (txt wnd);

Msg:= msg++#+Bienvenido a Luyin.com // Luyin.com;

SetWndText(txt wnd Msg);

SendMessage(btnWnd WM _ LBUTTONDOWN MK _ LBUTTON);

SendMessage(BTN wnd WM _ LBUTTONUP);

Fin

Programa TForm Timer (Remitente: a objetar);

Inicio

TimerProc

Fin;

Clic en el botón Procesar TForm (Remitente: a objetar);

Iniciar

Habilitar temporizador: = deshabilitar el temporizador;

Si el temporizador está habilitado, entonces

botón Título:=Detener.

Otros

Título del botón:=Inicio;

Fin;

Clic en el botón Procesar TForm (remitente: al objeto);

p>

Inicio

Intervalo del temporizador:= StrToInt(editar texto);

Fin;

Fin

Resumen Como se mencionó Lo anterior solo describe la función principal del envío automático de mensajes QQ. Puede ser diferente del principio de cola QQ (no lo sé), pero en general debería ser similar. Si desea que los usuarios sientan que algo es anormal, debe cambiarlo. En lugar de enviar automáticamente, agregue el texto después de que el usuario haga clic en el botón enviar. De esta manera, puede interceptar el mensaje de clic del botón Enviar, luego agregar texto mediante el método anterior y luego entregarlo al programa de restauración para su procesamiento. En cuanto a cómo convertirlo en un virus que pueda replicarse y ocultarse, ese es otro tema y no lo discutiremos aquí.

Lishi Xinzhi/Article/program/Delphi/201311/8482