Random IRC quote :      <madalenasbuenas> i compartir pulpo a la luz de la luna

Windbg Scripting

Aunque el lenguaje de scripting del Windbg no es precisamente una maravilla, si se usa el Windbg con la suficiente frecuencia siempre acaba siendo conveniente tener tus scripts para llevar a cabo algunas tareas repetitivas.

Un ejemplo tipico es el caso en el que cargas un ejecutable dentro del Windbg y quieres comenzar poniendo BreakPoins hardware. Como el punto en el que el Loader de Windows ejecuta el DebugBreak es anterior al punto en el que se inicializa el contexto del hilo principal del programa, tus BreakPoints hadware desapareceran.

Una forma de solucionar ese problema es, por ejemplo, poner un BreakPoint en el EntryPoint de la aplicacion que queremos depurar y poner los BreakPoints hardware una vez que hayamos alcanzado dicho punto. Tener un Script que te ponga un punto de ruptura en el EntryPoint de la aplicacion simplifica muchisimo esta tarea:

.block
{
  r? $t0 = &@$peb->Ldr->InLoadOrderModuleList
  r? $t0 = *(ntdll!_LDR_DATA_TABLE_ENTRY**)@$t0;

  as /x ${/v:$Base} @@c++(@$t0->DllBase)
  as /msu ${/v:$Mod} @@c++(&@$t0->FullDllName)

  .block
  {
    .echo ${$Mod} at ${$Base}

    r $t0 = ${$Base} + poi(${$Base} + 3c)
    .printf "PeHeader at: %p \n", @$t0

    r $t1 = ${$Base} + poi(@$t0 + 28)
    .printf "Entry point found at %p \n", @$t1

    bp @$t1
  }

  ad ${/v:$Base}
  ad ${/v:$Mod}
}
 

Un ejemplo de uso de este script depurando la calculadora de windows:

0:000> .symfix c:\symbols
0:000> .reload
Reloading current modules
………..
0:000> $$>a<c:\ep.wds
C:\WINDOWS\system32\calc.exe at 0x1000000
PeHeader at: 010000f0
Entry point found at 01012475
 

A mi personalmente me gusta mas el sistema de extensiones del Windbg, pero tengo que reconocer que para algunas cosas en las que no te quieres complicar mucho la vida, los scripts de Windbg pueden estar bien :o)

6 Comentarios para “Windbg Scripting”

  1. Comment por matalaz | 06/21/11 at 6:08 pm

    A mi siempre me ha parecido bizarro el lenguaje de scripting de WinDbg. Muy potente, pero bizarro como él solo.

  2. Comment por inocraM | 06/21/11 at 8:04 pm

    /*++

    Bueno, yo estoy de acuerdo contigo en que es bastante bizarro, y ademas, tampoco creo que sea tan potente. Esta claro que lo suyo es hacerse una extension con las movidas que mas usas, y eso si que es bastante flexible y potente… Pero a falta de pan buenas son tortas, y los scripts estos siempre te pueden sacar de algun apuro…

    –*/

  3. NCR
    Comment por NCR | 06/21/11 at 9:55 pm

    Como anillo al dedo! gracias!.

  4. Comment por erg0t | 06/22/11 at 4:42 am

    el scripting de windbg es lo peor!
    no se que mente siniestra pudo haber «diseñado» semejante barbaridad… de todos modos sigue siendo uno de los debuggers mas decentes.

  5. Comment por Hugo | 08/14/11 at 7:58 am

    Hola amigos.

    No es por ser mala onda, pero por si acaso «bizarro» significa «valiente» [1]. Muchas personas lo mal interpretan como la palabra inglesa «bizarre», que es algo completamente distinto a bizarro.

    Un cordial saludo.

    [1] http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&TIPO_BUS=3&LEMA=bizarro

  6. Comment por sha0 | 09/04/11 at 4:12 pm

    Es una mezcla de masm con brainfuck bash scripting y comandos wingdb XD
    muy útil el script.

    salu2

Se han cerrado los comentarios