OD脚本学习

重要的   一般用得到的:
$RESULT  //返回值

cmp $VERSION, "1.47"
ja ``````


#INC "脚本名"


#LOG //开始记录运行指令


ADD 目的,源
add [401000],5 //[4010000]+5
add x,16.50
add y,"times"


alloc  //申请内存  RWE
alloc 1000   1000字节 保存到$RESULT放着申请内存的开始地址
Free $RESULT, 1000


AND  目的,源
and x,0F
AO   自动步过  ctrl+F8
ask 显示一个提示输入框,让用户输入 结果放在$RESULT(如果取消了则$RESULT=0)
$RESULT_1放着长度


ask "enter new EIP"
cmp $RESULT,0
je cancel_pressed
mov eip, $RESULT


cancel_pressed:
asm 地址(支持变量),指令
asm eip,"mov  eax,ecx"//将EIP指定的地方进行汇编


bc 指定地址 breakPoint Clear
bc  无后缀   删除所有断点


bp  401000   设置断点


BPCND 地址,条件 条件断点


BPHWC  401000  BreakPoint HardWare Clear


BPHWCALL   删除所有的硬件断点


BPHWS 地址,模式  "r" 读取  "w" 吸入 "x"执行


bpmc    memory clear


bprm   地址 , 大小   读取内存断点


bpwm    写入内存断点


cmp 跟OD一样


CMT   EIP,"这是OEP"  //注释


DEC  变量  减一操作


DIV   目的,源   除法


DM 地址,大小,文件名 DUMP Memory
DM 401000,1f,"dump.bin" //当前目录下生成  有则覆盖


DMA  401000,1F,"1.txt" 可追加


EOB 在下次中断发生时 跳
EOE 在下次异常发生时 跳


ESTI  Exception Step Into//shift+f7
esti


ESTO  Exception Step Continue //shift+f9
esto


EVAL   计算含义变量的表达式(用var定义)
var x
mov x,1000
eval "x的值是{ x }" // x的值是00001000


exec
pushad
pushfd
ende //保存了环境


FILL addr,len,value
fill 401000,10,90 //NOP 10h个字节
fill 401000,ff,[eax] 


find 地址,查找内容,【最大大小】//支持?? ##是HEX “”为字符串,什么都不带是内存数据  输入的16进制必须是偶数


find EIP, #6A00E8#//查找一个CALL 其第一个参数是0(push 0)
find EIP, #6A??e8#//查找一个带参数CALL 一个?代表一个字符变量
find EIP, "kernel32.dll"//查找字符串
find EIP, "ker???32.d??"//一个?代表一个字符串变量 


find eip,15ff //查找内存数据15ff


findcom 401000,"push eax"


gapi 地址
得到指定代码处的API调用信息


GMI 地址,信息(模块基地址等等)
gmi eip,codebase //$RESULT等于当前所在模块的代码段基地址




GP  401005


GPA 函数名,动态链接库名//得到指定函数地址
gpa "MessageBoxA", "user32.dll"
//$RESULT=函数MessageBoxA的地址
bp $RESULT


lm 0401000,0x100,"test.bin" //引到内存dm()


opcode addr //反汇编指定地址处的代码
opcode 00401000 //$RESULT opcode $RESULT_1汇编代码  _2字节数


repl 地址,查找字符串,替换字符串,长度


repl eip,#6a00#,#6b00#,10//10个字节以内


ret


wrt "out.txt",ebx写数据给文件 //覆盖


wrta 附加
wrta sFile,"
"


找CALL /JMP
找到  CODE 中指向 VMP1段 的CALL


var fi
var sFile
mov sFile,"log.txt"


mov fi,00401000


loop:
inc fi
find fi,#E8??????00# //
cmp $RESULT,0
je exit
mov fi,$RESULT
gci fi,DESTINATION//获取当前命令的目标地址
cmp $RESULT,460000
jb loop
cmp $RESULT,497000
jae loop


wrta sFile,fi
wrta sFile,"
"
jmp loop


exit:
ret

原文地址:https://www.cnblogs.com/zcc1414/p/3982465.html