首页
社区
课程
招聘
[原创]ODbgScript 入门系列(三)ODbgScript的脚本命令(2)
发表于: 2006-5-23 18:57 52308

[原创]ODbgScript 入门系列(三)ODbgScript的脚本命令(2)

2006-5-23 18:57
52308
收藏
免费 7
支持
分享
最新回复 (44)
雪    币: 265
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
谢谢,学习中,榨取中!
无私的奉献,换来中国CRACKER的未来,哈哈
2006-7-26 17:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
好文章啊,楼主一定在铁路部分工作的
2006-7-26 18:20
0
雪    币: 200
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
第二个支持。。。。。。。顶
2008-11-13 15:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
写得太好了,谢谢。
2009-1-31 18:38
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
顶起,这是好文,比上两篇有难度,看得似懂非懂。
2009-3-29 19:32
0
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
号,支持。。。。。
2009-4-10 10:26
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
很经典,学习了,谢谢!
2010-3-16 16:30
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
风趣幽默中学习,谢谢楼主
2010-5-10 17:30
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
继续学习中...
2010-5-24 00:38
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
35
谢谢分享,学习中
2010-6-24 10:58
0
雪    币: 104
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
这是怎么写出来的啊?
2010-8-12 15:38
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
行文风格很棒。。。比较喜欢。。。其中的命令没有太仔细看,主要看注释,作用,等用到以后再查,是不是那样,记得更深记得一些。
2010-10-23 01:52
0
雪    币: 119
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
在写OD脚本时,如何将程序运行到其中一个地址时,将edx中的数据改为和eax中数据相同?
MOV 能实现吗?
2010-11-5 10:29
0
雪    币: 33
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
补课学习,辛苦了
2011-2-2 00:01
0
雪    币: 90
活跃值: (82)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
40
您的比喻很难懂。另外,语言的组织也不好。

但我尊敬您的共享精神。
2011-8-3 04:28
0
雪    币: 813
活跃值: (631)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
楼主真厉害啊!!!,值得好好学习啊
2011-8-3 06:15
0
雪    币: 90
活跃值: (82)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
42
一. 变量、注释、对话框及其他

$RESULT             :这个是系统保留变量,函数和ODS的命令返回都放这里.它还有一个隐含的变量
                     为$RESULT_1,有的返回是2个参数,第二个放这里.
$VERSION            :返回当前版本号
VAR                 :在脚本中,声明一个变量
AN                  :从指定处,对代码进行分析
CMT                 :在指定地址处,加入注释
LBL                 :在指定地址处插入一个标签
MSG                 :将指定消息,显示到一个对话框中
MSGYN               :将指定消息,显示到一个对话框中,这个对话框有“是”、“否”按钮
ASK                 :显示一个提示输入框,让用户输入,并将结果保存转保留变量$RESULT中
                    (如果用户按了取消键,则$RESULT=0)
#INC                :脚本里面包含了另外的脚本

二.断点类
------普通断点类
BP              :在指定地址设断点
BC              :清除指定地址的断点
------条件断点类
BPCND           :在指定地址处,设置条件断点
BPL             :在指定地址处设置记录断点,将表达式的结果记录到记录窗口中
BPLCND          :在指定地址处设置记录断点,如果条件为真时,将表达式的结果记录到记录窗口中
------硬件断点类
BPHWS           :在指定地址,设置硬件断点
BPHWC           :删除指定地址处的硬件断点
BPHWCALL        :删除所以的硬件断点
------内存断点类
BPRM            :在指定地址处,设置一个内存读取断点
BPWM            :在指定地址处,设置一个内存读写断点
BPMC            :清除内存断点

三.系统和操作类
-----内存操作类
ALLOC             :分配新的内存页, 你能读/写/执行. 譬如,ALLOC 2000
FREE              :释放由ALLOC申请的内存. 譬如,free $RESULT,2000
-----文件操作类
DM                :从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中
DMA               :从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中;
                   如果指定文件已存在,则将数据追加到指定文件尾部。
DPE               :提取执行模块到指定文件中。dpe "c:\unpack.exe", 401000
WRT               :Write to file (replace existing one) the only accepted symbol is
                   "\r\n"Numbers are wrote as strings... for the moment
WRTA              :Append to file
LM                :引导Dm文件到内存 ,LM is the opposite of the DM command
-----系统信息类
GPA               :在指定的动态链接库中,获得指定函数的地址。
GCMT              :获得指定地址的注释
GMEMI             :获得内存块的指定信息
GPI               :获得进程信息
                     GPI MAINTHREADID(可以是 HPROCESS,PROCESSID,HMAINTHREAD,MAINTHREADID,MAINBASE,PROCESSNAME..)
GN                :获得指定地址的符号名(比如指向API函数)
GMI               :获得指定地址所在模块的相关信息。
                     gmi eip,CODEBASE (或者CODESIZE,或者 MODULEBASE,MODULEDSIZE等)
HANDLE            :获得句柄信息
-----汇编和OD控制小类
ASM               :修改指定地址的指令。譬如:ASM eip,"mov [eax],edx"
EXEC/ENDE         :对当前调试进程,执行在EXEC和ENDE之间的指令,详细见OSCEditor,简例:
                         exec
                         mov eip,[eax]
                         ENDE
