Random IRC quote :      <matalaz> voy a patentar la democracia

Descubriendo funcionalidades ocultas en programas

descubriendoSon muchos los casos en los que programadores dejan para su propio uso parámetros de configuración no documentados o funcionalidad «oculta» en las aplicaciones que desarrollan. El otro día dimos con lo que a primera vista parecía uno de estos casos:

Nos encontrabamos Miguel y yo en plena reunión matutina (el desayuno con pincho de tortilla incluido), cuando me comentaba que en una de sus frecuentes sesiones de depuración creía haber encontrado funcionalidad en el propio API de Windows para ocultar threads, no sin antes acabar el pincho de tortilla nos pusimos a comentarlo…

El código en cuestión se encontraba en la función RtlQueryProcessDebugInformation, exportada por NTDLL.DLL, esta función es usada por varias funciones de Tool Help exportadas por KERNEL32.DLL, las cuales son usadas para obtener información sobre los procesos activos en el sistema.

 

rtlqueryprocessdebuginformation

 

Previamente al código que observamos en este desensamblado se llama a RtlCreateUserThread en caso de que el proceso del que estemos recolectando información sea «remoto». La cuestión era … ¿qué información se estaba estableciendo en el Thread que se creaba?, si consultamos la documentación de ZwSetInformationThread vemos que el parametro ThreadInformationClass que corresponde con ese extraño 0x11, sólo tiene dos posibles valores:

ThreadInformationClass
Specifies one of the system-defined values, ThreadPriority or ThreadBasePriority.

¿Qué será ese 0x11?, es aquí cuando uno decide echar mano del DDK donde están definidas las estructuras necesarias para utilizar estas funciones, nos encontramos con lo siguiente:

 

 ThreadInfoClass

 

 Resulta que si que aparecía en «ntddk.h»! y el nombre era bastante descriptivo. Despues de hacer algunos cutre-programas nos dimos cuenta de que en realidad el thread si que se listaba… ¿para qué se usaba este item entonces?, googleando un poco encontramos un comentario en rootkit.com, vaya parece que no eramos los primeros que nos parabamos a pensar en esto :-).

Finalmente descubrimos que este item aparentemente es utilizado para evitar que el debugger reciba eventos de debug del thread que manipula, y que el propio Sistema Operativo lo utiliza para evitar interferir en una posible depuración al obtener otro proceso información del los procesos activos en el sistema.

Conclusiones finales:

  •  El DDK nos puede dar más de una sorpresa (no todo lo que está ahí definido está documentado 😀 )
  •  Tal y como comentan en ese post en rootkit.com esta puede ser una técnica antidebug interesante 😉

 

Un saludo y hasta la próxima!

 

 

 

 

7 Comentarios para “Descubriendo funcionalidades ocultas en programas”

  1. Comment por Gabriel Gonzalez | 06/29/06 at 11:28 am

    Uhmmm Interesante, os encanta la NTDLL, eh?

  2. Comment por mballano | 06/29/06 at 1:16 pm

    Ya te digo, va a haber que hacer un club de fans de ella 😀

  3. Comment por StrikeFirst | 07/03/06 at 5:05 pm

    Muy interesante,
    Otro funcionalidad no documentada de microsoft, hay que ver la cantidad e cosas que «nos ocultan»
    Por cierto, EXCELENTE blog, se ha quedado el primero en mi lista de bookmarks
    Saludos.

  4. Comment por svch0st | 07/07/06 at 12:37 am

    Sois los putos amos!!
    Voy a empezar a desayunar yo tambien pintxo de tortilla en lugar de esa mierda de cereales a ver si agudizo el ingenio…

    Un Saludo,
    Indurain

  5. Comment por mballano | 07/07/06 at 12:07 pm

    hahah, debe ser la tortilla esa 🙂 , yo antes no pensaba en estas cosas!!, le tenemos que hacer un contrato indefinido al «paco» xDD.

    Un saludo y … me alegro de que os guste el blog, por lo menos ya no somos nosotros los únicos ke lo leemos, que parecía esto un diario colectivo! 😀

  6. Comment por ggonzalez | 07/07/06 at 12:20 pm

    A mi me hace mas efecto el cafe 😀

  7. Comment por krozmic | 05/24/09 at 7:31 pm

    Muy interesante… y muy buena la web!!!
    Saludos!!!

Se han cerrado los comentarios