Flag: Tornado! Hurricane!

Blogs >> anonymouse's Blog

Created: Friday, March 31 2006 10:22.26 CST Modified: Thursday, April 27 2006 11:39.26 CDT
Printer Friendly ...
conditional logging of multiple expressions in ollydbg
Author: anonymouse # Views: 4699

ollydbg's native conditional log break points allows
logging of only a single expression at one time

the code below adds a printing functionality to
ollydbg log window
you can use it with alt+f1(commandline evaluation dilaog) or with shift+f4 (log conditional breakpoint)

the code compiling methods and usage as follows


// this code below was written by anonymouse
// any bugs comments reviews criticisms are welcome
// i have mailed pedram a precompiled cmdline.dll along with this source
// for those who dont wish to compile :) in the zip file
// hope he would link the url here

// ollydbgs native evaluate expression and log expression
// allows evaluation of a single expression only
// this code adds printing functionality to log window
// to ollydbg plugin cmdline.dll
// so we can log multiple expresssions on one single
// conditional breakpoint
// i added it to original comdline plugin so that it can also be used
// with .notation (pass command to plugin when paused)
// like
// .print eax
// .print string[403000]
// .print hex 403000 5
// .print eax
// .print unicode[403040]
// .print byte ptr ds:[403000]
// .run
// which would result in logs like this
/*
Log data
Address    Message
00401009   Breakpoint at LOGREG1.00401009 (<ModuleEntryPoint>+9)
           eax = 2
           string[403000] = logging registers in ollydbg
            dump 403000: 6c 6f 67 67 69
           eax = 2
           unicode[403040] = my dumb unicode string
           byte ptr ds:[403000] = 6c
00401009   Breakpoint at LOGREG1.00401009 (<ModuleEntryPoint>+9)
           eax = 3
           string[403000] = logging registers in ollydbg
            dump 403000: 6c 6f 67 67 69
           eax = 3
           unicode[403040] = my dumb unicode string
           byte ptr ds:[403000] = 6c
00401009   Breakpoint at LOGREG1.00401009 (<ModuleEntryPoint>+9)
           eax = 4
           string[403000] = logging registers in ollydbg
            dump 403000: 6c 6f 67 67 69
           eax = 4
           unicode[403040] = my dumb unicode string
           byte ptr ds:[403000] = 6c
*/

/* how to compile this code

save this code in a seperate file Print.c
open the origianl cmdexec.c (that comes in plug110.zip sdk)
add a declaration to the function

Comparing files Cmdexec.c and cmdexecorig.c
****** Cmdexec.c
#include "plugin.h"
int Print(char *answer,ulong parm);  // declaration of our new function


****** cmdexecorig.c
#include "plugin.h"

******

make the static char string[TEXTLEN] global by removing the static keyword

****** Cmdexec.c
static t_result  value;                // Operands V/v (expression)
// remove static keyword to make it global so that we can access it from our source file
char      string[TEXTLEN];      // Operand  S   (any string)  
static int       count;                // Operands N/n (count)
****** cmdexecorig.c
static t_result  value;                // Operands V/v (expression)
static char      string[TEXTLEN];      // Operand  S   (any string)
static int       count;                // Operands N/n (count)
******

****** Cmdexec.c

register the function to t_cmdlist structure

//register our function to t_cmdlist structure

****** Cmdexec.c
  { "HELP",  "S",  0,                 Heeeelp },   // Help on API function
  { "H",     "S",  0,                 Heeeelp },   // Ditto
  { "PRINT", "S",  0,                 Print   }
};
****** cmdexecorig.c
  { "HELP",  "S",  0,                 Heeeelp },   // Help on API function
  { "H",     "S",  0,                 Heeeelp }    // Ditto
};
******


open the makefile and add the print.obj
OBJFILES = Cmdexec.obj Command.obj print.obj
and you are set to compile the new plugin
replace the compiled dll in your plugin path

USAGE

alt+f1 to get the commandline plugin active
type you expression in a comma seperated string style
print eax,string[403005],hex 403000 5,eax,string[403000],unicode[403040],byte ptr ds:[403000],eax,ecx,edx
hit enter you will get the expressions logged to log window

Log data, item 0
Message=eax = 6 string[403005] = ng registers in ollydbg  dump 403000: 6c 6f 67 67 69
eax = 6 string[403000] = logging registers in ollydbg
unicode[403040] = my dumb unicode string byte ptr ds:[403000] = 6c eax = 6
ecx = 8160f8a8 edx = fffffffa

or shift+f4 (log conditional breakpoint
and enter your expression to log prepended with a . (dot)
see above
*/


#define STRICT                         // Avoids some type mismatches
#include <windows.h>
#include <stdio.h>
#include "plugin.h"

extern char string[TEXTLEN];  // defined in cmdexec.c

