Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
DbgShell — Un front-end de PowerShell para el motor del depurador de Windows. | Kitploit
Herramientas/GitHubGitHub/microsoft/dbgshell
Ingeniería InversaScripting y AutomatizaciónDepuradoresUtilidades y FrameworksAnálisis de Binarios
GitHubmicrosoft/dbgshell

DbgShell

Un front-end de PowerShell para el motor del depurador de Windows.

Ver Repositorio
698915hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

DbgShell

Un front-end de PowerShell para el motor de depuración de Windows.

¿Listo para tabular tu camino hacia la gloria? Para una introducción más rápida, echa un vistazo a Introducción.

Build status

Descargos de responsabilidad

  1. Este proyecto no es producido, respaldado ni supervisado por el equipo de depuradores de Windows. Si bien el equipo de depuradores agradece los comentarios sobre su API y front-ends (windbg, kd, etc.), no tienen ninguna conexión con este proyecto. No reporte errores ni envíe comentarios al equipo de depuradores sobre este proyecto.

  2. Este no es un proyecto financiado: no tiene recursos oficiales asignados y solo lo trabajan voluntarios. No adquiera ninguna dependencia de producción de este proyecto a menos que esté dispuesto a soportarlo completamente por su cuenta. Siéntase libre de crear Issues y enviar Pull Requests, pero comprenda que con los limitados recursos de voluntarios, puede pasar un tiempo antes de que sus envíos sean procesados.

  3. Este es un proyecto experimental: no está completamente maduro, y debe esperar que se realicen cambios disruptivos a menudo.

Corolario de los descargos anteriores: Evitaría adjuntar DbgShell a objetivos en vivo de alto valor.

Binarios

https://aka.ms/dbgshell-latest

Motivación

¿Alguna vez has intentado automatizar algo en el depurador? (cdb/ntsd/kd/windbg) ¿Cómo te fue?

El principal impulso para DbgShell es que es demasiado difícil automatizar cualquier cosa en el depurador. Por supuesto, existen facilidades hoy en día para ayudar a automatizar el depurador. Pero en mi opinión no están satisfaciendo las necesidades de la gente.

  • Usar el lenguaje de scripting incorporado es arcano, limitado, difícil de hacer bien y difícil de obtener ayuda.
  • Escribir un DLL de extensión de depurador completo es muy potente, pero requiere una inversión significativa, demasiado costosa para resolver problemas rápidos y 'puntuales' mientras se depuran problemas aleatorios del mundo real.
  • Los intentos existentes de proporcionar una mejor interfaz (como PowerDbg) se basan en 'scraping' y análisis de texto, lo que es enormemente limitante (por no mencionar ideológicamente molesto) y por lo tanto no pueden cumplir la promesa de una interfaz realmente mejor (son solo marginalmente mejores, en el mejor de los casos).
  • Los intentos existentes de proporcionar una forma más fácil de escribir una extensión de depurador son solo una solución temporal que aborda el dolor de desarrollar una extensión de depurador; realmente no resuelven el problema mayor. (por ejemplo, dos grandes deficiencias son: siguen siendo demasiado de bajo nivel (tienes que lidiar con la API COM de dbgeng), y no hay REPL)
  • El equipo de depuradores ha introducido recientemente scripting en Javascript. Javascript es un lenguaje mucho mejor (y más definido) que el antiguo lenguaje de scripting de windbg, pero creo que PowerShell tiene algunas ventajas, la mayor de las cuales es que nadie realmente usa un shell de Javascript: PowerShell es mucho mejor como shell combinado y lenguaje de scripting.

El objetivo del proyecto DbgShell es traer la bondad del mundo de PowerShell basado en objetos al mundo de la depuración. Cuando haces 'dt' para volcar un 'objeto', deberías obtener un objeto real. El scripting debería ser tan fácil como escribir un script de PowerShell.

