Ayuda: Programar módulos para un AV-Killer

Iniciado por Mad Antrax, 14 Octubre 2007, 00:59 AM

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

Eternal Idol

#50
Cita de: Hendriҳ en 24 Octubre 2007, 20:04 PM
Bua, en el Windbg se tiene que hacer por conexion de PC's, no??? eso es lo que no me gusta :S

Bueno, muchas gracias  ;)

Si es XP o superior podes usar lo que te dijo ̿̿̿̿̿̿̿̿̿ . File>>Kernel Debug>>Local, podes ver y modificar la memoria pero no depurar realmente.

Agrego ya que estamos que tambien se puede usar el LiveKd de Sysinternals para Windows 2000 y el descontinuado SoftICE para depurar localmente.
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

Hendrix

Muchas gracias eternal, es que no tenia el Pc para probarlo (no estoy en casa)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Eternal Idol

Cita de: Hendriҳ en 24 Octubre 2007, 20:24 PM
Muchas gracias eternal, es que no tenia el Pc para probarlo (no estoy en casa)

De nada, pero igual en cuanto quieras depurar tu codigo (que si escribis algun modulo de modo Kernel lo vas a querer hacer seguro) mejor que vayas preparando dos maquinas con puerto serial o firewire y su correspondiente cable.
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

Hendrix

intentare pasar sin, con el Debugger ese (no me acuerdo como se llama)

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Hendrix

Haber, ahora ya estoy en casa, e intentado hacer practicas y tengo un fallo (ya sabia que lo tendria), aqui el codigo:

Código (asm) [Seleccionar]
format PE native

entry DriverEntry

include 'INCLUDE\win32a.inc'
include 'INCLUDE\ddk\structs.inc'
include 'INCLUDE\ddk\ntddk.inc'
include 'INCLUDE\ddk\ntstatus.inc'
include 'INCLUDE\ddk\native_api.inc'
include 'INCLUDE\ddk\stuff.inc'



section '.c' code readable writeable executable

proc GetAddr n
     mov eax, 4
     mov ecx,[n]
     mul ecx
     mov ecx,[KeServiceDescriptorTable]  ;LocaLizar KiServiceTable //Aqui el fallo
     mov ecx,[ecx]                       ;KierviceTable
     add eax,ecx
     ret
endp

proc DriverEntry DriverObject, rp
     push msg
     call [DbgPrint]
     call [IoGetCurrentProcess]
     push eax
     push msg3
     call [DbgPrint]
     push 7ah    ; Numero de la funcion
     call GetAddr
     push eax
     push msg4
     call [DbgPrint]
     mov eax,STATUS_SUCCESS
     ret
endp

section '.d' data readable writeable

msg  db 'Driver cargado',0
msg3 db 'Mi PID es: %Xh',0
msg4 db 'La direccion de zwopenprocess es: %Xh',0

data import

syslibrary ntoskrnl,'ntoskrnl.exe'

import ntoskrnl,DbgPrint,'DbgPrint',\
                IoGetCurrentProcess,'IoGetCurrentProcess'


end data

section '.reloc' data fixups readable discardable


El fallo es en la linea que marque, se supone que se tiene que "declarar" o algo, no??? e estado mirando otros codigos aprecidos (http://www.rohitab.com/discuss/index.php?showtopic=17892&mode=threaded&pid=10020467) y tampoco se declara....Sacame de dudas Mek  :xD

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

byebye

#55
es exportada por ntoskrnl


import ntoskrnl,DbgPrint,'DbgPrint',\
                IoGetCurrentProcess,'IoGetCurrentProcess',\
                KeServiceDescriptorTable,'KeServiceDescriptorTable'
               


PD: mirate en el ddk ntosrnl.inc y veras que sorpresa jeje, no estan todas pero las puedes ir añadiendo a mano.


Hendrix

Por fin lo e cargado.... :xD :xD Me a dado esto:

CitarDriver cargado
Mi PID es: 86FC69C8h
La direccion de zwopenprocess es: 80552568h

Por lo que se puede ver que zwopenprocess no esta hookeada, y yo me pregunto, se puede hacer el proceso inverso??? es decir, sacar desde la funcion el nombre de esta funcion??? para asi "rastrear" la SSDT para buscar que apis estan hookeadas???

En el post que trabajasteis el sexe vi que el tio que tambien participaba tenia un programa para ver que API's estaban hookeadas por el sexe, este porgrama qual es???

Por si te sirve de algo, aqui te dejo el dumpeado de la SSDT:

Citarlkd> dd 868a2588
868a2588  80598746 805e5914 805e915a 805e5946
868a2598  805e9194 805e597c 805e91d8 805e921c
868a25a8  8060a880 8060b5d2 805e0cac 805e0904
868a25b8  805c9928 805c98d8 8060aea6 805aa334
868a25c8  8060a4be 8059cbbc 805a4786 805cb406
868a25d8  804feed0 8060b5c4 8056ae64 805343f2
868a25e8  80603b90 aae47aa0 805e9694 80618a56
868a25f8  805edb86 80598e34 80618caa 805986e6

Un Saludo  :)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Eternal Idol

#57
Por cierto IoGetCurrentProcess no devuelve un PID sino un PEPROCESS que siempre va a ser el de SYSTEM (DriverEntry se ejecuta siempre bajo el contexto de un hilo del sistema). PID = PsGetCurrentProcessId.

Una tecnica que se usa normalmente es apoyarse en NTDLL.dll - especialmente para las funciones que no estan exportadas - donde hay stubs que pasan a modo Kernel con el numero del servicio correspondiente, ej.:

ntdll!ZwCreateFile:
77f3f414 b83c000000      mov     eax,3Ch << numero del servicio
77f3f419 ba0003fe7f      mov     edx,offset SharedUserData!SystemCallStub (7ffe0300)
77f3f41e ff12            call    dword ptr [edx]
77f3f420 c22c00          ret     2Ch

Otra cosa, las funciones esas son las Nt* no Zw*. En modo Usuario no hay diferencia (una es alias de la otra) pero en modo Kernel no es lo mismo.

http://www.osronline.com/article.cfm?article=257
http://www.osronline.com/login.cfm?prompt=ntInsider&id=266
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

Hendrix

Si, ya sabia que no era el PID, aunque lo llame asi por llamarlo de algun modo  :)

Por cierto eternal, el IoDeleteDriver, que le tengo que pasar para terminar el proceso de mi driver??? el PEPROCESS?? En google no me sale eso  :-\ ademas, en otros codigos vi que utilizaban el IoDeleteSymbolicLink, pero tampoco se que pasarle....

Muchas gracias a los 2  :)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Eternal Idol

Cita de: Hendriҳ en 24 Octubre 2007, 22:22 PM
Por cierto eternal, el IoDeleteDriver, que le tengo que pasar para terminar el proceso de mi driver??? el PEPROCESS??

Eso lo unico que hace es dereferenciar un PDRIVER_OBJECT y no esta documentado,  no te lo recomiendo para nada. Un driver no tiene un proceso, se ejecuta en un hilo bajo el contexto de un proceso no determinado.

Cita de: Hendriҳ en 24 Octubre 2007, 22:22 PMEn google no me sale eso  :-\ ademas, en otros codigos vi que utilizaban el IoDeleteSymbolicLink, pero tampoco se que pasarle....

A IoDeleteSymbolicLink se le pasa un PUNICODE_STRING, basicamente una cadena que hace de enlace con un driver para comunicarse desde modo Usuario.
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