Random IRC quote :      @matalaz> pero tu ya tienes carnet de fuzzer? <@jon> tengo el practico el jueves que viene

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 0×1000000
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. Comentario 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. Comentario 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
    Comentario por NCR | 06/21/11 at 9:55 pm

    Como anillo al dedo! gracias!.

  4. Comentario 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. Comentario 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. Comentario 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

Dejar un comentario »»