KEY               :相对于在OD中执行按键

四.流程控制类
-----ODbgScript流程控制类
EOB            :在下次中断发生时,跳转到指定标签处。注意,这个标签是脚本内的标签,而不是OD内的。
COB            :发生中断后,让脚本继续执行(移除EOB指令)。跳转标签的第一条命令往往是这个。
EOE            :在下次异常发生时,跳转到指定标签处
COE            :发生异常后,让脚本继续执行(移除EOE指令)
JA             :大于则跳到指定标签处,在cmp命令后使用
JAE            :大于等于则跳到指定标签处
JB             :小于则跳到指定标签处,在cmp命令后使用
JBE            :小于等于则跳到指定标签处
JE             :等于则跳到指定标签处
JNE            :不等于则跳到指定标签处
JMP            :跳转到指定标签.
PAUSE          :暂停脚本运行
RET            :退出脚本

-----OD流程控制类   
RUN            :相当于在OllyDbg中按                            F9
GO             :执行到指定地址处                               F4
ESTI           :相当于在OllyDbg按                             SHIFT+F7
ESTO           :相当于在OllyDbg按                             SHIFT+F9 (同F9差不多,只是将异常交由被调试程序处理。)
STI            :单步步入,相当于在OllyDbg中按                    F7
STO            :单步步过,相当于在OllyDbg中按                    F8
RTR            :相当于在OllyDbg中执行 "Run to return"操作      [Ctrl+F9]
RTU            :相当于在OllyDbg中执行 "Run to user code"操作   [Alt+F9]
AI             :在OllyDbg中执行“自动步入” [Animate into]操作  [Ctrl+F7]
AO             :在OllyDbg中执行“自动步过” [Animate over]操作  [Ctrl+F8]
TI             :相当于在OllyDbg中执行 "Trace into" 操作        [Ctrl+F11]
TO             :相当于在OllyDbg中执行 "Trace over" 操作        [Ctrl+F12]
TICND          :执行 "Trace into" 操作,直到条件为真时停止      
TOCND          :执行 "Trace over" 操作,直到条件为真时停止。譬如,tocnd "eip > 40100A" // μ± eip > 40100A ê±í£?1
TC             :关闭Trace
LBL            :在指定地址处插入一个标签
CMT            :在指定地址处,加入注释

五.汇编寄存器类(操作对象不一定是寄存器,也可以是用var声明的脚本变量)
INC           :对变量进行加一操作
ADD           :源操作数与目的操作数相加,并把相加的结果保存到目的操作数中
DEC           :对变量进行减一操作
SUB           :和汇编里的sub一样,两个数相减
AND           :源操作数与目的操作数进行逻辑与操作,并将结果保存到到目的操作数中
XOR           :源操作数与目的操作数进行异或操作,并将结果保存到到目的操作数中
OR            :源操作数和目的操作数做逻辑或操作,并将结果保存到到目的操作数中
SHL           :左移目的操作数,n比特位;并将结果保存到到目的操作数中
SHR           :右移目的操作数,n 比特位;并将结果保存到到目的操作数中
CMP           :比较 目的操作数与源操作数的大小,和其对应的汇编指令作用相同, 现支持字符串比较
REV           :字节反转.
MOV           :将源操作数移动到目的操作数中,譬如:mov eip,bugaddress2 。 bugaddress2是var声明变量。

六.字符串操作类
LEN            :获得字符串长度
FIND           :从指定地址开始在内存中查找指定的内容。格式:Find 地址,值   。譬如,find eip, #6A00E8#
FINDOP         :从指定地址开始查找指定一个指令。(而不是指令中的某个字节,返回值一定是指令开头)
FINDMEM        :在全内存中查找指定的内容
ATOI           :转换一个字符到整数,返回结果保存到保留变量$RESULT中
ITOA           :字符串进制转换,(猜测应该是字符串转换到整数)
EVAL           :计算含义变量的表达式,譬如:eval "{tmp3}{tmp2}.exe"   tmp3和tmp2都是用var声明的变量。
EXEC/ENDE      :对当前调试进程,执行在EXEC和ENDE之间的指令
FILL           :从指定地址处,填充指定长度的值 。格式:FILL 地址,长度,值
REPL           :在指定地址开始,在指定长度字节内,用“替换字符串”替换“查找字符串”  。格式:REPL 地址,查找字符串,替换字符串,长度。
SCMP           :比较字符串,目的和源比,譬如:scmp tmp1, tmp4
SCMPI          :比较字符串,只不过是源和目的比
PREOP          :获得当前地址的汇编指令
REF            :在OD中打开交叉参考窗口。譬如,REF 00401049
OPCODE         :反汇编当前指令

斗胆提个错误?
SHITF+F9,文中成了SHITF-F9
2011-8-3 09:03
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
继续学习中,还是感谢
2011-8-4 16:52
0
雪    币: 465
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
文章不错,适合新手学习脚本技术,期待你的续篇
2012-12-1 21:22
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
mark.给力。
2013-9-16 13:12
0
游客
登录 | 注册 方可回帖
返回
//