ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:27.33KB ,
资源ID:10619245      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10619245.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OD脚本编写资料与示例.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OD脚本编写资料与示例.docx

1、OD脚本编写资料与示例OD脚本编写资料与示例OllyScript脚本语言是一个种类汇编的语言。你使用它来控制ODbgScript和脚本运算.在后面的文档中, “源操作数” 和 “目的操作数”表示以下含义:- 十六进制常数,既没有前缀也没有后缀。 (例如:是00FF, 而不是 0x00FF 和 00FFh的形式) 十进制常数,在后缀中加点. (例如:100. 128. 也可以是浮点数128.56,浮点数只能保留小数点后2位)- 变量,这个变量必须在使用前用Var进行定义- 32位寄存器 (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP)。 16位寄存器 (

2、AX, BX, CX, DX, SI, DI, BP, SP) 8位的寄存器(AL, AH, . DL, DH)- 被中括号括起来的内存地址 (例如:401000 指向内存地址为401000里存放分数据, ecx 指向内存地址为寄存器ecx里存放分数据).- 一个标志位,带有感叹号前缀(!CF, !PF, !AF, !ZF, !SF, !DF, !OF)- 字符串,也可叫数据序列。其格式为: #6A0000# (数值在两个“#”号之间),两个“#”号之间必须包含至少有一个数值。 1234567ABCDEF- 包含“?”通配符的字符串。比如 #6A?00# 或者 #6?0000#3.1.1 保留

3、变量-$RESULT-保存某些函数的返回值,比如FIND函数,等等。在ODbgScript的脚本调试窗口,你能观察到它的变换,并且可以修改它.$VERSION-ODBGScript的版本信息,整个是系统保留变量名.例:cmp $VERSION, 1.47 /比较是否大于 1.47版ja version_above_147 3.1.2 指令-#INC 文件名 -一个脚本文件包含另外一个脚本.就像调用子程序一样.两个脚本中的变量名不能相同.例:#inc test.txt #LOG-开始记录运行指令指令会显示在OllyDbg的log窗口中,每条记录前都会加上“-”的前缀例:#logADD 目的操作数

4、,源操作数-源操作数与目的操作数相加,并把相加的结果保存到目的操作数中,支持字符串相加.例: add x, 0F / x=x+Fadd eax, x /eax=eax+xadd 401000, 5 /401000=401000+5浮点数相加add x,16.50 /x=x+16.50(字符串相加)add y, times / 如果在次之前y=1000 ,则在执行完此指令之后y=1000 timesAI-在OllyDbg中执行“自动步入” Animate into操作。相当于在OllyDbg中按下CTRL+F7例:aiALLOC 大小-申请内存, 你能读/写/执行.例: alloc 1000 /

5、新申请内存,大小为1000,返回结果$RESULT放着申请的内存开始地址.free $RESULT, 1000AN 地址-从指定地址处,对代码进行分析。例:an eip / 相当于在OllyDbg中按 Ctrl+A键AND 目的操作数, 源操作数-源操作数与目的操作数进行逻辑与操作,并将结果保存到到目的操作数中。例: and x, 0F /x=x&fand eax, x /eax=eax&xand 401000, 5 /401000=401000&5AO-在OllyDbg中执行“自动步过” Animate over操作。相当于在OllyDbg中按下CTRL+F8例:aoASK 问题-显示一个提

6、示输入框,让用户输入,结果保存变量$RESULT中(如果用户按了取消键,则$RESULT=0)。$RESULT_1中放着输入的长度.(注:程序将判读你输入的是字符,$RESULT_1的结果是输入字符数的数目,整型/2,中文数*2)例:ask Enter new EIPcmp $RESULT, 0je cancel_pressedmov eip, $RESULTASM 地址, 指令-修改指定地址的指令。并将修改后的汇编指令长度保存到保留变量$RESULT中例:asm eip, mov eax, ecx /将当前指令修改为 mov eax,ecxASMTXT 文件 -汇编指定文件中的指令。将汇编指