El proyecto DbgShell proporciona un front-end de PowerShell para dbgeng.dll, incluyendo:

  • un "modelo de objetos" administrado (utilizable desde C# si se desea), que es de más alto nivel que la API COM de dbgeng,
  • un "proveedor de navegación" de PowerShell, que expone aspectos de un objetivo de depuración como un espacio de nombres jerárquico (para que puedas hacer 'cd' a un hilo particular, escribir 'dir' para ver la pila, 'cd' a un marco, hacer otro 'dir' para ver locales/registros/etc.),
  • cmdlets para manipular el objetivo,
  • un host de PowerShell personalizado que permite un mejor control de la experiencia CLI del depurador, así como proporcionar características no disponibles en el host estándar de powershell.exe (a saber, soporte para colorización de texto usando códigos de escape ANSI (al estilo de ISO/IEC 6429))

El host personalizado sigue siendo un programa de línea de comandos (basado en conhost.exe) (análogo a ntsd/cdb/kd), pero se puede invocar desde windbg (!DbgShell).

Además de hacer la automatización mucho más fácil y potente, también abordará otras preocupaciones, como la facilidad de uso para personas que no tienen que usar los depuradores tan a menudo. (una queja que he escuchado es que 'cuando termino necesitando usar windbg, paso todo mi tiempo en el .CHM')

Para los usuarios experimentados de windbg, por otro lado, otro objetivo es hacer la transición lo más fluida posible. Así, por ejemplo, el proveedor de espacio de nombres no es la única forma de acceder a los datos; todavía puedes usar comandos tradicionales como '~3 s', 'k', etc.

¿Qué quieres decir con 'automatización' y 'scripting'?

No me refiero solo a ese tipo de cosas donde abres un editor de texto y escribes un gran script para hacer algo complejo; también me refiero a poder crear cosas relativamente simples directamente en la línea de comandos. Hay muchas situaciones en las que te gustaría poder usar un poco de lógica, pero nada tan grande o reutilizable que incluso quisieras guardarlo. Debería ser fácil crear 'one-liners' como 'detener en CreateFile si el archivo que se abre está en el escritorio del usuario y la función Blah está en la pila'.

¿Por qué PowerShell?

Déjame ser claro: me tomó aproximadamente 4 años 'calentarme' con PowerShell. Siento que tiene bordes afilados, aspectos que son simplemente difíciles, y muchos errores, tanto en diseño como en implementación. A veces realmente me irrita. Sin embargo, los beneficios de PowerShell son convincentes, y me han convencido de que es lo mejor para usar en este proyecto:

  • Es tanto un entorno de scripting como un entorno CLI. El hecho de que tenga que hacer ambas cosas lleva a algunas cosas negativas como una curva de aprendizaje más pronunciada, pero al final es extremadamente útil, porque quieres poder tanto hacer cosas rápidamente en un REPL de línea de comandos, como escribir scripts completos y robustos.
  • Es muy descubrible: cosas como Get-Command, la finalización con tabulador, la capacidad de exponer datos jerárquicos como un sistema de archivos, las facilidades para proporcionar y sintetizar ayuda, son muy buenas.
  • Finalización con tabulador. Sé que lo mencioné en el punto anterior, pero es tan impresionante que merece su propio punto.
  • El pipeline de objetos: la naturaleza orientada a objetos del pipeline de PowerShell es mucho más potente y fácil de usar que los malos viejos tiempos del scripting basado en análisis de cadenas, que ni siquiera es gracioso. Imagina hacer 'dt' para 'volcar' un 'objeto', y obtener realmente un objeto. DbgShell hace eso.
  • La gente lo conoce: estimo que el número de personas que conocen PowerShell y/o C# es al menos varios órdenes de magnitud mayor que las personas que conocen las técnicas de scripting de windbg. Eso significa que más personas podrán 'aprender' fácilmente un depurador basado en PowerShell; y también significa que cuando la gente necesita ayuda, el grupo de posibles ayudantes es mucho mayor (para problemas relacionados con scripting, al menos).
  • PowerShell sigue siendo un shell de propósito general: al usar DbgShell, tienes acceso no solo a comandos del depurador, sino que puedes hacer 'cd' al sistema de archivos, registro, AD, etc.; puedes ejecutar Send-MailMessage, Get-WmiObject, Invoke-WebRequest, Invoke-RestMethod, ejecutar programas arbitrarios, etc.

Estado Actual

DbgShell ha estado en 'modo de prototipado' durante mucho tiempo. He pasado mucho tiempo averiguando cómo algo podría o debería hacerse, pero no necesariamente 'terminando' todo. Hay una gran cantidad de TODOs en el código actual. Así que aunque ha comenzado a ser realmente útil, el proyecto sigue siendo bastante verde. Sin embargo, definitivamente puede demostrar lo suficiente para darte una buena idea de cómo debería ser.

A continuación se muestran algunas capturas de pantalla. Es importante notar que nada de lo que ves es salida de texto de dbgeng. Aunque algunas cosas en la salida parecerán familiares, eso es solo porque he usado las características de formato y salida de PowerShell para personalizar cómo se muestran ciertos objetos: toda la salida que ves corresponde en realidad a objetos .NET reales y completos. Por ejemplo, esos mensajes ModLoad corresponden cada uno a un objeto MS.Dbg.ModuleLoadedEventArgs, que tiene más propiedades de las que se muestran cuando se envían a Out-Default. No hay análisis de cadenas de nada de dbgeng en absoluto. (Bueno... casi. He hecho algunas concesiones donde no hay otra forma de obtener información. Por ejemplo, cosas de desensamblado, o analizar el nombre simbólico de una función thunk de ajuste para encontrar el desplazamiento.)

Este es una especie de escenario 'hola mundo': adjuntarse a una instancia de cmd.exe. Primero uso el comando integrado de PowerShell Start-Process, luego canalizo la salida al comando de DbgShell Connect-Process, y luego hurgo en el espacio de nombres:

Hello DbgShell

Aquí me he adjuntado a un programa de prueba, y he mirado la pila, cambiado a un marco de pila particular, volcado variables locales, inspeccionado el valor de un std::map local, e inspeccionado información de tipo para un valor de enumeración local. Observa la visualización del valor de enumeración: no solo DbgShell maneja la búsqueda del nombre simbólico para enumerados individuales, sino también cuando múltiples enumerados están combinados con OR. No puedes saberlo por la captura de pantalla, pero hay finalización con tabulador para todas estas cosas.

tbd

Características Notables

  • Color: soporte para colorización de texto usando códigos de escape ANSI (al estilo de ISO/IEC 6429)
  • Custom formatting engine: ¿No te gustan las cosas de .ps1xml? A mí tampoco. Además de las vistas estándar de tabla, lista y personalizadas, puedes definir vistas de 'una sola línea' que son muy útiles para personalizar las visualizaciones de valores de símbolos.
  • Custom symbol value conversion: Para la mayoría de las variables, la conversión y visualización predeterminadas son buenas. Pero a veces, te gustaría que el depurador hiciera un poco más de trabajo por ti. La característica de conversión de valor de símbolo permite, por ejemplo, transformar objetos de colección STL en objetos de colección .NET que son mucho más fáciles de manejar.
  • Derived type detection: Para cuando tu variable es un IFoo, pero el objeto real es un FooImpl.
  • Rich type information: expuesta para tu placer programático.
  • P: ¿Funciona en WinDbg? Solo usaré WinDbg. R: Sí: carga el DLL de extensión DbgShellExt.dll, y luego ejecuta '!dbgshell' para abrir una consola de DbgShell.

Deficiencias Actuales

  • La mayor deficiencia actualmente es que no soporta bien el modo kernel (si ya estás en el contexto adecuado, puedes mostrar valores, pero no puedes cambiar el contexto desde DbgShell, y el espacio de nombres no está conectado).
  • Aunque puedes cargar y ejecutar extensiones de depurador tradicionales de la manera habitual, todavía faltan muchos comandos de windbg.
  • Los remotos no son compatibles: la API de dbgeng soporta la conexión a un depurador remoto. Desafortunadamente, la información de símbolos y tipos expuesta por la API de dbgeng es críticamente insuficiente para las necesidades de DbgShell, por lo que DbgShell utiliza la API de dbghelp. Desafortunadamente, no existe algo como dbghelp remoto. Necesitaremos trabajar con el equipo de depuradores para resolver este problema.

Licencia

Licenciado bajo la licencia MIT.

Contribuciones

Este proyecto acepta contribuciones y sugerencias. La mayoría de las contribuciones requieren que aceptes un Acuerdo de Licencia de Contribuyente (CLA) que declare que tienes el derecho, y efectivamente lo haces, de concedernos los derechos para usar tu contribución. Para más detalles, visita https://cla.microsoft.com.

Cuando envías un pull request, un CLA-bot determinará automáticamente si necesitas proporcionar un CLA y decorará el PR adecuadamente (por ejemplo, etiqueta, comentario). Simplemente sigue las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repos que usen nuestro CLA.

Consulta Contributing para más información sobre cómo contribuir al proyecto.

Código de Conducta

Este proyecto ha adoptado el Código de Conducta de Código Abierto de Microsoft.

Para más información, consulta las Preguntas Frecuentes del Código de Conducta o contacta a [email protected] con cualquier pregunta o comentario adicional.

Otros temas

  • Introducción a DbgShell

  • Color

  • Motor de formato personalizado

  • Conversión personalizada de valor de símbolo

  • Detección de tipos derivados

  • Información de tipo rica

  • Contribuir a DbgShell

  • DbgEngWrapper

Puedes encontrar una breve introducción en video (3 minutos) aquí: https://youtu.be/ynbg2zZ1Igc

Descargar herramienta