Algunas dudas sobre Drivers...

Iniciado por Vaagish, 30 Octubre 2013, 23:01 PM

0 Miembros y 2 Visitantes están viendo este tema.

Vaagish

#10
Por lo que leo en la wiki, parece mas un problema que una solución  :rolleyes:
y solo en 64bits, en fin.. supongo que debe haber formas de saltarse eso.. cuando me complique ese asunto lo estudio mejor, esta bueno saberlo...
Por el momento, me queda mucho por aprender de las tablas, estructuras, y funciones para dar los primeros pasos con los drivers..


Otra cosa que no me queda claro son las funciones tipo Zw* y Nt*, esas funciones salen de otros drivers, no? Digamos, son exportadas por otros drivers? (Ahora no tengo el PE Explorer para fijarme), ya leí la wiki, pero no es muy clara, al parecer no existe mayor diferencia entre unas y otras,, ( Zw y Nt )

Editado:
Citar
Nt or Zw are system calls declared in ntdll.dll and ntoskrnl.exe. When called from ntdll.dll in user mode, these groups are almost exactly the same; they trap into kernel mode and call the equivalent function in ntoskrnl.exe via the SSDT. When calling the functions directly in ntoskrnl.exe (only possible in kernel mode), the Zw variants ensure kernel mode, whereas the Nt variants do not.[3] The Zw prefix does not stand for anything.
Antes no me habia quedado claro, ahora si.. Listo!

Eternal Idol

Cita de: Vaagish en 11 Noviembre 2013, 02:45 AM
Por lo que leo en la wiki, parece mas un problema que una solución  :rolleyes:
y solo en 64bits, en fin.. supongo que debe haber formas de saltarse eso.. cuando me complique ese asunto lo estudio mejor, esta bueno saberlo...

Un problema sera para los que hacen malware, practicamente (por no decir todo) se puede hacer con callbacks y drivers de tipo filtro asi que no hay necesidad real de hooks.

Cita de: Vaagish en 11 Noviembre 2013, 02:45 AMOtra cosa que no me queda claro son las funciones tipo Zw* y Nt*, esas funciones salen de otros drivers, no? Digamos, son exportadas por otros drivers? (Ahora no tengo el PE Explorer para fijarme), ya leí la wiki, pero no es muy clara, al parecer no existe mayor diferencia entre unas y otras,, ( Zw y Nt )

Son del propio Kernel y si hay una diferencia importante, cuando llamas desde modo Kernel tenes que usar Zw (en modo Usuario una es alias de la otra, tienen la misma direccion).

http://www.osronline.com/article.cfm?id=257
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Citar
cuando llamas desde modo Kernel tenes que usar Zw (en modo Usuario una es alias de la otra, tienen la misma direccion).

Okk! Esto se empieza a aclara  :P

Una ultima cosa, y sigo estudiando.. por la vuelta he visto este tipo de funciones:
Citar

ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformationAddress = NULL;

   status = ((ZWQUERYSYSTEMINFORMATION)(ZwQuerySystemInformationAddress)) (
               SystemInformationClass,
               SystemInformation,
               SystemInformationLength,
               ReturnLength );
Por que va entre parentesis? No se usa igual que las funciones en modo usuario..  :silbar:

Eternal Idol

Cita de: Vaagish en 11 Noviembre 2013, 17:32 PM
Okk! Esto se empieza a aclara  :P

Una ultima cosa, y sigo estudiando.. por la vuelta he visto este tipo de funciones:Por que va entre parentesis? No se usa igual que las funciones en modo usuario..  :silbar:

¿Es o no es codigo basura ese? Te recomiendo otra vez aprender con el WDK.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Citar
¿Es o no es codigo basura ese?
Por que codigo basura?

Bueno, si Eternal.. creo que ahora puedo empezar con WDK. Convengamos que el WDK no tiene nada de teoría, es como ir a la guerra con un palito..

Saludos!

Eternal Idol

Cita de: Vaagish en 11 Noviembre 2013, 18:23 PM
Por que codigo basura?

Es muy sencillo: ¿De donde salio?

Cita de: Vaagish en 11 Noviembre 2013, 18:23 PMBueno, si Eternal.. creo que ahora puedo empezar con WDK. Convengamos que el WDK no tiene nada de teoría, es como ir a la guerra con un palito..

No, el WDK tiene la mayor referencia que existe ... tal vez no la hayas encontrado ... ademas en los ejemplos hay varios misiles pero bueno ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