7、令保存到保留变量$RESULT中并将汇编指令长度保存到保留变量$RESULT_1中例:asmtxt EIP,myasm.txt /将myasm.txt文件中的asm转成opcode后写入EIP.ATOI str , base=16.-转换字符串到16进制整型,可以将任何进制转成16进制整型返回结果放到 $RESULT 例:itoa F /字符串F转成了整型,结果会等于Fitoa 10, 10. /字符串10代表十进制,结果会等于ABC 地址-清除指定地址的断点。例:bc 401000 /清除401000处的断点bc x /清除X(变量值)处的断点bc eip /清除当前EIP处的断点BP ad

8、dr-在指定地址设断点例:bp 401000 /在401000处下断点bp x /在X(变量值)处下断点 bp eip /在当前EIP处下断点BPCND 地址, 条件-在指定地址处,设置条件断点。例:bpcnd 401000, ECX=1 /当 代码执行到401000且 ecx等于1 时,程序暂停BPD 函数字符串-清除调用函数断点,函数为字符串表示.例:bpd GetVersion /取消呼叫GetVersion的断点BPHWC 地址-删除指定地址处的硬件断点。例:bphwc 401000 /清除 401000处的断点BPHWCALL-清除所有的硬件断点例:BPHWCALL /清除所有的硬件

9、断点BPHWS 地址, 模式-在指定地址,设置硬件断点。有三种模式: r - 读取, w - 写入 或者 x - 执行.此断点只支持1个字节的动作.例:bphws 401000, x /当执行到此地址时发生中断.Bphws 401000,r /当读取401000的时候,发送中断BPL 地址, 表达式-在指定地址处设置记录断点,将表达式的结果记录到记录窗口中。例:bpl 401000, eax / 每次执行到401000时,都将eax寄存器的结果记录BPLCND 地址, 表达式, 条件-在指定地址处设置记录断点,如果条件为真时,将表达式的结果记录到记录窗口中。例:bplcnd 401000, e

10、ax, eax 1 / 如果执行到401000时,满足eax1,则将eax寄存器的结果记录BPMC-清除内存断点。例:bpmcBPRM 地址, 大小-在指定地址处,设置一个内存读取断点。 “大小” 是指内存中的字节大小。例:bprm 401000, FF /在401000中设置内存读断点,内存中的大小为FFBPWM 地址, 大小-在指定地址处,设置一个内存写入断点。“大小” 是指内存中的字节大小。例:bpwm 401000, FF /在401000中设置内存写断点,内存中的大小为FFBPX 函数字符串-设置调用函数断点,函数为字符串表示.返回下了断点的地址数量,结果保存在保留变量$RESULT

11、中.例:bpx GetVersion /下呼叫GetVersion断点,断下的语句为 call xxxxxCMP 目的操作数, 源操作数-比较 目的操作数与源操作数的大小,和其对应的汇编指令作用相同。可以是各种数值,甚至可以是字符串(对大小不敏感).例: cmp y, x /比较两个变量(Y和X)的大小,cmp eip, 401000 /比较EIP和401000的大小CMT 地址, 字符串-在指定地址处,加入注释。例:cmt eip, 这是入口 /当前地址处 加上“这是入口”的注释COB-发生中断后,让脚本继续执行(移除EOB指令)例:COBCOE-(移除EOE指令)发生异常后,让脚本继续执行

12、例:COEDBH- 隐藏调试器例:dbhDBS-对隐藏的调试器操作进行恢复,不再隐藏。例:dbsDEC 变量-对变量进行减一操作例:dec v /V=V-1DIV 目的操作数, 源操作数-源操作数与目的操作数进行除法操作,并将结果保存到到目的操作数中。例: div x, 0F /X=X/0Fdiv eax, x /eax=eax/xdiv 401000, 5 /401000/5DM 地址, 大小, 文件名-从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中例:dm 401000, 1F, c:dump.binDMA 地址, 大小, 文件名-从指定地址处开始,在内存中提取指定大小

