[Modo Kernel] GetPointerObjet

  • 0 Respuestas
  • 4073 Vistas

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

Desconectado Arkangel

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

[Modo Kernel] GetPointerObjet

  • en: Junio 17, 2013, 08:43:06 am
les dejo una función que les puede servir tanto para hacer hook en las IRP_MJ_XXX u ocultar Objetos en modo kernel
y si quieren también se los listara. Con mínimas modificaciones

Código: (asm) [Seleccionar]
GetPointerObjet proc PNDirObjet:PUNICODE_STRING,PNObjet:dword
LOCAL buff[260]:byte
LOCAL handel
LOCAL pDrectoriObject
LOCAL DirectoryEntry
LOCAL DirObjet:OBJECT_ATTRIBUTES
LOCAL count:dword
LOCAL resul
 
push edx
push ebx
push ecx
 
 
lea ebx,DirObjet
InitializeObjectAttributes ebx,PNDirObjet ,OBJ_CASE_INSENSITIVE,NULL,NULL
 
lea edx,[handel]
 
push edx
push null
push 80000000h
push null
push KernelMode
push null
push ebx
call ObOpenObjectByName ;Abro el directorio de objetos
 
lea edx,[pDrectoriObject]
push NULL
push edx
push KernelMode
push null
push FILE_ANY_ACCESS
push [handel]
call ObReferenceObjectByHandle ;Consigo un puntero a partir del Handle
xor ecx,ecx
 
mov [count],ecx
 
mov eax,[pDrectoriObject]
HASH_BUCKETS:
movzx ecx,word ptr[count]
cmp dword ptr[eax+ecx*4],0
je fin
mov eax,[pDrectoriObject]
mov ebx,[eax+ecx*4] ;ebx = pDrectoriObject->HashBuckets[Bucket]
ChainLink:
mov DirectoryEntry,ebx
mov ebx,[ebx+4] ;ebx = ebx->Object ;HashBuckets _OBJECT_DIRECTORY_ENTRY
lea ebx,[ebx- 18h] ;OBJECT_TO_OBJECT_HEADER
assume ebx:ptr _OBJECT_HEADER
movzx edx,byte ptr[ebx].NameInfoOffset
sub ebx,edx ;OBJECT_HEADER_TO_NAME_INFO
lea edx,[ebx+4] ;NAME_INFO->name
assume ebx:nothing
 
lea edi,buff
push edi
push edx
call UnicodeStrToAsciiStr ;Combierte de UNICODE_STRING a cadena ASCII
 
push edi
push PNObjet
call cmpsrt
cmp eax,0
je encontrado
 
 
mov ebx,DirectoryEntry
mov ebx,[ebx]
cmp ebx,0 ;comprueva si es un puntero NULL
jne ChainLink
fin:
inc count
mov eax,[pDrectoriObject]
cmp count,37 ;Comprueva si ha llegado al limite
jne HASH_BUCKETS
xor eax,eax ;Si no encuentra coincidencias devuelve NULL
jmp error
encontrado:
mov ebx,DirectoryEntry
mov eax,[ebx+4]
lea ebx,[eax-18h]
inc dword ptr[ebx] ;Aumento la cuenta del puntero al Objeto para que no sea borrado
error:
mov resul,eax
 
 
push pDrectoriObject
call ObDereferenceObject
 
 
push [handel]
call ZwClose
 
mov eax,resul
 
pop ecx
pop ebx
pop edx
 
ret
 
GetPointerObjet endp
« Última modificación: Febrero 08, 2014, 05:29:18 pm por Expermicid »