comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Modo Kernel] GetPointerObjet

  • 0 Respuestas
  • 1709 Vistas

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

Desconectado Arkangel

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« 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
  1. GetPointerObjet proc PNDirObjet:PUNICODE_STRING,PNObjet:dword
  2. LOCAL buff[260]:byte
  3. LOCAL handel
  4. LOCAL pDrectoriObject
  5. LOCAL DirectoryEntry
  6. LOCAL DirObjet:OBJECT_ATTRIBUTES
  7. LOCAL count:dword
  8. LOCAL resul
  9.  
  10. push edx
  11. push ebx
  12. push ecx
  13.  
  14.  
  15. lea ebx,DirObjet
  16. InitializeObjectAttributes ebx,PNDirObjet ,OBJ_CASE_INSENSITIVE,NULL,NULL
  17.  
  18. lea edx,[handel]
  19.  
  20. push edx
  21. push null
  22. push 80000000h
  23. push null
  24. push KernelMode
  25. push null
  26. push ebx
  27. call ObOpenObjectByName ;Abro el directorio de objetos
  28.  
  29. lea edx,[pDrectoriObject]
  30. push NULL
  31. push edx
  32. push KernelMode
  33. push null
  34. push FILE_ANY_ACCESS
  35. push [handel]
  36. call ObReferenceObjectByHandle ;Consigo un puntero a partir del Handle
  37. xor ecx,ecx
  38.  
  39. mov [count],ecx
  40.  
  41. mov eax,[pDrectoriObject]
  42. HASH_BUCKETS:
  43. movzx ecx,word ptr[count]
  44. cmp dword ptr[eax+ecx*4],0
  45. je fin
  46. mov eax,[pDrectoriObject]
  47. mov ebx,[eax+ecx*4] ;ebx = pDrectoriObject->HashBuckets[Bucket]
  48. ChainLink:
  49. mov DirectoryEntry,ebx
  50. mov ebx,[ebx+4] ;ebx = ebx->Object ;HashBuckets _OBJECT_DIRECTORY_ENTRY
  51. lea ebx,[ebx- 18h] ;OBJECT_TO_OBJECT_HEADER
  52. assume ebx:ptr _OBJECT_HEADER
  53. movzx edx,byte ptr[ebx].NameInfoOffset
  54. sub ebx,edx ;OBJECT_HEADER_TO_NAME_INFO
  55. lea edx,[ebx+4] ;NAME_INFO->name
  56. assume ebx:nothing
  57.  
  58. lea edi,buff
  59. push edi
  60. push edx
  61. call UnicodeStrToAsciiStr ;Combierte de UNICODE_STRING a cadena ASCII
  62.  
  63. push edi
  64. push PNObjet
  65. call cmpsrt
  66. cmp eax,0
  67. je encontrado
  68.  
  69.  
  70. mov ebx,DirectoryEntry
  71. mov ebx,[ebx]
  72. cmp ebx,0 ;comprueva si es un puntero NULL
  73. jne ChainLink
  74. fin:
  75. inc count
  76. mov eax,[pDrectoriObject]
  77. cmp count,37 ;Comprueva si ha llegado al limite
  78. jne HASH_BUCKETS
  79. xor eax,eax ;Si no encuentra coincidencias devuelve NULL
  80. jmp error
  81. encontrado:
  82. mov ebx,DirectoryEntry
  83. mov eax,[ebx+4]
  84. lea ebx,[eax-18h]
  85. inc dword ptr[ebx] ;Aumento la cuenta del puntero al Objeto para que no sea borrado
  86. error:
  87. mov resul,eax
  88.  
  89.  
  90. push pDrectoriObject
  91. call ObDereferenceObject
  92.  
  93.  
  94. push [handel]
  95. call ZwClose
  96.  
  97. mov eax,resul
  98.  
  99. pop ecx
  100. pop ebx
  101. pop edx
  102.  
  103. ret
  104.  
  105. GetPointerObjet endp
  106.  
« Última modificación: Febrero 08, 2014, 05:29:18 pm por Expermicid »

 

¿Te gustó el post? COMPARTILO!



[Modo Kernel] UnAttachDriver

Iniciado por Arkangel

Respuestas: 0
Vistas: 1643
Último mensaje Junio 17, 2013, 08:45:37 am
por Arkangel