13、的数据,并保存到指定的文件中;如果指定文件已存在,则将数据追加到指定文件尾部。例:dma 401000, 1F, c:dump.binDPE 文件名, 入口-提取执行模块到指定文件中。“入口”用来设定入口地址。这个命令用来抓取文件,还是比较好用的,因为直接利用了OD强大的内存管理功能.例:dpe c:test.exe, eip /入口为当前地址,保存为C盘下test.exeEOB 标签-在下次中断发生时,跳转到指定标签处。此功能和EOE命令常常让新手迷惑不解,其实就是遇见中断做脚本的流程转向.如果还有不懂,请看下文的答疑解惑章节.例:eob SOME_LABELEOE 标签-在下次异常发生时,

14、跳转到指定标签处。例:eoe SOME_LABELESTI-相当于在OllyDbg按 SHIFT-F7。例:estiESTO-相当于在OllyDbg按 SHIFT-F9。例:estoEVAL -计算含义变量的表达式。变量必须已经在脚本中声明。注意:插到字符串中时,要放在大括号 中。结果保存在保留变量$RESULT中.这句和其它语句结合将产生很多的变化,用好它将让你的脚本十分灵活.例:var xmov x, 1000eval x的值是 x / 执行后$RESULT为 x的值是00001000EXEC/ENDE-对当前调试进程,执行在EXEC和ENDE之间的指令。有这个命令就是你可以直接跳入进程,

15、对进程进行直接控制.它的原理就是取当前进程的信息进行保存,然后新分配一个代码内存区(可读/写/执行.大小1000)调用OD汇编器将你的汇编语句转成OPcode,将OPcode拷贝到代码区,然后将EIP指向你的代码开头.然后将控制权交给你.执行完后将EIP归还原位,然后将控制权交还ODbgScript.这里的好处就是让你以很高的效率来避免在较慢的脚本环境运行需要高效的操作.!注意:由于进程控制权交给你了,那么,你的代码有效性将只有你自己来控制了.!注意:执行后不保存现场.这都需要你来做工作.(要保存现场,你可以使用pushad,popad)有大括号的,会被大括号中的变量的值替代。例:/ 以下是做

16、移动操作var xvar ymov x, eaxmov y, 0DEADBEEFexecmov x,y / 到进程中新开的代码区去,mov eax,0DEADBEEF 将被执行mov ecx, x /mov ecx, eax 将被执行ende/ 以下是调用调试程序的ExitProcess函数execpush 0call ExitProcessenderetFILL addr,len,value-从地址addr开始填充长度为len的值value!注:value的值最大8个字节,可以为寄存器值,标志位值,变量值,16进制值,10进制值,指针操作数.如:fill 401000,10,90 /NOP

17、10h个字节fill 401000,ff,eax /取出eax值,填充到401000,长度为fffill 401000,ff,$RESULT /将变量$RESULT的值填充到401000,长度为ffFIND 地址, 查找内容 ,最大大小-从指定地址开始在内存中查找指定的内容。如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。查找的串支持通配符“?”(见下面的例子)。#中的为HEX,中的为字符串,什么都不带的为内存数据!注:输入的16进制字符必须是成偶数 从1.52版开始支持直接变量和数据查找.例:find eip, #6A00E8# / 查找一个Call,其的第

18、一个参数为0 (push 0)find eip, #6A?E8# / 查找一个带参数的Call,一个?代表一个字符常量find eip,kernel32.dll /查找字符串kernel32.dllfind eip,ker?32.d? /查找带通配符的?字符串,一个?代表一个字符串常量 (请注意这里的通配符?和HEX中的?不同)find eip,15ff /查找内存数据15ff(代码为ff115)(mov tmp,#ff15#find eip,tmp ) /查找变量tmp中的数值,tmp=ff15(mov tmp,kernel32.dllfind eip,tmp ) /查找变量tmp中的字符串