El ntosknrl y el hal son cargados durante el proceso de carga del S.O., luego este carga todos los demas drivers y procesos del sistema.

Cita de: Vaagish en 11 Noviembre 2013, 17:32 PM
Okk! Esto se empieza a aclara  :P

Una ultima cosa, y sigo estudiando.. por la vuelta he visto este tipo de funciones:Por que va entre parentesis? No se usa igual que las funciones en modo usuario..  :silbar:
Si es una funcion de hook para NtQuerySystemInformation, Se pasa a la funcion original los parametros que son pasados al hook de esta manera
se intercepta el resultado, aunque no hay ninguna necesidad de hacer un casting del puntero a la función si la variable ya es declarada
como tal.


Por cierto:
@EI: No seria usar las Nt's desde modo kernel:

Zw:
kd> u nt!ZwCreateFile L6
nt!ZwCreateFile:
804fe08c b825000000      mov     eax,25h
804fe091 8d542404        lea     edx,[esp+4]
804fe095 9c              pushfd
804fe096 6a08            push    8
804fe098 e884f40300      call    nt!KiSystemService (8053d521)
804fe09d c22c00          ret     2Ch


Nt:
kd> u nt!NtCreateFile L25
nt!NtCreateFile:
8056e38c 8bff            mov     edi,edi
8056e38e 55              push    ebp
8056e38f 8bec            mov     ebp,esp
8056e391 33c0            xor     eax,eax
8056e393 50              push    eax
8056e394 50              push    eax
8056e395 50              push    eax
8056e396 ff7530          push    dword ptr [ebp+30h]
8056e399 ff752c          push    dword ptr [ebp+2Ch]
8056e39c ff7528          push    dword ptr [ebp+28h]
8056e39f ff7524          push    dword ptr [ebp+24h]
8056e3a2 ff7520          push    dword ptr [ebp+20h]
8056e3a5 ff751c          push    dword ptr [ebp+1Ch]
8056e3a8 ff7518          push    dword ptr [ebp+18h]
8056e3ab ff7514          push    dword ptr [ebp+14h]
8056e3ae ff7510          push    dword ptr [ebp+10h]
8056e3b1 ff750c          push    dword ptr [ebp+0Ch]
8056e3b4 ff7508          push    dword ptr [ebp+8]
8056e3b7 e860d8ffff      call    nt!IoCreateFile (8056bc1c)
8056e3bc 5d              pop     ebp
8056e3bd c22c00          ret     2Ch
8056e3c0 cc              int     3
8056e3c1 cc              int     3
8056e3c2 cc              int     3
8056e3c3 cc              int     3
8056e3c4 cc              int     3
8056e3c5 cc              int     3




Vaagish

CitarEs muy sencillo: ¿De donde salio?
Haa,, si.. seguro es sencillo, no entendia por que usaba asi a la funcion..

CitarSi es una funcion de hook para NtQuerySystemInformation, Se pasa a la funcion original los parametros que son pasados al hook
Exactamente

Lo que hace, que me maree era esto:
Citarun casting del puntero a la función si la variable ya es declarada como tal

CitarNo seria usar las Nt's desde modo kernel:
Tengo que aprender a usar Windbg urgente..  :silbar:

Eternal Idol

#18
Cita de: x64Core en 11 Noviembre 2013, 18:34 PMEl ntosknrl y el hal son cargados durante el proceso de carga del S.O., luego este carga todos los demas drivers y procesos del sistema.

Si, el loader se encarga de cargar todos los boot drivers.

Cita de: x64Core en 11 Noviembre 2013, 18:34 PM
Por cierto:
@EI: No seria usar las Nt's desde modo kernel:

No, Zw, lee el articulo que deje antes.

Cita de: Vaagish en 11 Noviembre 2013, 18:49 PM
Haa,, si.. seguro es sencillo, no entendia por que usaba asi a la funcion..

No se, deberia ser MUY sencillo decir de donde lo sacaste ... salvo que no lo quieras decir ... Y no hay razon para llamar de esa manera, es basura simplemente.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Na, por que voy a tener problemas en decir de donde lo saque?
Esta claro que no lo hice yo.. de ser asi, no estaria preguntando tanto.. lo saque de un rootkit, te paso el autor, esta su firma en el codigo..

           Agony rootkit
           
               by Intox

Yo intento aprender EI, nada mas..

Saludos!