ODbgScript脚本编写资料与示例

5星(超过95%的资源)
所需积分/C币:12 2011-10-28 10:46:28 203KB PDF
28
收藏 收藏
举报

OllyScript脚本语言是一个种类汇编的语言。你使用它来控制ODbgScript和脚本运算.
4A0自动步过 ANimate over> 在01 ly Dbg中执行“自动步过”[ Animate over]操作。 相当于在01 lyDbg中按下 CTRL+E8 例: ao 4ASK问题 <ASK> 显示一个提示输入框,让用户输入,结果保存变量$ RESULTˆ屮(如果用户按了取消键,则 RESULT=0) $ RESULT1中放着输入的长度 (注:程序将判读你输入的是字符,$ RESULT的结果是输入字符数的数目,整型/2,中文数*2) 例 ask Enter new Elp cmp RESULt, 0 je cancel pressed mov eip, RESULT 4ASM地址,指令 <ASSeMble> 修改指定地址的指令 并将修改后的汇编指令长度保存到保留变量 SRESLLT中 例 asm elp," mov eax,ecx"/将当前指令修改为 mov eax,ecx 4 ASMTXT文件 ASSEmBle) 汇编指定文件中的指令。 将汇编指令保存到保留变量$ RESULT中 并将汇编指令长度保存到保留变量$ RESULT1中 例: smtxt ele," my asl.txt"//将 Ilyas.txt文件中的asm转成 opcode后写入EIP t Atoi str, base=16 转换字符串到16进制整聖,L可以将任何进制转成16进制整型 返回结果放到$ RESULT 例: i toaF /字符串"F"转成了整型,结果会等于F itoa"10",10 //字符串"10″代表进制,结果会等于A 4BC地址 <Breakpoint Clear> 清除指定地址的断点。 例 bc401000 //清除401000处的断点 c X //清除X(变量值)处的断点 c elp //清除当前LIP处的断点 Bp addr <Breakpoint> 在指定地址设断点 例 bp401000 //在401000处下断点 bp X //在Ⅹ(变量值)处下断点 p clp //在当前EIP处下断点 ↓ BPCND地址,条件 BReakpOint on CoNdition 在指定地址处,设置条件断点。 例 bend401000,"ECX--1″//当代码执行到401000且ecx等于1时,程序暂停 4BPD函数字符串 清除调用函数断点,函数为字符串表示 例 bpd getVersion //取消呼叫 Getversion的断点 4 BPHWC地址 <BreakPoint HardWare Clear> 删除指定地址处的硬件断点。 例 bphwc401000/清除401000处的断点 BPHWCALL 清除所有的硬件断点 例 BPHWCALL //清除所有的硬件断点 4 BPHWS地址,模式 BReakpOint HardWare Set> 在指定地址,设置硬件断点。有三种模式:"r"-读取,"w"-写入或者"x"-执行 此断点只支持1个字节的动作 例 bphws40100,"x"//当执行到此地址时发生屮断 Bphws 101000,"r //当读取101000的时候,发送中断 4BPL地址,表达式 BReakpOint of logging 在指定地址处设置记录断点,将表达式的结果记录到记录窗口中。 例 bpl40000,"eax"/每次执行到401000时,都将eax寄存器的结果记录 4 BPLCND地址,表达式,条件 BReakpOint of Logging on CoNDition) 在指定地址处设置记录断点,如果条件为真时,将表达式的结果记录到记录窗口中。 例 blend40100,"eax","eax>1″//如果执行到401000时,满足eax》l,则将eax寄存器 的结果记录 4 BPMC BReakpOint Memory Clear> 清除内存断点。 例 pInc 4BPRM地址,大小 BReakpOint on Read Memory 在指定地址处,设置一个内存读取断点。“大小”是指内存中的字节大小 例 bpm401000,FF在401000中设置内存读断点,内存中的大小为FF 4BPWM地址,大小 <BreakPoint on Write memory> 在指定地址处,设冒一个内存写入断点。“大小”是指内存中的字节大小。 例: bpwm 401000, FF //在401000中设置内存写断点,内存中的大小为FF 4BPX函数字符串 设置调用函数断点,函数为字符串表示 返回下了断点的地址数量,结果保存在保留变量$ RESULT中 例 bpx Getversion //下呼叫 GetVersion断点,断下的语句为ca11[xxx 4CMP目的操作数,源操作数 <CoMPare> 比较目的操作数与源操作数的大小,和其对应的汇编指令作用相同 可以是各种数值,甚至可以是字符串(对大小不敏感) cmp y, X //比较两个变量(Y和X)的大小 cmp eip, 401000 //比较EIP和401000的大小 4CMT地址,字符串 COmMent> 在指定地址处,加入注释。 例 cmt cip,"这是入口"/当前地址处加上“这是入口”的注释 4 COB COntinue On Breakpoint) 发生中断后,让脚本继续执行(移除EOB指令) 例 4 COE < Continue on exception>(移除EOE指令) 发生异常后,让脚本继续执行 例 COE 4 DBh DEbUgger Hided> 隐藏调试器 例 dbh 4 DBS DEbUgger Show> 对隐藏的调试器操作进行恢复,不再隐藏。 例 dbs 4DEC变量 KDECrement by 1> 对变量进行减一操作 例 ecv //V=V-1 DIV目的操作数,源操作数 <div> 源操作数与目的操作数进行除法操作,并将结果保存到到目的操作数中 例 div x. oF //X-X/OF Iv eax. X eax-eax/X div101000],5 //[401000]/5 4DM地址,大小,文件名 KDump Memory. 从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中 例 dm 401000, IF,c:dump. bin 4DMA地址,大小,文件名 KDump Memory Appended> 从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中;如 果指定文作已存在,则将数据追加到指定文件尾部。 例 dma 401000, 1F,c: dump. bin 4DPE文件名,入口 KDump Process with Entry point> 提取执行模块刭指定文件中。 “入口”用米设定入口地址 这个命令用来抓取文件,还是比较好用的,因为直接利用了OD强大的内存管理功能. 例 dpe"c:test.exe",eip//入山为当前地址,保存为C盘下test.exe 4EOB标签 EXecution On Breakpoint> 在下次中断发生时,跳转到指定标签处。 此功能和EOE命令常常让新于迷惑不解,其实就是遇见中断做脚本的流程转向 如果还冇不懂,请看下文的答疑解惑章节 例 eob SOME LABEL 4EOE标签 EXecution On Exception> 在下次异常发生时,跳转到指定标签处。 例 eoe SOME LABeL 4 ESTI EXception STep Into> 相当于在o1 lyDbg按 SHIFT-F7。 例 esti 4 ESTO EXception STep cOntinuel 相当于在0 IlyDbg按 SHIFT-F9。 例 esto 4 eVAL KEVALuate) 计算含义变量的表达式。 变量必须已经在脚本中声明 注意:插到字符中时,要放在大括号{}中。 结果保存在保留变量$ RESULT中 这句和其它语句结合将广生很多的变化,用好它将让你的脚本十分灵活 例 var x oVx,1000 eval"x的值是{x}"/执行后$ RESULT为"x的值是00001000″ 4 EXEC/ ENDE KEXECute/END of Execute) 对当前调试进程,执行在EXEC和ENDE之间的指令。 冇这个命令就是你可以直接跳入进程,对进程进行直接控制. 它的原理就是取当前进程的信息进行保存,然后新分配一个代码内存区(可读/写/执行.大小 1000) 调用ω汇编器将你的汇编语句转成 OPcode,将 OPcode拷贝到代码区,然后将EP指向你的代 码开头 然后将控制权交给你.执行完后将EP归还原位,然后将控制权交还 ODbgScripu 这里的好处就是让你以很高的效率来避兔在较慢的脚本环境运行需要高效的操作 !注意:由丁进程控制权交给你了,那么,你的代码有效性将只有你自己来控制了 !注意:执行后不保存现场.这都需要你来做工作.(要保存现场,你可以使用 pushad, popad 有大括号的,会被大括号中的变量的值替代 例 /以下是做移动操作 var y mov x, eax lOV y, ODEADBEEF exec mov x, ty //到进程中新开的代码区去, mov eax, ODEADBEEF将被执行 moy ecx, x) // mov ecx,eax将被执彳 ende //以下是调用调试程序的 ExitProcess数 exec push o call exitProcess ende ret 4 FILL addr, len, value 从地址addr开始填充长度为len的值 value !注: value的值最大8个字节,可以为寄存器值,标志位值,变量值,16进制值,10进制值,[指 针操作数 如 fill401000,10,90 //NOP10h个字节 fi1140100,ff,[eax] //取出[eax]值,填充到401000,长度为ff fill 401000, ff, SRESULT //将变量$ RESULT的值填充到401000,长度为ff 4FIND地址,查找内容,[最大大小] KFIND> 从指定地址开始在内存中查找指定的内容。 如果査找成功,地址会保存到保留变量$ RESULT中,否则 SRESULT将等于0。 查找的串支持通配符“??”(见下面的例子)。 ##中的为HEX,""中的为字符串,什么都不带的为内存数据 !注:输入的16进制字符必须是成偶数,从1.52版开始支持直接变量和数据查找. 例 find eip, *6A00E&# //查找一个Ca1l,其的第一个参数为0(push0 find eip,#6A??上8# /查找个带参数的Ca11,个?代表一个字符常量 find eip," kernel32.d1″//查找字符串" kernel32.d11 find eip,"ker??32.d??"//查找带通配符的?字符串,一个?代表个字符常量 (请注意这里的通配符?和HEX中的?不同) find eip, Iff //查找内存数据15ff(代码为ffI15) (noy Lmp, #rr15# find eip, tmp //査找变量tmp中的数值,tmp=ff15 (mOy Lmp, kerne132 dll find eip, tmp //查找变量tmp中的字符串" kerne32.d11 (mov tmp, 15ff find eip, tmp //查找变量tmp中的内存数据15ff(注意和#ff15#区别) (ask"输入需要的数据 find eip, RESULT //输入的为#ff15#," Kerne132.d11",15ff就同上面三例子 find eip, #ffl5#, ff 从EIP开始,FF大小范围内,查找字符15, 斗 FINDOP地址,査找内容,[查找范围] <FIND OPcode> 从指定地址开始査找指定一个指令,这个指令是以指定内容为开始的 如果查找成功,地址会保存到保留变量$ RESULT中,否则 SRESULT将等于0。 查找的串支持通配符“??”(见下面的例子)。 注意: finds由于是 opcode查找,不支持字符串查找 findop和find的区别是 findop查找到的必须是 opcode 1.52起攴持直接变量和内存数据 例 findop 401000, #61#// find next POPAD findop 101000, #6A??+//find next PUSh of something 译者注 对比一下FIND和 FINDDOP的区别: 地址 数据 代码 00401007 B83300 MOV EAX, 33 0040100C 33F6 XOR ESL ESI find401007, 33# //$ RESULT等于401008 finddop401007,#33# //$ RESULT等于40100C t FINDMEM what[ StartAddr 从整个内存开始在内存屮查找指定的内容 如果查找成功,地址会保存到保留变量$ RESULT中,否则 SRESULT将等于0。 查找的串支持通配符“??”(见下面的例子)。 Example findmem #6A00E8#// find a push 0 followed by some kind of call findmem #6A00E8#, 00400000// search it after address 00400000 4FRE地址大小 释放由 ALLOC申请的内存 Example: 11oc1000 free RESULT, 1000 4GAPI地址 获得指定代码处的API调用信息 API信息保存到保留变量$ RESULT中。 如果符号名是一个API函数,则 $ RESULT保存API信息 $ RESULT1保存链接库名(比如 kerna132) $ RESULT2保存符号名(比如 ExitProcess) $ RESULT3保存调用地址XXX(比如ca11xx) 注意:这个和GN的区别是(N必须指向IAT地址;而GAPI直接给出代码地址就可得出API:还 有如果你是在此处下了软件断点,请先清除断点再用此句,因为软件断点修改了代码为CC;这 里如果不清除此处的软件断点,将造成这句不能很好的识别 例 GAPI401000 (call kernal32 ExitProcess GAP⊥EIP /合看当前代码是否是API调用,不是则返回 斗 GCMT addr 获得指定地址处的解释

...展开详情
试读 22P ODbgScript脚本编写资料与示例
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
haoliao2000 不错的资料,谢谢分享!
2014-08-24
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
ODbgScript脚本编写资料与示例 12积分/C币 立即下载
1/22
ODbgScript脚本编写资料与示例第1页
ODbgScript脚本编写资料与示例第2页
ODbgScript脚本编写资料与示例第3页
ODbgScript脚本编写资料与示例第4页
ODbgScript脚本编写资料与示例第5页

试读结束, 可继续读2页

12积分/C币 立即下载