19、kernel32.dll(mov tmp,15fffind eip,tmp /查找变量tmp中的内存数据15ff(注意和#ff15#区别)(ask 输入需要的数据find eip,$RESULT /输入的为#ff15#,Kernel32.dll,15ff就同上面三例子find eip,#ff15#,ff /从EIP开始,FF大小范围内,查找字符ff15,FINDOP 地址, 查找内容,查找范围-从指定地址开始查找指定一个指令,这个指令是以指定内容为开始的。 如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。查找的串支持通配符“?”(见下面的例子)。注意:find

20、op由于是opcode查找,不支持字符串查找. findop和find的区别是findop查找到的必须是opcode. 1.52起支持直接变量和内存数据例:findop 401000, #61# / find next POPADfindop 401000, #6A?# / find next PUSH of something译者注:对比一下FIND 和FINDDOP的区别:地址 数据 代码00401007 B8 3300 MOV EAX, 330040100C 33F6 XOR ESI, ESIfind 401007, #33# /$RESULT等于401008finddop 401007

21、, #33# /$RESULT等于40100CFINDMEM what , StartAddr-从整个内存开始在内存中查找指定的内容如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。查找的串支持通配符“?”(见下面的例子)。Example:findmem #6A00E8# / find a PUSH 0 followed by some kind of callfindmem #6A00E8#, 00400000 / search it after address 00400000FREEFREE 地址 大小-释放由ALLOC申请的内存.Example:allo

22、c 1000free $RESULT, 1000GAPIGAPI 地址-获得指定代码处的API调用信息API信息保存到保留变量$RESULT中。如果符号名是一个API函数,则$RESULT保存API信息$RESULT_1保存链接库名(比如 kernal32)$RESULT_2保存符号名(比如 ExitProcess)。$RESULT_3保存调用地址XXXX(比如 call xxxxx)注意:这个和GN的区别是GN必须指向IAT地址 而GAPI直接给出代码地址就可得出API 还有如果你是在此处下了软件断点,请先清除断点再用此句,因为软件断点修改了代码为CC 这里如果不清除此处的软件断点,将造成这

23、句不能很好的识别.例:GAPI 401000 (call kernal32.ExitProcess)GAPI EIP /查看当前代码是否是API调用,不是则返回0GCMT addr-获得指定地址处的解释GMEMI addr, info-获得指定地址处内存的信息.信息可以是 MEMORYBASE, MEMORYSIZE or MEMORYOWNERExample:GMEMI addr, MEMORYBASE / After this $RESULT is the address to the memory base of the memory block to which addr belong

24、sGMI 地址, 信息-获得指定地址所在模块的相关信息。“信息”可以是模块基地址MODULEBASE, 模块大小MODULESIZE, 代码段基地址CODEBASE 或者 代码段大小CODESIZE (如果您想在将来的版本中,获得更多的信息,请联系我)。信息会保存到保留变量$RESULT中 (如果没有找到信息,则$RESULT等于0).例:GMI eip, CODEBASE / 这条指令执行后,$RESULT等于当前所在模块的代码段基地址。GN 地址-获得指定IAT地址的符号名(比如指向API函数)。符号名将保存到保留变量$RESULT中。如果符号名是一个API函数,则$RESULT是符号名$RESULT_1保存链接库名(比如 kernal32)$RESULT_2保存符号名(比如 ExitProcess)。例:gn 450100GO 地址-执行到指定地址处 例:go 401005GPA 函数名, 动态链接库名-在指定的动态链接库中,获得指定函数的地址。如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。在设置API函数断点时,这个指令非常有效。例:gpa MessageBoxA, user32.dll / 这条指令执行后,$RESULT等于函数MessageBoxA的地址,您可以使用bp $RESULT设置断

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1