Autor
|
Tema: diferencia entre OpenProcess, NtOpenProcess, ZwOpenProcess? (Leído 1,217 veces)
|
no se nada :(
Desconectado
Mensajes: 7
|
ola compañeros. pues esa es mi duda  se que ZwOpenProcess es de kernel mode OpenProcess y NtOpenProcess son modo usuario... pero: ¿Qué beneficios tiene ZwOpenProcess en compación a las otras? ¿Porqué OpenProcess y NtOpenProcess son user mode? ¿porqué no solo hay una? esperando que alguien me pueda aclarar estas dudas, me despido  edit: bueno me entere de que openprocess llama a NtOpenProcess pero ahora me pregunto ¿para que hace eso  ?
|
|
|
|
« Última modificación: 12 Marzo 2010, 06:42 por no se nada :( »
|
En línea
|
|
|
|
|
Eternal Idol
|
La unica de esas funciones que es exclusivamente de modo Usuario es OpenProcess, en este modo las otras dos son identicas (una es un alias de la otra) y lo que hacen es pasar a modo Kernel. Por ejemplo en XP en mi maquina se usa sysenter y el servicio ZwOpenProcess es el numero 7Ah (se pasa en eax): 0:000> u ntdll!ntopenprocess ntdll!ZwOpenProcess: 7c91d5fe b87a000000 mov eax,7Ah 7c91d603 ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300) 7c91d608 ff12 call dword ptr [edx] 7c91d60a c21000 ret 10h
0:000> u poi(SharedUserData!SystemCallStub) ntdll!KiFastSystemCall: 7c91e510 8bd4 mov edx,esp 7c91e512 0f34 sysenter ntdll!KiFastSystemCallRet: 7c91e514 c3 ret Windows esta diseñado de manera que se puedan crear diferentes subsystems, uno de ellos es el de Win32 que tiene librerias como Kernel32.dll, que terminan llamando a la API nativa (NTDLL.dll). En modo Kernel la diferencia fundamental entre estas dos esta dada por el PreviousMode, para hacerla corta los modulos de modo Kernel (drivers) tienen que usar las funciones Zw.
|
|
|
|
|
En línea
|
 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.
|
|
|
no se nada :(
Desconectado
Mensajes: 7
|
no entiendo de asm pero con eso quisiste decir que ZwOpenProcess y NtOpenProcess apuntan al mismo lugar  entonces no hay ninguna ventaja si uso NtOpenProcess en vez de OpenProcess ? perdon por ser ta duro pero me cuesta entender estas cosas 
|
|
|
|
|
En línea
|
|
|
|
|
Eternal Idol
|
no entiendo de asm pero con eso quisiste decir que ZwOpenProcess y NtOpenProcess apuntan al mismo lugar  No hace falta el codigo para eso realmente, como te decia una es un alias de la otra, lo podes comprobar usando GetProcAddress (las 2 devuelven la misma direccion) o el Dependency Walker (las 2 tienen el mismo offset). entonces no hay ninguna ventaja si uso NtOpenProcess en vez de OpenProcess ? Depende que quieras hacer exactamente ... normalmente la respuesta es no.
|
|
|
|
|
En línea
|
 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.
|
|
|
|
|
|
Eternal Idol
|
Solo se me ocurre que algun software este interceptando OpenProcess y no NtOpenProcess ...
|
|
|
|
|
En línea
|
 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.
|
|
|
no se nada :(
Desconectado
Mensajes: 7
|
vale ya estoy entendiendo  una última cosa.. estuve leyendo sobre el previous mode pero como estaba en ingles me costo un poco entenderlo  .. el previous mode distingue si se esta usando user mode o kernel mode? gracias por la ayuda Eternal Idol 
|
|
|
|
|
En línea
|
|
|
|
|
Eternal Idol
|
Indica si la llamada se origino en modo Usuario o Kernel, en el primer caso se comprobaran los parametros y el segundo no.
|
|
|
|
|
En línea
|
 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.
|
|
|
|
|
|
Eternal Idol
|
De nadas 
|
|
|
|
|
En línea
|
 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.
|
|
|
|
Zzombi
|
La unica de esas funciones que es exclusivamente de modo Usuario es OpenProcess, en este modo las otras dos son identicas (una es un alias de la otra) y lo que hacen es pasar a modo Kernel. Por ejemplo en XP en mi maquina se usa sysenter y el servicio ZwOpenProcess es el numero 7Ah (se pasa en eax): 0:000> u ntdll!ntopenprocess ntdll!ZwOpenProcess: 7c91d5fe b87a000000 mov eax,7Ah 7c91d603 ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300) 7c91d608 ff12 call dword ptr [edx] 7c91d60a c21000 ret 10h
0:000> u poi(SharedUserData!SystemCallStub) ntdll!KiFastSystemCall: 7c91e510 8bd4 mov edx,esp 7c91e512 0f34 sysenter ntdll!KiFastSystemCallRet: 7c91e514 c3 ret Windows esta diseñado de manera que se puedan crear diferentes subsystems, uno de ellos es el de Win32 que tiene librerias como Kernel32.dll, que terminan llamando a la API nativa (NTDLL.dll). En modo Kernel la diferencia fundamental entre estas dos esta dada por el PreviousMode, para hacerla corta los modulos de modo Kernel (drivers) tienen que usar las funciones Zw. también te lo agradezco  no tenía idea sobre esto pero que pasa si es un driver llamo a una funcion del tipo Nt en vez de una con Zw? si apuntan al mismo lugar... no daría lo mismo llamar una funcion nt o una zw ? Edit: ya entendi todo el asunto, perdón por preguntar inutilmente 
|
|
|
|
« Última modificación: 13 Marzo 2010, 04:21 por Zzombi »
|
En línea
|
|
|
|
|
Eternal Idol
|
Eso es en modo Usuario, en modo Kernel son dos funciones diferentes: lkd> u nt!ntopenprocess nt!NtOpenProcess: 80581702 68c4000000 push 0C4h 80581707 68e8424f80 push offset nt!ObWatchHandles+0x25c (804f42e8) 8058170c e87217f6ff call nt!_SEH_prolog (804e2e83) 80581711 33f6 xor esi,esi 80581713 8975d4 mov dword ptr [ebp-2Ch],esi 80581716 33c0 xor eax,eax 80581718 8d7dd8 lea edi,[ebp-28h] 8058171b ab stos dword ptr es:[edi] lkd> u nt!zwopenprocess nt!ZwOpenProcess: 804e3c0a b87a000000 mov eax,7Ah 804e3c0f 8d542404 lea edx,[esp+4] 804e3c13 9c pushfd 804e3c14 6a08 push 8 804e3c16 e8b69bffff call nt!KiSystemService (804dd7d1) 804e3c1b c21000 ret 10h
|
|
|
|
|
En línea
|
 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.
|
|
|
|
|