int Print(char *answer,ulong parm)
{
int i,j=0,strln,n,k,l=0,strln1,p;
char buf[TEXTLEN]={0},resstring[TEXTLEN]={0},tempstring[TEXTLEN]={0},unistr[TEXTLEN]={0};
char hexdump[TEXTLEN]={0},tempdump[TEXTLEN]={0},tempdump1[TEXTLEN]={0},tempexpr[TEXTLEN]={0};
char *splithexdump[TEXTLEN]={0},*arr[100]={0};
long hexadr,hexnum;
t_result myres;


strncpy(buf,string,(TEXTLEN-1));

// thanks to 0xf001 for making my ugly goto style splitter into a compact code
// splits the comma seperated string into its components

for(i=0; buf[i]; strln=i++)
{
if((buf[i] == ','))
{
buf[i]=0;
}
}
for(i=0; i<strln+1; i++)
{
if(buf[i])
{
arr[j++]=&buf[i];
while(buf[++i]);
}
}


for(i=0;i<j;i++)
{
snprintf(tempstring,(TEXTLEN-1),"%s",arr[i]);
if(strnicmp(tempstring,"hex",3)==0)
{
strncpy(hexdump,tempstring,(TEXTLEN-1));

// if the substring contains space split it into further components
// needed for expressions like "hex 403000 5"

for(k=0; hexdump[k]; strln1=k++)
if((hexdump[k] == ' ') || (hexdump[k] == 0x9))
hexdump[k]=0;
for(k=0; k<strln1+1; k++)
if(hexdump[k])
{
splithexdump[l++]=&hexdump[k];
while(hexdump[++k]);
}
hexadr=strtol(splithexdump[1],0,16);
hexnum=strtol(splithexdump[2],0,16);
snprintf(tempdump,(TEXTLEN-1)," dump %X: ",hexadr);
strncat(tempdump1,tempdump,(TEXTLEN-1));

for(p=0;p<hexnum;p++)
{
snprintf(tempexpr,(TEXTLEN-1),"byte ptr ds:[%x]",(hexadr+p));
n=Expression(&myres,tempexpr,0,0,NULL,0,0,Getcputhreadid());
if((!n<0) || (myres.type!=DEC_UNKNOWN))
snprintf(tempdump,(TEXTLEN-1),"%2x ",myres.u);
strncat(tempdump1,tempdump,(TEXTLEN-1));

}
strncat(resstring,tempdump1,(TEXTLEN-1));

}
else
{
n=Expression(&myres,tempstring,0,0,NULL,0,0,Getcputhreadid());
if((!n<0) || (myres.type!=DEC_UNKNOWN))
if(myres.type == DEC_STRING)
{
snprintf(tempstring,(TEXTLEN-1),"%s = %s ",arr[i],myres.value);
}
else if(myres.type == DEC_UNICODE)
{
wcstombs(unistr,myres.wvalue,sizeof(myres.wvalue));
snprintf(tempstring,(TEXTLEN-1),"%s = %s ",arr[i],unistr);
}
else
{
snprintf(tempstring,(TEXTLEN-1),"%s = %x ",arr[i],myres.u);
}
strncat(resstring,tempstring,(TEXTLEN-1));
}
}
strncpy(answer,resstring,(TEXTLEN-1));
Addtolist (0,1,answer);
return 0;
};


the precompiled plugin and src have been added to downlaods section  

https://www.openrce.org/downloads/details/206/Modified%20CmdLine%20Plug-in







Add New Comment
Comment:









There are 29,954 total registered users.


Recently Created Topics
Disassembling Motoro...
Jun/13
ida plugin writing f...
Jun/02
New version of RE-Go...
May/29
Decompiling raw bina...
May/22
Incorrect bitness wh...
May/20
PaiMei stalker modul...
May/19
Attach to program us...
May/13
IDA PRO how to make ...
May/12
FACT: OpenRCE is dead.
May/08
Int 3 anti debug?
May/05


Recent Forum Posts
Good Binary Code Pro...
alton
Int 3 anti debug?
SteveIRQL
Attach to program us...
SteveIRQL
Ollydbg 2.0 - Plugin...
openrce...
IDA PRO how to make ...
codeinject
FACT: OpenRCE is dead.
codeinject
IDA Resource Viewer ...
r2x64
FACT: OpenRCE is dead.
djnemo
FACT: OpenRCE is dead.
codeinject
FACT: OpenRCE is dead.
pedram


Recent Blog Entries
lowpriority
Apr/13
OllyMigrate Plugin for Olly...

everdox
Mar/08
2 anti-trace mechanisms spe...

everdox
Mar/07
Advanced debugging techniques

everdox
Mar/06
Branch tracing and LBR acce...

everdox
Mar/05
Using pre-paged in virtual ...

More ...


Recent Blog Comments
capadleman on:
Jun/19
Using NtCreateThreadEx for ...

newlulu on:
Jun/10
Branch tracing and LBR acce...

newlulu on:
Jun/10
Advanced debugging techniques

newlulu on:
Jun/10
2 anti-trace mechanisms spe...

newlulu on:
Jun/10
OllyMigrate Plugin for Olly...

More ...


Imagery
SoySauce Blueprint
Jun 6, 2008

[+] expand

View Gallery (11) / Submit