PCAN做的电脑开不了机一直在欢迎界面如何开

您好,欢迎回来
您好,欢迎来到中国供应商!
& & & 图片
【德国PEAK-System基础级CAN总线开发包|PCAN-Basic:初级CAN软件API】图片
价&&&格:面议
所在地:广东 广州
免责声明:
当前页面为您展示的德国PEAK-System基础级CAN总线开发包|PCAN-Basic:初级CAN软件API图片由广州虹科电子科技有限公司自主提供,德国PEAK-System基础级CAN总线开发包|PCAN-Basic:初级CAN软件API图片真实性、有效性、合法性均有店铺所有企业完全负责,中国供应商对此不承担任何保证责任。
友情提醒:
德国PEAK-System基础级CAN总线开发包|PCAN-Basic:初级CAN软件API图片仅作为参考,不代表产品最终品质,如您查看德国PEAK-System基础级CAN总线开发包|PCAN-Basic:初级CAN软件API图片有意购买该产品,建议您向德国PEAK-System基础级CAN总线开发包|PCAN-Basic:初级CAN软件API厂家索要样品,确定产品无误后购买,谨防上当受骗。
电话:020-
地址:广东 广州 黄埔区 科学城科学大道99号科汇金谷三街2-701
技术支持:
按拼音检索:
主办单位:中国互联网新闻中心版权所有 中国互联网新闻中心中国供应商(www.china.cn)您好,欢迎回来
您好,欢迎来到中国供应商!
PCAN-UDS API:UDS标准(ISO 14229-1)的API实现|CAN总线开发包
PCAN-UDS API:UDS标准(ISO 14229-1)的API实现|CAN总线开发包
UDS(ISO14229-1)标准用于统一诊断服务和定义与控制器(ECU)的通讯。该Windows软件采用各种服务测试控制器。该过程在客户服务器上完成,该程序位于客户端(也叫测试仪)。UDS采用ISO-TP标准作为传输协议,因此UDS可传输数据块高达4095字节规模。
陈女士销售总监
营业执照已上传
邮箱已验证
手机已验证
发货地广东 广州
发货期限3天内发货
供货总量100套
营业执照已上传
邮箱已验证
手机已验证
经营模式|经销批发
注册资本|50万人民币
企业类型|私营独资企业
公司地址|广东 广州 黄埔区 科学城科学大道99号科汇金谷三街2-701
查看全部分类
本页信息为广州虹科电子科技有限公司为您提供的""产品信息,如您想了解更多关于"PCAN-UDS API:UDS标准(ISO 14229-1)的API实现|CAN总线开发包"价格、型号、厂家请联系厂家,或给厂家留言。
加工定制否品牌德国PEAK-System型号PCAN-UDS API用途CAN总线开发包产品认证ISO 9001和ISO 14001
PCAN-UDS API:UDS标准(ISO 14229-1)的API实现|CAN总线开发包
UDS&(ISO&14229-1)标准用于统一诊断服务和定义与控制器(ECU)的通讯。该Windows软件采用各种服务测试控制器。该过程在客户服务器上完成,该程序位于客户端(也叫测试仪)。UDS采用ISO-TP标准作为传输协议,因此UDS可传输数据块高达4095字节规模。例如,除了交换维护信息之外,也能传输固件。&PCAN-UDS&API实现该标准的功能性,基于8项基本功能。它们被分类为分配、配置、地址映射配置、信息、和通讯。&PCAN-UDS利用PCAN-Basic编程接口访问电脑上的CAN硬件。PCAN-Basic附带于我们的每个CAN接口产品内。&特点●UDS协议&(ISO&14229-1)&实现,用于和控制器通讯●Windows&DLLs用于开发32-bit&和&64-bit&应用程序●利用我们的CAN接口产品通过CAN总线进行物理通讯●利用PCAN-Basic编程接口访问电脑上的CAN硬件●利用PCAN-ISO-TP编程接口(ISO&15765-2)用于通过CAN总线传输数据包高达4095字节&&&&&&&&系统要求●Windows?&10,&8.1,&7,&Vista&(32/64-bit)●至少512&MB&RAM&和&1&GHz&CPU●我们的电脑CAN接口●PCAN-Basic&API●PCAN-ISO-TP&API&发货清单●接口DLL、例程、和适用于所有常用编程语言的头文件●文档(PDF)格式●文档(HTML帮助格式)
供应商信息
总部位于广州市的虹科(前身是宏科)成立于 1995 年,我们为各个行业提供系统开发,测试和诊断***专业的技术和知识。专注于测试,测量和控制,我们已经成为优秀的供应商和合作伙伴。虹科开发和提供创新的全面的解决方案,用的高技术手段和我们的客户一起完成这些方案。 随着系统开发的综合性和广泛性不断提高,我们的经验和专业技术也有很大成长。
顾客服务:
十几年的顾客服务名副其实 有效的技术支持 提供安装和维护方面的专业建议
虹科的专家提供测试,测量和控制方面的深度协助
虹科也将承担全部项目 - 从概念研究到全部计划和执行
在虹科的每个产品中,都包含量身定做的使用手册满足特定需要 服务人员随时准备为你提供帮助
虹科承诺长期顾客支持
虹科和美国,德国,英国和瑞典的合作伙伴一起帮你实现目标
经验和知识:
经验丰富的和专注的技术团队。十几年的测试,测量和控制产品销售经验
现场验证,高可靠的系统
先进的技术:测试,测量和控制
虹科的合作伙伴:美国,德国,英国和瑞典的公司都是本行业的领先者
来自我们客户的***有价值的现场经验
50万人民币
公司注册时间
公司所在地
广东 广州 黄埔区 科学城科学大道99号科汇金谷三街2-701
私营独资企业
法定代表人
工商注册号
主营产品或服务
陈女士销售总监
地址广东 广州 黄埔区 科学城科学大道99号科汇金谷三街2-701
公司主页http://www.hkaco.com
广东 广州 黄埔区 科学城科学大道99号科汇金谷三街2-701
广州虹科电子科技有限公司
国家会展中心(上海)
深圳会展中心
深圳会展中心
上海新国际博览中心
中国国际展览中心(老馆)
中国国际展览中心(老馆)
深圳会展中心
广州国际采购中心
中国国际展览中心(老馆)
免责声明:
本页面所展现的 PCAN-UDS API:UDS标准(ISO 14229-1)的API实现|CAN总线开发包 信息及其他相关推荐信息,均来源于其对应的商铺,信息的真实性、准确性和合法性由该信息的来源商铺所属企业完全负责。中国供应商对此不承担任何保证责任。
友情提醒:
建议您在购买相关产品前务必确认供应商资质及产品质量,过低的价格有可能是虚假信息,请谨慎对待,谨防欺诈行为。
建议您在搜索产品时,优先选择信贸通会员,信贸通会员为中国供应商VIP会员,信誉度更高。
广州虹科电子科技有限公司
电话:020-
地址:广东 广州 黄埔区 科学城科学大道99号科汇金谷三街2-701
技术支持:
按拼音检索:
主办单位:中国互联网新闻中心版权所有 中国互联网新闻中心中国供应商(www.china.cn)
成功收藏此产品 上传我的文档
 上传文档
 下载
 收藏
粉丝量:15
百度道客巴巴及豆丁文档资料汇集,全面优质,包括工作总结,调查报告,论文,试题,试卷,电子书,模板,教材教辅教程等;涉及管理,广告营销,技术,艺术,教育,考试,出国,新闻,电脑,网络,手机,健身,娱乐,休闲等全方位内容;适合营销,广告,管理,公务员,会计师,建造师,金融师,经济师,教师,学生,家长,职员,研究生,养生家,艺术家,自然及社会学者,娱乐者等各种人士阅读,下载,分享,打印或收藏
 下载此文档
正在努力加载中...
proe配置文件config.pro配置对照表
下载积分:800
内容提示:proe配置文件config.pro配置对照表
文档格式:XLS|
浏览次数:327|
上传日期: 13:09:45|
文档星级:
全文阅读已结束,如果下载本文需要使用
 800 积分
下载此文档
该用户还上传了这些文档
proe配置文件config.pro配置对照表
关注微信公众号当前位置: >>
Ollydbg2.0x简明帮助手册
OllyDbg 2.01 简明帮助手册Translated by Antiy Cert 本译文译者为安天实验室工程师,本文系出自个人兴趣在业余时间所 译,本文原文来自互联网的公共方式,译者力图忠于所获得之电子版本进行 翻译,但受翻译水平和技术水平所限,不能完全保证译文完全与原文含义一 致,同时对所获得原文是否存在臆造、或者是否与其原始版本一致未进行可 靠性验证和评价。 本译文对应原文所有观点亦不受本译文中任何打字、排版、印刷或翻译 错误的影响。译者与安天实验室不对译文及原文中包含或引用的信息的真实 性、准确性、可靠性、或完整性提供任何明示或暗示的保证。译者与安天实 验室亦对原文和译文的任何内容不承担任何责任。翻译本文的行为不代表译 者和安天实验室对原文立场持有任何立场和态度。 免责声明 译者与安天实验室均与原作者与原始发布者积极联系未果,亦未获得相 关的版权授权,鉴于译者及安天实验室出于学习参考之目的翻译本文,而无 出版、发售译文等任何商业利益意图,因此亦不对任何可能因此导致的版权 问题承担责任。 本文为安天内部参考文献,主要用于安天实验室内部进行外语和技术学 习使用,亦向中国大陆境内的网络安全领域的研究人士进行有限分享。望尊 重译者的劳动和意愿,不得以任何方式修改本译文。译者和安天实验室并未 授权任何人士和第三方二次分享本译文,因此第三方对本译文的全部或者部 分所做的分享、传播、报道、张贴行为,及所带来的后果与译者和安天实验 室无关。本译文亦不得用于任何商业目的,基于上述问题产生的法律责任, 译者与安天实验室一律不予承担。 注: 如有原作者联系方式或信息请与我们联系。 前言Ollydbg 是一款结合 IDA 和 SoftICE 功能的调试工具,因其简易的操作和强大的功能, 目前已成为安全研究领域使用最广泛的调试解密工具。目前 Ollydbg 软件已发布 2.0x 版本, 但内附的帮助手册尚无中文翻译版发布。基于合作分享,互惠互利的理念,同时为更多新版 Ollydbg 的使用者提供便利的条件,安天 CERT 对帮助手册展开翻译工作,并形成当前的译 文版本。现将中文版帮助手册与安全研究领域的从业者分享,希望能够对新版本 Ollydbg 的 使用者有所帮助。译文存在的错误和不足之处,欢迎大家批评指正。 ――Antiy CERT ? squashed bug 2.0 OllyDbg ?
Oleh Yuschuk, 版权所有 OllyDbg 中使用的全部品牌名称和产品名称、附带的文件或帮助的均为商标、注册商标或其 各自所有者的商标名称。在提及来源的前提下,您可以由此帮助文件自由摘录。 千里之行,始于足下 ――中国格言 目录OllyDbg 2.01 简明帮助手册 .............................................................................................................. 1 前言 ...................................................................................................................................................... 3 介绍 ...................................................................................................................................................... 7 1.10 与 2.xx 版本的区别 ............................................................................................................ 7 OllyDbg 2.01 概述 ...................................................................................................................... 8 免注册........................................................................................................................................ 12 法律部分.................................................................................................................................... 12 安装............................................................................................................................................ 14 支持............................................................................................................................................ 14 本帮助所使用的设置选项 ........................................................................................................ 15 第一步 启动一个应用程序 .............................................................................................................. 16 第一课 断点 .............................................................................................................................. 18 第二课 给代码打补丁 .............................................................................................................. 22 第三课 运行跟踪 ...................................................................................................................... 24 Text.exe ...................................................................................................................................... 26 汇编器和反汇编器 ............................................................................................................................ 29 信息概述.................................................................................................................................... 29 反汇编模式................................................................................................................................ 30 符号名称的识别........................................................................................................................ 31 条件命令.................................................................................................................................... 31 汇编语法.................................................................................................................................... 32 未公开的 80x86 命令................................................................................................................ 33 内存映射 ............................................................................................................................................ 34 信息概述.................................................................................................................................... 34 内核存储.................................................................................................................................... 35 备份............................................................................................................................................ 35 在内存入口中断........................................................................................................................ 35 Dumps ................................................................................................................................................ 36 搜索 .................................................................................................................................................... 39 搜索二进制模式串.................................................................................................................... 39 搜索引用.................................................................................................................................... 40 搜索引用的字符串.................................................................................................................... 42 常量搜索.................................................................................................................................... 42 单个命令搜索及一系列命令的搜索 ........................................................................................ 43 搜索所有项目............................................................................................................................ 47 搜索所有跨模块调用 ................................................................................................................ 47 线程 .................................................................................................................................................... 49 信息概述.................................................................................................................................... 49 步进多线程应用程序................................................................................................................ 49 异常处理 ............................................................................................................................................ 50 表达式和监视窗口 ............................................................................................................................ 51 信息概述.................................................................................................................................... 51 基本元素.................................................................................................................................... 52 存储器内容................................................................................................................................ 53 有符号数据和无符号数据 ........................................................................................................ 55 运算符........................................................................................................................................ 56 复杂表达式................................................................................................................................ 57 字符串操作符............................................................................................................................ 57 分析............................................................................................................................................ 58 流程............................................................................................................................................ 58 栈变量........................................................................................................................................ 59 分支语句(switch)和级联式 IF 语句 ......................................................................................... 61 循环............................................................................................................................................ 61 寄存器预测................................................................................................................................ 64 已知的 API 函数 ....................................................................................................................... 65 标准库函数................................................................................................................................ 66 调试 .................................................................................................................................................... 69 打开程序.................................................................................................................................... 69 OllyDbg――一个即时性调试器 .............................................................................................. 70 附加到正在运行的程序 ............................................................................................................ 70 调试子进程................................................................................................................................ 71 断点............................................................................................................................................ 71 运行跟踪和分析........................................................................................................................ 76 命中跟踪(Hit trace) ................................................................................................................... 79 直接调试 DLL ................................................................................................................................... 81 Loaddll.exe ................................................................................................................................. 81 帮助 .................................................................................................................................................... 83 命令帮助.................................................................................................................................... 83 API 函数的帮助 ........................................................................................................................ 83 自定义 ................................................................................................................................................ 84 字体............................................................................................................................................ 84 着色............................................................................................................................................ 87 Code Highlighting(代码高亮) .............................................................................................. 89 Shortcuts(快捷键)................................................................................................................. 91 GUI Ianguage(GUI 语言) ..................................................................................................... 91 给 Ollydbg 重命名............................................................................................................................. 94 致歉 .................................................................................................................................................... 95 介绍1.10 与 2.xx 版本的区别实际上,32 位调试器 OllyDbg 的第二版是经过推倒重来地设计的。因此,它比上一版本 更快、更强也更稳定。好吧,至少以后会是这样,这是因为有些 1.10 版本的实用功能在 2.01 版尚无法使用。 2.01 版本具有一些 1.10 版本不曾拥有的新功能。包括: ? 全面支持 SSE 和 AVX 指令集。SSE 寄存器可直接访问,无需经过代码注入。 ? 在调试器上下文执行命令时,可以跟踪执行速度――包括执行条件和记录――最高支 持每秒执行 1,000,000 条命令。 ? 内存断点数量不受限制。 ? 内存和硬件可设置条件断点。 ? 更为可靠,分析时不需要借助跟踪。 ? 分析器可识别未知函数的参数个数,有时还支持参数含义的识别。 ? 支持脱离(Detaching)被调试进程。 ? 支持子进程的调试。 ? 提供在 TLS 回调时暂停的选项。 ? 提供未处理异常过滤器,可放行未处理异常。 ? 内建整数和 FPU 命令帮助。 ? 可定制快捷键。 ? 用户界面支持多语言。 OllyDbg 2.01 概述OllyDbg 2.01 是一款 32 位汇编级分析调试器,界面直观,在没有源代码或解决编译级 别问题的时候,尤其适用。 所需环境:虽然本工具主要在 Windows XP 环境下开发和测试,但可在各种 32 位版本 Windows 系统运行,包括:NT、2000、XP、2003 服务器版、Vista、Windows 7 等等。不 再支持早期基于 DOS 的版本(如 95、98、ME) 。这就是说,如果你安装了 Microsoft Layer for UNICODE1,你也许可以启动 OllyDbg ,甚至可以设置断点,但我并不保证能够稳 定操作。2.01 版尚无法工作于 64 位 Windows。 为使调试工作显得舒适,你至少也要有 1GHz 主频的 CPU。OllyDbg 很占内存。如果你打开全部功能调试大型应用程序,它会轻易 用掉 200~300 兆内存来备份和分析数据。支持指令集。OllyDbg 2.01 支持全部现有 80x86 兼容 CPU:MMX、3DNow!、Athlon 扩展、 包括 SSSE3 和 SSE4 在内的 SSE 指令,以及 AVX 指令。 可配置性。具有超过 120 个控制 OllyDbg 行为和表现的选项(哦,不对!目前还没有那么 多!)。 数据格式。Dump 窗口可按全部常见格式显示数据:十六进制、ASCII、多字节、 UNICODE、16/32 位有符号/无符号/十六进制整数、32/64/80 位浮点数、地址、反汇编 (MASM、IDEAL、HLA 或 AT&T 格式)。同时可以解析和标注多种 Windows 特有结构, 包括 PE 头、PEB、线程数据块等。你还可以 Dump 系统内存(仅限 XP)、文件及原始磁 盘。 使用帮助。OllyDbg 2.01 提供了全部 80x86 整数、浮点指令的内建帮助。如果你拥有 Windows API 帮助文件(win32.hlp,因为版权问题未予提供),可以加进来,从而在系统 API 调用时获得即时帮助。 程序启动。你可在命令行指定调试文件、由菜单选择、向 OllyDbg 窗口拖拽文件、重新启动 最后调试程序,或者附加到运行中的应用程序。OllyDbg 支持实时调试(just-in- time debugging)和调试子进程。你可以脱离调试进程,该进程可继续执行。无需安装! 代码高亮。反汇编器可以对不同类型的指令(跳转、条件跳转、压栈出栈、调用、返回、特1简称 MSLU,是一种为创建 Unicode 软件而提供给开发者的软件库。――译者注 权指令和非法指令)和不同运算(常规、FPU/SSE 或段/系统寄存器,栈上内存或其它内存 运算,常数) 加亮。你可以创建自定义高亮方案。 线程调试。OllyDbg 可以调试多线程应用程序。你可以在线程之间切换,挂起、恢复和杀死 线程或者改变其优先级。线程窗口会显示各线程的错误(根据 GetLastError 调用的返回结 果)。 分析功能。分析器是 OllyDbg 至关重要的部分。它可以识别过程、循环、switch、表、 GUID、常量和嵌入代码的字符串、复杂的结构、API 函数调用、函数参数个数、导入节, 等等。对于未知函数,它不仅会尝试确定其栈上的参数个数,甚至还会尝试判断这些参数的 意义。分析功能可以让二进制代码变得更为清晰、易于调试,也减少了误判和崩溃的概率。 该功能不依赖于具体编译器,对任何 PE 程序均可胜任。 全面支持 UNICODE。 所有 ASCII 字符串可用的功能,均适用于 UNICODE,反之亦然。 OllyDbg 能够识别 UTF-8 字符串。 命名(Names)。OllyDbg 认识许多常量的符号名(目前是 10800 个),比如窗口消息、错 误码或位字段,并可在已知函数调用中对其解码。 已知函数。OllyDbg 认识超过 2300 个常用 Windows API 函数,并能对其参数解码。你还可 以自行添加函数描述。你也可以在已知或猜测的函数设置日志断点(logging breakpoint ), 将参数规范记录下来。 调用(Call)。OllyDbg 可以向后跟踪(backtrace )栈上的嵌套调用,哪怕调试信息已经失 效或者调用过程使用了非标准的序言(prologs )和结语(epilogs)2。 堆栈(Stack)。OllyDbg 在堆栈窗口使用了启发式识别返回地址和栈结构的方法。如果程 序暂停在已知函数,堆栈窗口会对已知或猜测的函数参数解码。堆栈功能还可以跟踪和显示 结构化异常(SE)的处理函数链。如果集成的堆栈遍历功能不好用,你也可以切换到使用 Dbghelp.dll 的方式。 搜索功能。相当多!可以搜索单个指令(精确或模糊)或指令序列,搜索常量,搜索二进制 或文本字符串(不必连续),搜索所有涉及地址的指令,搜索常量或地址范围,搜索所有到 指定位置的跳转,搜索全部文本字符串的引用,搜索全部交叉调用,在整个已分配内存中使 用掩码搜索二进制序列,搜索整型或浮点型数字等等。如果找到了多个位置,你可以快速地2即由编译器在函数开始和结束时生成的代码。――译者注 在它们之间切换。 断点功能。 OllyDbg 支持所有常见断点类型:软件断点(INT3 或其它几条指令)、内存断 点和硬件断点。你可以指定放行次数及设置暂停条件。也可以有条件地将断点数据记录到日 志中。软件断点和内存断点的个数不受限制:在命中跟踪的极端情况下,OllyDbg 可以设置 成百上千的 INT3 断点。如果 CPU 足够快,OllyDbg 处理断点的速度可达每秒 2 万到 3 万 次。 监视器。监视器会在程序每次暂停的时候计算表达式。你可以使用任意复杂的寄存器、常 量、地址表达式、布尔及代数操作 执行。你可以单步执行程序、进入子例程或让程序立即执行。你可以让程序执行到下一次返 回,执行到指定位置,在深层嵌套的系统 API 中通过反向跟踪回到用户代码。在程序运行 时,你可以完全地控制它。比如说,你可以查看内存、设置断点,甚至在运行中修改代码。 无论什么时候,你都能够暂停或重新执行所调试程序。 命中跟踪(Hit trace)。命中跟踪功能会显示到目前为止执行过哪些指令或过程,该功能供 你测试代码的全部分支。命中跟踪由当前位置开始执行,在各个尚未跟踪到的分支设置软断 点。这些断点会在指令被执行(命中)后移除。 运行跟踪(Run trace)。运行跟踪功能会以单步模式执行程序,且约定都传输到大的缓冲 区里。运行跟踪速度很快:在快速指令仿真功能被启用的情况下,OllyDbg 的跟踪速度可达 每秒 1 百万条指令! 运行跟踪功能会记录寄存器(不含 SSE/AVX)、标志位、已访问内存 的内容、线程错误,以及――针对具有自修改能力的代码――修改前指令。你可以指定停止 运行跟踪的条件,比如地址范围、表达式或指令。你还能将运行跟踪的结果保存到文件里, 然后比较两次运行的结果。运行跟踪功能支持向后跟踪,以及对千百万条指令的执行的历史 详细分析。 概要(Profiling)。概要功能(profiler)可计算出运行跟踪缓冲区里面列出的一些指令的执 行次数。借助概要功能,你会了解哪部分代码用掉了最多的执行时间。 补丁(Patching)。内置汇编器会自动选用尽可能短的代码。二进制编辑器支持同时以 ASCII 、UNICODE 和十六进制形式显示数据。以往的复制粘贴功能仍然有效。自动备份功 能支持取消所做的修改。你可以直接向可执行文件复制修改后的内容。OllyDbg 甚至可以对 其适当修正。 UDD。OllyDbg 将全部程序及关联模块的信息都保存在独立的文件中,在重新加载模块 时,再恢复这些信息。这些信息包括标签、注释、断点、监视、分析数据和条件等等。 UDL。你可以将编译器所支持的标准库转换为 UDL 库,分析器会据此识别代码中的库函 数。 插件(Plugins)。你可以通过编写自己的插件(或由互联网下载插件),扩展 OllyDbg 2.01 的功能。定制化。你可以指定自定义的字体、颜色和高亮方案。 文字到语音转换(Text-to-speech)。该功能适用于视觉障碍用户:激活文字到语音转换选 项后,OllyDbg 可以朗读当前选中的内容。 还有更多!本列表远远谈不上完整,还有更多特色功能,这些功能让 OllyDbg 2.01 成为一 款令人满意的调试器。 免注册OllyDbg 2.01 版权属于 Oleh Yuschuk, 版权所有 。这是一款闭源的免费软件。作 为用户,,无论是出于私人用途还是商业用途(取决于许可协议),你都可以免费使用 OllyDbg。无需注册。我曾经在最初的版本里采用了注册机制,这只是为了了解我的程序有 多么流行。结果远远超出预期。注册单令我不堪重负,显著地降低了我的生产力。因此: OllyDbg 2.01 是免注册的。 如果您是将 OllyDbg 应用于教学目的的教授或老师,我乐于与您取得联系(Ollydbg@tonline.de),如果您有何令我的产品更易于学习或更能满足教学目的的建议,尤其欢迎。法律部分商标信息。OllyDbg 中使用的全部品牌名称和产品名称、附带的文件或帮助的均为商标、注 册商标或其各自所有者的商标名称。使用它们仅出于识别目的。 许可协议。本许可协议(以下简称为D协议‖)附带于 OllyDbg 2.01 版本及相关文件(以下简 称为D软件‖)。使用本软件即说明你已同意本协议全部条款及规定之约束。 本软件版权属于 Oleh Yuschuk(以下简称为D作者‖),版权所有
Oleh Yuschuk。 你被允许免费使用本软件。你可在任意数量的存储设备(如硬盘、内存记忆棒等)上安装本 软件,并可将本软件备份任意数量。 本软件依原样提供给用户,并不做出明确或暗示的担保,这些担保包括但不限于软件用于特 定目的的适用性。在任何情况下,作者都不会承担在正常使用、误用或无法使用本软件时造 成的,任何特殊的、附带的、间接的、直接的或任何其它的利润损失或保留损失,即使作者 已被告知这种损失的可能性。作者尤其不会对使用附加到本软件的第三方插件造成的危害负 责。 除非且仅限于扩展本软件功能之外,你不可修改、反编译、反汇编本软件,或对本软件采用 逆向工作方法,此类活动受相应法律明确限制。你不可单独发布或使用本软件的部分内容。 在满足以下条件的情况下,你可以制作或发布本软件的复制品:a) 复制品包含原始发布时 的全部文件,且这些文件未被修改; b) 若你随同本软件发布了任何其它文件,这些文件必 须按此形式明确标明,而且其使用条款不能超出本协议的约束条件;c) 你不能收取费用 (除非为传输介质,如 CD),即使你在发布时包含了附加文件。本协议仅适用于当前 OllyDbg 2.01 版本。对于其它版本,受与此类似的独立许可协议保护。 公平使用。多数软件厂商会明确禁止你尝试反汇编、反编译、使用逆向工程方法或修改其程 序。该限制了会涉及到你的应用程序所使用的所有第三方动态库,包括系统库。如果你有任 何疑问,请联系版权所有者。这里所说的D公平使用‖,可能会导致误解。你可能想 You may want to discuss whether it applies in your case with competent lawyer. 请勿将 OllyDbg 用于非法 用途! 你的隐私和安全。在我正确无误上传文档(包括 OllyDbg.exe 及其支持文件)到互联网的前 提下(以下简称D原生的 OllyDbg‖),以下声明适用于版本 1.00 到 2.01。这些文件不包括 任何第三方插件。 对于原生的 OllyDbg,我担保以下内容: ? 永远不会试图窥探所调试程序之外的进程,或有类似网络客户端/服务端(行为,或 出于任何意图发送任何数据到任何计算机(除非是用户指定的远程文件),或存在类 似任何类型木马的行为,只有一种情况会例外: 如果你允许 dbghelp.dll 访问微软符 号服务器(Microsoft Symbol Server),该 DLL 可能会与微软产生数据交换。对应的 选项默认是关闭的,你需要明确将其激活。 ? 除非有明确请求,否则不会读写系统注册表。该请求会受以下两个注册表键值影响:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Auto ? ? 除非你明确请求,否则不会创建、重写或修改任何系统目录文件。 除非有明确请求,否则不会修改任何计算机上的任何可执行文件或 DLL,包括 OllyDbg 本身。 ? 仅在你明确请求后,才会记录你的调试活动(不包括保存于 ollydbg.ini 的文件历史和 记录调试信息的.udd 文件)。甚至我还可以担保,在没有得到你的允许的前提下, OllyDbg 只会在其所在目录及选项(Options)对话框指定的目录内创建或修改文件。 ? (最后一条,但 by no means least)不会包含显式或隐式的强迫你注册本程序的D唠 叨‖(nag)界面,也不含有任何依赖注册或过期失效的功能限制。 小心病毒。尽管我已使用多种反病毒软件检查过原生的文件,但不能排除 OllyDbg 发行版 会受到病毒感染,或者会有木马伪装成 OllyDbg 及其所需文件。对于你的计算机受到任何由 病毒导致的损害,或者受到任何由于木马附着在本软件的部分文件、全部文件以及由于第三 者对于 OllyDbg 的修改而造成的损害,本人概不负责。安装OllyDbg 无需安装。简单地建立一个新的文件夹,再将 Odbg201.zip 解压至该文件夹即可。 如有必要,可拖拽 ollydbg.exe 的连接到桌面,为其建立一个快捷方式。在 Windows 7 平台 下,需要在该快捷方式的属性中,为其激活D以管理员身份运行‖(&Run as administrator&)。 如果你是一个坚持要在 Windows NT 4.0 系统下运行 OllyDbg 的顽固派(没有问题!),你 会需要用到 psapi.dll。该库文件并未不包含在本软件中。2.01 版本不打算支持在基于 DOS 的 Windows 版本运行,但是,通过安装 MIcrosoft Layer for UNICODE,是可以做到这一点 的。一些很老很老的版本,比如 Windows 95 并不包括 VirtualQueryEx 和 VirtualProtectEx 两 个 API 函数。这些函数对于调试功能非常重要。如果 OllyDbg 提示缺少这类函数,正常的 调试功能将无法进行。请升级你的操作系统吧。 总之,Windows 95、98 和 ME 已经不再被支持了。不妨使用 OllyDbg 1.10, 它是免费的, 而且兼容于这些类系统。支持http://www.ollydbg.de 网站提供有限支持。在该网站可以下载错误修正及新版本程序。如果 你遇到问题,可发送邮件到 Ollydbg@t-online.de。一般我会在一周内回复。如果你没有明确 禁止,我保留摘录你邮件内容并发布到我的网站的权力。 全部源代码均可提供,不过需要付钱。这些源代码是完全自主实现的(Dclean-room‖),并 未使用任何第三方代码。你既可以购买完整的全部源代码,也可以只购买其中的一部分,比 如反汇编模块,汇编模块或分析模块。想了解更多,可以发邮件给我。顺便提一句,反汇编 模块(Disassembler) 2.01 版本已经按 GPL v3 协议发布,可以我的主页下载。 各版本 OllyDbg 的.udd 文件格式描述均可以免费索取。 本帮助所使用的设置选项一些选项的设置会影响到 OllyDbg 的外观及功能。本帮助文件假定这些选项均使用默认设 置。这些选项了也包含快捷键设置。多数 OllyDbg 的快捷键都是可以重新设置的。如果你 的快捷键设置与此不同,可通过菜单操作,或恢复为默认设置:选项(Options )-&编辑快 捷键( Edit shortcuts...)-&恢复默认(Restore defaults)。 第一步 启动一个应用程序熟悉一个新的程序最好的办法就是练习。假设你已经简要的熟悉 80x86 处理器的体系结 构和指令集,也了解进程线程和模块的概念,并且知道可移植的可执行文件由头和节组成。 此处有惊喜!在 OllyDbg 分布档案有一个小的测试应用程序命名为- -Test.exe。 启动 OllyDbg,并加载 test.exe。你可以从资源管理器中拖拽这个测试应用程序,或按 F3,或选择文件|从主菜单中打开。OllyDbg 会打开应用,分析它的代码并在主模块的入口点 暂停。(主模块是 Test.exe 本身):你将会看到很多取决于 OllyDbg 行为的控制选项,类似于上面的图片。OllyDbg 是一个 老式的没有浮华修饰的 MID 应用程序。其外观已被性能优化。默认的小字体和窄边框可以 使你在显示屏上看到最大化的信息量。当然,你随时可以调整颜色和字体使他们适合你的眼 睛。 大多数的 OllyDbg 的屏幕上面充满了 CPU 窗口。这是你将要花费大部时间调试应用程 序的窗口。他由五个窗格组成:反汇编 信息 Dump寄存器堆栈 反汇编指令列表存储在指定的内存中。对于每一条指令,它的信息包括在内存中的十六 进制地址,它的标签,二进制指令代码,反汇编后的指令名称以及指令的注解。 如果应用程序中途停止,地址栏中当前执行点(寄存器指针 EIP 所指向处)会被标记为 黑色。 大多数的注解是由反汇编人员以及分析人员编写的。它们可以帮助你理解代码的含义。 你当然也可以添加你自己的注解。 如果你是一个初学者,你可以选择一条指令,然后按 Ctrl+F13来获取帮助。(目前仅支 持整数和 FPU 指令)。 信息窗口显示关于第一条被选指令的附加信息。它可能包括操作数的内容和它的解码, 已知跳转的列表和调用指令。对于一条可以被识别的条件指令来说,会包含跳转是否实现, 如果实现,那么它的源代码行,循环变量等信息。 寄存器窗口显示所选线程的寄存器内容。字母 C,P,A 等等代表单独的标志(进位标 志、奇偶标志、辅助进位标志,......)。这些标志是标志寄存器 EFL 的一部分。Last err 模块 不是一个寄存器,它显示的是 Windows API 函数存储错误代码在内存中的内容。例如,如 果调用 CreateFile(‖abc.def,…,OPEN_EXISTING…)无法找到 abc.def 文件,那么 last error 就会被置为 0x(ERROR_FILE_NOT_FOUND)。 如果寄存器或位的内容自从上一次暂停改变了或者被用户修改了,那么就会被高亮显 示。 FPU 寄存器是由 FPU,MMX 和 3D!NOW 指令集共同使用的。要想改变他们的显示, 使用鼠标右键弹出的菜单或者在窗口顶部点击相应的按钮。 堆栈窗口显示与所选线程关联的堆栈。在地址栏,ESP 所指向的地址会被标黑。 OllyDbg 会尝试识别堆栈框架并从内容的左边开始用括号来标记。它可能还会高亮显示可能 是返回值的 doublewords。但是要注意,它们也可能是以前函数调用的遗留。在堆栈窗口会 显示一个堆栈的精简视图。 Dump 显示的是主模块的数据区域。你可以选择任意位置和不同的数据演示。Dump 是 一个独立的线程。 底部的状态栏会显示调试信息和当前的调试状态。右下角的红色“暂停”表示应用程序 被 OllyDbg 挂起。另一些可能的状态是“加载”(Loading),“运行”(Running),“跟 踪”(Tracing),“终止”(Terminated)等。3Ctrl+F1 与 WIN32API 帮助有冲突――译者注 第一课 断点简单来说,断点是为了使程序能够在执行或者访问某一地址时请求暂停而设置的。 Ollydbg 也支持条件断点(当某些条件(如 EAX==1)满足时即暂停执行)和断点的记录功 能(在不停止程序的情况下将一些数据记录到日志中)。 Ollydbg 支持三种断点:软件断点、硬件断点和内存断点。在设置软件断点时,调试器 会利用一些在执行时会报出异常或者中断的命令替换断点位置命令的第一个字节。一般来 说,经常使用 INT3 (二进制代码 0xCC)作为替换指令,某些特权指令,如 HLT 或者 CLI 等,也可以作为替换指令。 如上文所述,将 Test.exe 载入 Ollydbg 时,状态将改变为“暂停”(如果没有,打开 “选项|开始”选项,将第一个暂停位置更改为程序主模块的入口点,并重新载入样本文 件)。在主菜单中选择“调试|运行”,或者直接按 F9 键或点击直角三角形的按钮 后,状 态将变为“正在运行”,并且弹出程序的主界面。 点击按钮“Read [_Break]”您会看到 Read [_Break] = 0x90(NOP)这样的信息。当您 按下按钮时,测试程序会读取字节到标志 _Break 的位置处,并显示内容。 通过点击画面内部某处,我们将焦点转向反汇编窗口,您有没有注意到窗口周围黑色的 窄的轮廓?现在,按下 CTRL+G(或者右键点击屏幕选择 GOTO|Expression (鼠标指向转 到,后指向表达式))然后输入“_Break”。从出现的窗口中,您可以改变反汇编窗口中显示的内存地址。您可以使用直接的地址, 如 401023(十六进制地址 0x),象征性的标签,像_Break 或类似 ECX + EDX * 4 的表达式的形式。请注意,所有的常量都是 16 进制。100 指的是 = ,100. 指的是(100.0 指的是浮点数 100.0,在地址表达式中是不允许出现的。在键入数据时,在列表的底部会显示以所输入文本为子串的标签列表。我们要寻找的标 签是 Test 模块中的_Break 字段,因此它的全称是 Test_Break。点击一次,并且点击接下来 的标签(因为某些原因,双击操作无效)。在反汇编重新定位到_Break 程序的位置时,需要注意,Test.exe 是一直驻留的,且地址 可能与屏幕上显示的不同。程序包含了两条指令,一条是 RETN,另一条是紧随其后的 NOP,它们在这里不做任何事情。_Break 标签指向的是十六进制代码为 0x90 的 NOP 指令, 这就是处在调试状态中的应用程序给出的信息。 NOP 指令的这一行会一直处在被选中的状态么?现在,按 F2 键,就是设置断点的快捷 方式。红色背景表示所设的断点为无条件软件断点。如下图所示,Ollydbg 利用 INT3 指令 取代了 地址出的指令。再选择一次&Read [_Break]&,该地址的信息就会变成&[BYTE _Break] = 0xCC (INT3)&。 因此,这个进程的内存信息在物理上发生了变化。但是,反汇编工具会仍然显示修改之前的 命令么?是的,因为在内存信息显示在窗口之前,反汇编工具就将断点信息替代为原来的数 据了。但是,正如我们看到的那样,软件断点在 Ollydbg 工具的窗口上是可见的。例如,一 些病毒样本在没有设置断点时仅仅检查关键的系统功能,并不去做坏事,但是如果设置了软 件断点,它可能产生我们意想不到的恶意行为。所以,Ollydbg 工具只允许我们在命令的第 一个字节设置断点! 断点的设置和使用都很灵活,点击&Call _Break&,Ollydbg 弹出断点信息。此时调试过 的程度会变成“暂停”状态,同时会出现&Breakpoint at Test._Break&的消息。这时发生了什 么?INT3 命令使得程序处于中断状态,Windows 系统暂停了程序的运行,并将中断请求发 送至调试器。这时你就可以做读寄存器内容、分析内存或者打补丁这些你想做的事了。 按下 F9 或者点击“运行”按钮4,程序就能继续执行。此时设置断点的那一行指令断原版帮助手册中此处地址为 004023AB,此处应为作者错误――译者注 点仍然存在,选中该行,按下 F2,即可移除断点。 现在,单击鼠标右键,并在弹出的菜单中指向“断点”,并在附加菜单中选择“硬件执 行”,如下图所示,Ollydbg 会向你确认这个断点触发的条件:命令执行、内存访问、内存 写入。因为此时内存地址会被当做代码一样识别。Ollydbg 工具默认推荐的是命令执行选 项。点击确定,就会弹出新的对话框。内存 Dump 窗口的红色的背景表示硬件或者内存断 点。点击&Read [_Break]&,二进制代码是 NOP,硬件断点对程序是不可见的。(也不一定是 这样,程序会读取线程的内容,也可以分析调试寄存器)。按下&Call_Break&就会命中断 点。 运行程序,调用硬件断点的对话框,将断点类型改为(R\W)模式。按下 &Call_Break&,没有什么异常发生,按下&Read [_Break]&。程序就停止运行,但是程序没有 命中到_Break 标签的地址。 请注意状态栏的消息。数据的硬件断点是在数据被访问之后触发的。检查 EAX 寄存器,在上面的示例中,它 的内容是 。这就是_Break 标签的地址。这个地址是从 00401B93 位置的命令 MOV DL,[BYTE EAX].读取来的。但是硬件断点记录的是下一条命令的地址。 硬件断点是非常方便实用的。如果你在数据中错误地下了硬件断点,什么异常都不会发 生。如果内存地址显示是一条数据,那么硬件断点是不会触发的 。但是硬件断点是非常稀 少的,只有四个。关于硬件断点的属性,有一定的局限性。所以该学习内存断点了。 现在,我们跳过硬件断点。在运行时,EIP 指向下一个命令的地址,而你却不知道怎么 跳转回来?你可以在窗口上调用 GoTo,也可以点击寄存器上的 EIP5寄存器,并从菜单中选 择 Follow in Disassembler 选项。你也可以点出反汇编菜单,选择 GoTo(转向),并在弹出 的附加菜单中选择 minus(上一个)或者直接在小键盘区按下减号键即可(当然,如果你有 小键盘区的话)。反汇编器和 Dump(转储)窗口会保留不同的历史地址,让我们能够从两 个方向去运行程序。 移除硬件断点之后,选择 Breakpoint | Memory...(断点|内存断点)然后点击执行,并 运行程序。一些奇怪的事情发生了:状态栏在闪烁。闪烁的频率就好像每秒 6000 次一样。 内存断点使用的是 80x86 的内存保护机制,如果不可用的内存在执行中被访问,那么该地址 每次被命令命中,硬件都会产生一次异常。如果异常是误报,Ollydbg 会继续执行,但是异 常数量会显示在状态栏上。异常处理需要很长时间,所以内存断点会有些慢,但是内存断点 的数量是不受限制的。 按下&Read [_Break]&.,正如我们预想的那样,内存断点在程序中不可见,按下 &Call[_Break]&.,Ollydbg 才会报出程序中内存断点的位置。5原版帮助手册中此处为 EAX,改为 EIP(作者的问题?)――译者注 第二课 给代码打补丁运行 Test.exe(无 OllyDbg),然后按下标记为“0:0”的按钮。程序将调用整数 1 整除整数 0 的例程,正如预期的那样,程序崩溃:我们要找到无效的指令并将其从代码中删除。加载 Text.exe 到 OllyDdg 中并运行 (F9)。再次按下“0:0”按钮。执行将会暂停并在底部状态栏显示消息“Integer division by zero - Shift+Run/Step to pass exception to the program”。 查看 CPU 反汇编窗体:EIP 指向指令 DIV ECX。如果你不知道这是什么指令,按 Shift+F1(或从菜单中选择 “帮助”):查看寄存器,一眼可知寄存器 ECX 的值为 ,即被零除。我们是在子程序中用 下面的代码标记为_Zerodiv: MOV EAX, MOV EDX, MOV ECX, DIV ECX RET 现在我们有几个选择。我们可以对整个程序进行修改,更换 MOV EAX, 与 RET。或者我们将 ECX 的值置 1。或者我们可以用 NOP 指令替换 DIV ECX。我们选择第三 种方法。 点击 DIV ECX。当这个指令被选中时,右键单击它,然后在菜单中选择 Assemble(汇 编)6:汇编窗口将出现:注意两个复选框。如果要检查大小,你将只能修改选定的内存(在我们的例子中,DIV ECX 的长度是 2 字节,只有地址 00401F32 和 00401F33)。这样可以防止重要的代码被重 写。 新的指令不一定要和原来的长度相同。假设你想删除跳转到目的地址是 8 字节的二进制 代码 EB F4,你可以用 NOP(90)代替他,不过 NOP 只有 1 个字节长。你将得到序列 90 F4 来 拆解 NOP。如果你尝试执行此序列,程序将崩溃,报告特权指令。不受控制的指令残存可 能是危险的。因此,我建议总是激活填充 NOP 指令。如果新的指令不完全合适,其余的将 被自动填充无害的 NOP 指令。 回到本章,选择 Fill rest with nop(填充 NOP 指令)、NOP 类型并按下汇编(或键盘 回车键)。窗口要求你输入下一条指令,但我们不需要输入。关闭对话框,你将会看到:DIV ECX 指令是由两个 NOP 指令序列替代。请注意修改的命令已设置为高亮。为了与6此处的快捷键为空格键――译者注 原命令保持联系,OllyDbg 创建了旧编码的备份。此操作消耗内存(备份和编码段一样大) 但非常实用。你可以查看旧的编码,撤销更改或搜索修正。(如果代码在调试时自动修改, 那么备份将会起到作用)。 还要注意的是括号表示该过程_Zerodiv 现在是损坏的。Ollydbg 移除了修改后代码的分 析。 运行程序并再次按下“0:0”,什么事情都没有发生,这说明我们的修补程序是正确的, 但当应用程序终止时更改将丢失。我们需要将它们复制到可执行文件中。这是一个复杂的任 务,但 OllyDbg 会应付它。选择修改过的编码(两个 NOP 指令),调用上下文菜单并选择 编辑|复制到可执行文件。OllyDbg 将创建新的 Dump 窗口,读取可执行文件,查找对应的地 址,并将修改的部分复制到 Dump 文件中:你可以添加其他补丁,或者直接通过 CPU 反汇编程序。当你准备好后,点击右键文件 Dump 并选择保存文件…你将被要求确认此操作,只需按 YES。另一个对话框会出现,要求 你选择文件名,我们不想改变原来的 Test.exe 名(如果测试应用程序人在运行,此操作将不 被允许)。选择不同的名字,比如说,test1.exe 并保存。 运行 test1.exe 按“0:0”。没有例外,我们已经成功地修补程序。第三课 运行跟踪当程序执行跳转到错误的位置时,我们会很难发现这个无效跳转的位置。 而这里有一个叫做运行跟踪的功能。当你启动运行跟踪功能时,OllDbg 调试应用程序 时,会一次一个指令的一步步执行。 运行跟踪是非常非常缓慢的。现代的 CPU 一秒钟可以执行数十亿条指令。但当运行跟 踪时,执行速度会被限制到大约每秒 3 万条指令。如果快速指令仿真功能开启 (Options|Debugging|Allow fast command emulation),OllyDbg 通常每秒能跟踪 3 万到 6 万条指令。这个速度对简单的 GUI 应用程序来说已经足够了,比如 Test.exe 运行跟踪的另一个缺点是它目前只能跟踪一个线程。如果是由两个交叉线程所引起的错 误,运行跟踪功能是不能发现的。但是 Text.exe 只有一个线程。 现在开始本节的主要内容。在 OllyDbg 中打开 Test.exe,然后按下标有“JMP 123456” 的按钮。注意!OllyDbg 会报告“访问冲突:读取[]时”,但是 CPU 反汇编是空 的。这是因为内存地址[]是空的。 继续尝试。设置运行跟踪选项(选项|运行跟踪)。对我们来说,只有选项“禁止进入系 统 Dll”是有用的。它一定是不可选的,因为跳转被 Windows 回调函数执行。重启应用程序 (调试|重启)并运行它(或者点击 停 程序并开启运行跟踪 )。调试模式是“on the fly”时是不允许更改的。暂。注意这时状态改变为“跟踪”并且状态栏显示类似“120672events per second”的字样。运行跟踪会触发许多调试事件,通常都是执行的命令。切换到应 用程序窗口,然后按“JMP 123456”。 为了避免程序崩溃,这时你应该注意错误提示“OllyDbg 不能跳过 0x123456 地址的指令 (可能是无效的)。内存不可读。”。取消它并且打开运行跟踪协议(视图|运行跟踪)或 按钮:最后一个指令是跳转到地址 。最后一个 JMP EAX 的地址是 00401F71。正如从 最后一列看到的那样,这时 EAX 的值是 。我们已经找到问题的根源了。 Text.exeText.exe 能够让你学习 OllyDbg 的扩展功能。在本节中,我们已经运用了这些功能。本 手册中的大多数代码示例都是基于此应用程序。 你可以从我的网站 www.ollydbg.de 上下载 Test.exe 的源代码。我会不断的增加新的功能 和更新现有的功能。因此地址可能会有所改变,也会有新的按键被添加。可以使用导出标签 来找到代码。 下面是每个按键的简要说明。括号中的斜体文字是相关的标签名称,如下: Start thread(_Thread):以 100 毫秒的间隔(相当不准确)启动打开窗口和计数的新的线 程。如果关闭窗口,线程终止; Suspend last:暂停上一次创建的线程。你可以在 OllyDbg 的线程窗口恢复它; Hide last:试图从调试器中隐藏上一次创建的线程(NtSelnformationThread(),code 0x11)。这个功能依赖于操作系统。如果不支持隐藏,就会看到错误信息; FatalExit():调用 FatalExit(0); New process:启动 Test.exe 的新实例。如果选项调试子进程被检查,OllyDbg 会启动新 的实例并将其附加到新创建的进程; New suspended:与上面相同,但新的进程最初处于暂停状态(不运行); Load ws2_32:加载库 ws2_32.dll。为什么加载 ws2_32 呢?因为它适用于所有的 Windows 版本并且会加载另一个库 ws2help.dll; Unload ws2_32:从内存中卸载 ws2_32.dll 库; Current Dir-显示 GetCurrentDirectorry()函数所获取的当前目录。 Sleep(5000)-执行 Sleep(5000)即暂停 5 秒。 Set filter-通过调用 SetUnhandledExceptionFilter()来设置自定义的过滤器,用以处理不能 未处理的异常情况。注意,通常不允许调试器向这个过滤器传递异常。OllyDbg 使用一些小 技巧来搞定 OS 使之能够调用这个过滤器。这个行为由选项 Pass unprocessed exceptions to Unhandles Exception Filter 控制。 Set VEH-给向量化异常处理器链(VEH)添加句柄。为了保护应用程序免遭病毒的破坏, Windows 对这此链使用会话唯一(session-unique)标志技术。因此只有当进程是由 OllyDbg 创 建,以及进程不是由 OllyDbg 依附得到时,才可以使 VEH 正常工作。 Read [] (_Accessviolation) -使 Test.exe 读取内存地址为
处的内容。这 通常会导致访问违法。但是你可以通过 ZwAlloc(0)来在地址 0 处分配内存块! 0:0 (_Zerodiv) - 用 0 除以 0,导致整数除以 0。 INT3 (_Int3) 执行 INT3 指令。INT ff (_Intff)- 执行 INT oFFh 指令。 JMP 123456 (_Nirvana) - 跳转到未分配的内存页 JMP 0123456h。 Stack overflow - 启用无限递归调用,使栈溢出。 1.0:0.0 (_Fzerodiv) -用浮点数 0.0 除以浮点数 1.0,由浮点数除法中用 0.0 作除数引发。注 意由于浮点协同处理器的逻辑性,这个错误将会在下一个 FPU 命令中报出。为了找到无效 命令,你必须在寄存器面板中查看 Last cmnd 参数。 Set Trap (_Settrap) - 设置寄存器 EFL 中位 T(单步陷阱),由单步异常引起。 Hard BP in thread -在上一个创建的线程中设置硬件调试断点 0,由单步异常引起(所有 的调试异常都被定位为相同的中断,windows 并没有区分它们)。 POP SS/PUSHF (_Pushflags) -执行命令 PUSH SS; POP SS;PUSHFD 并显示栈顶的内容。 在 OllyDbg1.10 跟踪这个序列的时候,会压入标志 T。 MOV SS/PUSHF (_Moveflags) - 执行 MOV AX,SS;MOV SS,AX;PUSHFD 命令,和前 一个按钮效果相类似。 REPE PUSHF (_Repeflags) - 执行未公开命令 REPE:PUSHFD。在 OllyDbg1.10 跟踪这个 命令的时候,压入标志 T。 INT 2D (_Int2d) - 执行 INT 02Dh 命令。 String A - 执行 OutputDebugStringA(&Debug string (ASCII)&)。 String W - 执行 OutputDebugStringW(L&Debug string (UNICODE)&)。 Read [_Break] - 读取并显示地址_Break 处的字节。这个地址是一个规模较小从未执行 过的例程入口。 通常,在你按下按钮的时候,测试例程会报告[BYTE Break] = 0x90 (NOP)。尝试在 _Break 地址处设置软件断点并再次按下按钮。现在读到的消息是:[BYTE Break] = 0xCC (INT3),说明 NOP 被 1 个字节的 INT3 中断替换了。 Call _Break -调用上面已经描述过的_Break()函数。除了设置一个断点外,该函数上面也 没有做。 ZwAlloc(0) - 在基地址 0x 处分配 1 页(4096 字节)。是的,这也是可以做到哒! Set vars (_ppi and _rect in data section) - 内部计数器加 1 并将其值赋予变量**ppi and rect[2][3].right。这些变量声明如下: int ** RECT rect[4][4]; 在分析中,也有几个地方进行了高亮:内嵌循环-5 个短小的内嵌循环:内嵌调用-函数调用中以函数调用作为参数使用: 汇编器和反汇编器信息概述OllyDbg 2.01 支持全部 80x86 指令、FPU、MMX、3DNow!、SSE、SSE2、SSE3、 SSSE3、SSE4 和 AVX 扩展。请注意,以下特性与差异是相对于 Intel 标准而言: ? 支持 REP RET(AMD 转移预测错误修正); ? 支持多字节 NOP(如 NOP [EAX]),然而汇编器总是试图选择最短的形式,因此他可 能很难设置所需的 NOP 长度; ? FWAIT 通常从 FPU 指令中分离,汇编器不添加 FWAIT,例如:FINIT 实际上翻译为 FNINIT 等; ? 汇编解释二进制 FPU 指令无操作数形式(如 FPU),但反汇编总是用两个操作数形式 (FADDP ST(1),ST); ? LFENCE:只以 E8 的形式接受(0F AE E8); ? FMENCE:只以 F10 的形式接受(0F AE F0); ? SFENCE:只以 F8 的形式接受(0F AE F8); ? PINSRW:16 位解码寄存器(通常是低 16 位); ? PEXTRW:按英特尔标准内存操作数是不被允许的; ? 有些 FPU、MMX 和 SSE 指令只接受寄存器或内存中的 ModRM 字节。如果对方没 有定义,反汇编器报告它作为未知指令。整数指令如 LES,在无效的操作数的情况 下报告。 ? SSE4 指令使用寄存器 XMM0 作为第三个可用的操作数在 2-和 3-操作数之间的格 式,但反汇编中,只显示完整的 3-操作数形式; ? 汇编接受有明确 AL/AX/EAX 的 CBW、CWD、CDQ、CWDE 作为操作数。反汇编 只显示隐含的无操作数形式; ? 16 位 AVX 浮点数是十六进制短号码解码; 反汇编模式OllyDbg 支持四种不同的解码方式:MASM,Ideal,HLA 和 AT&T。它们是有由 Code | Disassembling syntax(代码|反汇编语法)选项控制。MASM 实际上是标准的 80x86 的汇编 程序:理想模式,由 Borland 推出,与 MASM 非常相似,但内存地址的解码方式不同:高级汇编语言,由 Randall Hyde 创建,它的语法是第一个操作数是一个源操作数并且操 作数在括号中。HLA 是一个公共领域的软件,你可以将文档、教程、源代码一起下载,网 址如下:http://webster.cs.ucr.edu。HLA 语法示例:AT&T 语法:在 Linux 程序员中非常流行:反汇编是可配置的。下面是 AT&T 模式的另一种设计: 符号名称的识别在 c++中,你可以用不同数量或类型的参数声明相同名称的函数。但接口必须能够区分 它们。为了确保这一点,编译器增加了参数和函数返回值类型的描述。这个过程叫做名称修 饰或者 name mangling。例如,void Setdlgscroll(HWND hparent, int id, int pos) 在 Visual Studio 中会被编码为?Setdlgscroll@@YAXPAUHWND_@@HH@Z; 在 Borland C++ Builder 中会被编码为@Setdlgscroll$qp6HWND_ii。 在 Test.exe 中的 Floatingcall()和 Floatingargs()函数的 mangled name 为 @Floatingargs$qfdg 和@Floatingcall$qv。 恢复原来的名字叫做 demangling。OllyDeg 能够对 GNU,微软,Borland 的编译器创建 的名称进行重命名。这个过程由选项 Code|Demangle symbolic names 控制。不像 OllyDeg v1.xx 版本那样,v2 版本可以在两个版本中随时转换。 尽管可以提取参数的数量和类型,OllyDbg 也只有恢复函数名称的功能。如果选择了重 命名,可能一些内存位置会被命名成相同的。 尽管可以提取出参数的数量和类型,但是 Ollydbg 只存储函数的名称。如果解码开始进 行,那么可能会发生几个内存地址命名相同的事情。条件命令看一下这两个命令:83F8 00 CMP EAX,0 74 50 JE C0 74 51 OR EAX,EAX JE 他们的功能是一样的,如果 EAX 的值为 0,就执行跳转命令。在第一种情况下,助记符 JE 描述了跳转的触发条件:EAX=0.那么第二个例子中的 JE 代表的是什么?两个 EAX 相等 么?当然不是,JE 的触发条件是 OR EAX EAX 的表达式为零。在这种情况下,助记符 JZ 会更好一些。但是问题是,JE 等同于 JZ,两个指令的操作码都是 74(当偏移量超过 128 字 节时,操作码会变成 0F84)。Ollydbg 是如何判断哪一种解析方式更好的?答案是分析。当 Ollydbg 分析代码时,它会注意那些设置条件标志的指令,并以标志为依据选择助记符。该 功能在助记符中这个选项中有所体现。猜一下代替条件指令的形式,以及影响 JE、JZ、 JNE、JNZ、JAE、JC 以及 JB、JNC 等命令解码的因素。汇编语法汇编器会自动识别 MASM,Ideal 和 HLA 语法。AT&T 语法是不支持的。无论选择哪种 反汇编方式你都可以键入 MASM、Ideal 或 HLA 格式的命令。HLA 指令是围绕着数字和括 号进行识别的。下面是几条 HLA 命令 MOV [EAX],ESI MOV [DWORD EAX],ESI MOV DWORD PTR [EAX],ESI MOV (ESI,[EAX])(请注意 HLA 操作数相反的顺序)内存操作数要求使用方括号, MOV EAX,_Zerodiv 指令的行为是将_Zerodiv 标签的地址移动到 EAX 寄存器中。MOV EAX,[_ Zerodiv]的行为是将_ Zerodiv 地址出的双字长度的内容移动到 EAX 寄存器中。 MOV _Zerodiv,EAX 指令是无效的。 如果一个操作数起源于另一个操作数,或由其他操作数派生,那么它无需指定大小。例 如,汇编器已经知道 ESI 寄存器的大小是双字(4byte),MOV [EAX],ESI 的操作数也是 四个字节。但是在 MOV [EAX],1 指令的情况下,三种操作数长度都可能出现。 MOV [DWORD EAX],1 MOV [WORD EAX],1 MOV [BYTE EAX],1 此时汇编器将发出警告。你可能已经熟知,常量可以直接用于命令操作数: MOV EAX,WM_PAINT 转换为 MOV EAX,0F 操作数中的表达式仅限于加法,减法,常量及标签的或运算。这三种操作具有相同的优 先级,执行顺序从左到右。忽略 32 位溢出,不允许有括号: MOV EAX,WS_CHILD|WS_VISIBLE 转换为 MOV EAX, OllyDbg 中所有的常量默认都是 16 进制,如果你想声明一个十进制常量,按照下面来做 (译者注前面的指令末尾没有句点): MOV EAX,1000 等价于 MOV EAX,0x1000 MOV EAX,1000. 转换为 MOV EAX,3E8 16 进制常量以一个字母(A-F)开头,但是符号标签比十六进制数字具有更高的优先级。 假设你在地址 0x 处定义了一个标签 DEF,那么: MOV EAX,ABC 转换为 MOV EAX,0ABC MOV EAX,DEF 转换为 MOV EAX,401017 为避免混淆,在 16 进制常量前缀以 0 或者 0x: MOV EAX,0DEF。对于这条规则,有一些例外:参数索引以及局部变量都是十进制。比如,ARG.10 是第十个调 用参数的地址,其偏移是 0=0x28。注意到 ARG 和索引之间以小数点间隔,你可以 以此来记忆这条规则。 序数也是以十进制来表示,COMCTL32。#332 就表示是第 33210 次导出。 也支持 16 位地址,但是汇编器总是假设 32 位的代码段添加已 0x67 为前缀的地址大小 的代码段。如果地址不包含 16 位寄存器,可以使用关键字 SMALL 来强制使用 16 位地址模 式:MOV ECX,[DWORD FS:0] 生成 32 位地址 MOV ECX,[SMALL DWORD FS:0] 生成 16 位地址(命令长度减少了 1 字节)未公开的 80x86 命令OllyDbg 识别几个未公开的 80x86 命令: 命令 INT1(ICEBP) SAL SALC TEST REPNE LODAS, REPNE MOVS,... FFREEP UD1 操作码 F1 D0 /6,D2 /6,C0 /6 D6 F6 /1 F2:AD, F2:A5,... DF /0 0F B9 注释 1 字节断点 算术移位,等同于 D0 /4 设置 AL 进位标志 逻辑测试,等同于 F6 /0 字符串操作,REPNE 的 解释方式等同于 REP 释放浮点寄存器 保留的未定义指令 (Intentionally undefined instruction) 反汇编器支持上述提到的所有命令.汇编器不会产生非标准的 SAL 和 TEST 指令。在必 要情况下,使用二进制编辑来创建二进制代码。内存映射信息概述每一个 32 位的应用程序都会运行在它自己的虚拟 232-位内存空间。应用程序也只能获取 低地址部分空间(2 或者 3 十亿字节)。Windows 系统用这个程序的可执行模块,数据块, 栈和系统表。最小分配单元是一个页(4096 字节)。每个页都会有标识标明该页是否具有 可读,可修改,可执行的属性。除了这一种保护措施,物理边界与内存块之间也没有其他的 保护措施。如果程序分配了 2 个数据段,那么它们刚好会分配在相邻的位置上,然后应用程 序也会把它两当成一个数据段。 Ollydbg 把应用程序的内存分布当成一系列独立的块。内存映射窗口显示调试器可以得到 所有的内存块。同时这里也没有什么标准来决定块在哪里开始和在哪里结束,它可能发生在 OllyDbg 展示出几个已分配的内存块作为一个单独的内存块。但是在大多数情况下,明确的 解决方法不是必要的。 在内存目录中的任何操作都可以限制块。在大多数情况下,这会使得工作容易而且促进 调试。但是如果,举个例子,模块包含几个可执行的节(Sections),你将不会立刻看到整 个代码分布。因此 OllyDbg 可能将相邻的块合成一个块,就如下面的一个例子:系统 DLL 文件 oleaut32.dll 在 windowsXP 中申明了两个相邻的节:.text 和.orpc。他们有 同样的属性,然后,OllyDbg 把这两个节解释为一个单独的内存块。 内存映射每一次暂停后都会更新。如果你需要在程序运行时实例化窗口,从弹出的菜单 中选择更新按钮或者直接在内存映射窗口中按快捷键‖Ctrl+R‖。 双击内存映射中的一行来打开一个单独用来显示指向内存节目录块的窗口。 你也许为了一些指定的字节联系而在整个进程的内存分布中进行寻找(Search…或者 Ctrl+B,查看“搜索”章节下的细节描述)。当联系找到后,OllyDbg 打开 Dump 窗口然后 滚动下拉条到达最开始的发现的位置。按下 Ctrl+L 来发现下一个 Dump 位置或者按下 Esc 来关闭 Dump 窗口。在内存映射窗口中按下 Ctrl+L 来继续寻找。内核存储内核(系统的)内存被分配在高地址区域。通常它开始在地址为)0x(家庭版本 的系统)或者 0xC0000000(某些服务器版本的 Windows 系统) 如果 OllyDbg 可以访问到内核内存,它会使用一些特殊的调试函数来企图展示内核的详 细信息。这些函数在 Windows XP 下很有效果,但在 Windows 7 下经常失败。像其他部分一 样,OllyDbg 将内存状况显示为一个独立的快,其中不可用的内存页填充为零而不是问号。 OllyDbg 既不能修改内核内存,也不能改变内核内存属性,同时也不能设置任何类型的断 点。唯一可用的操作是搜索。注意,完整的查找会花费几分钟。 内核内存并不直接访问应用程序,而是由操作系统或者驱动来授权给这个内存部分。例 如:一些杀毒程序会 LoadLibrary 和 GetProcAddress 等类似于内核内存的接口函数重定向到 内核存储区域,在那里杀毒工具可以在不增加有效性的检查的情况下避免被病毒感染的危 险。如果 OllyDbg 遇到一些函数,它会使用单步来进行跟踪。备份对于每一个内存块,除了内核,你都可以创建一个备份。这是一份当前内存目录的复 制。如果备份是可用的,OllyDbg 将会高亮一些不同点。你可以浏览备份,重新存储修改 处,存储备份到磁盘或者返回来读存储内容。如果你想要查看两个运行程序的不同,那么存 储备份是非常有用的。 当你在 CPU 窗口编辑代码或者数据时,备份会自动生成。如果你要求当程序运行时,在 修改处的命令暂停,那么备份是必须的。在节‖Run trace and profiling‖查看详细的描述。菜 单 Option 下,Debugging|Auto backup user code 告诉 OllyDbg 在模块被加载到内存中时来创 建可执行代码的备份。 注意独立的 Dump 窗口也许能创建他们自己的备份。他们从物理上来说和这里的备份是 有本质的不同。在内存入口中断在内存映射窗口中,你可以在整个内存代码的入口点设置一次性断点。任何可能入口 (读,写或者执行)将会触发中断并移除中断点。栈中的中断是不允许的,它也许会导致系 统调用崩溃。 如果你需要找到调用 DLL 的函数或者这些函数的返回值,那么这种类型的内存断点是很 有用的 。只需要在相应模块的代码区中设置断点即可。Dumps7Dump 窗口显示的是内存,文件,或者磁盘里的内容。CPU 窗口包含三种 Dumps: 反汇 编器,Dump 和栈。一个窗口也可以打开无数个独立的 Dump 窗口。创建一个Dump的方法有很多种。在内存映射中双击一行可以打开该选定的内存块的一 个Dump。选定CPU反汇编器或CPU Dump的一块内存,然后选择菜单中的Open in a separate Dump window(打开一个单独的Dump窗口)命令可单独监视这块内存。如果你选 择Decode as structure...(按结构解码),这个选定的块会被解码成一个预定的Windows结 构。如果你选择Decode as pointer to structure...(按指针结构解码)8,这个选定的块的在第 一个字节开始的双字会被翻译成这个结构的指针,就像下面的例子中LOGFONTW转成 CreateFontIndirectW():要打开一个文件,选择主菜单栏中的View|File…(查看|文件)。如果文件扩展名不 是.exe,.dll和.link,你可以直接将它拖拽到OllyDbg里面。要保存修改后的文件,在弹出的 菜单里选择Save file…(保存文件)。7 8Dumps 的译文“转储”比较晦涩,所以文章沿用 Dumps――译者注 有用户称这两处选项在实际使用过程中没有找到――译者注 如果你有足够的管理者权限,你可以直接检查你的电脑的本地磁盘内容(View|Drive… (查看|驱动)):扩展的大小主要是被可利用的内存所限制的。驱动Dump是只读的,你不能保存任何修 改到磁盘中去――这对于文件系统来说太危险了。Dumps支持许多不同的格式:十六进制的ASCII,UNICODE或MBCS文本,纯ASCII或 UNICODE文本,所有可能形式的16位和32位整数,堆栈视图,32位,64位和80位的浮点 数,或者反汇编代码。对于ASCII和MBCS,你可以选择一个代码页安装在你电脑里。下面 是一个多字节(变长)的UTF-8 Dump的例子:“Variable-width(变长)”表示一个字符可以被一个,两个或多个字节替换,编码的长度 取决于字符。OllyDbg支持每个字符最多五个字节,这满足所有当前存在的设置。注意上图 中字符“O”在地址00418A3B处被编码成一个单独的字节4F,而从地址00418A42开始被选 中的中国汉字需要3个字节:E4,B8,AD。图中所示的Dump第一行包含10个UTF-8字符:7个拉丁(“OllyDbg”)和三个汉字。多 字节的Dump有16个位置。6个未使用的位置在行的末尾用灰色的省略号填充,以此与明显的 空格区分开来。OllyDbg在Dump中从不把十六进制表示的公认的多字节字符分行,所以一些Dump行中 包含少于16个字节。汉字,日本汉字或韩文符号明显比ASCII长,如果有人试图把它们强制转化成ASCII格式 那么将会截去一部分。为了避免截去,激活选项Dump|Use wide characters in UNICODE & multibyte Dumps(Dump|使用UNICODE长字符和多字节Dumps)。ASCII和多字节代码页可 以随时在选项中的Dump窗格或直接从弹出的菜单中被改变。键盘上的方向键移动一次选择一个项目(十六进制Dumps的字节,UNICODE的长字符, 反汇编器的命令。)按住Shift并移动选项可以选择多个项目。组合键Ctrl+UpArrow(Ctrl+向上键)和Ctrl+DownArrow(Ctrl+向下键)滚动Dump窗 口,但不根据项目的大小。这让你可以改变对齐方式。快捷键Ctrl+LeftArrow(Ctrl+向左 键)Ctrl+RightArrow(Ctrl+向右键)可以使窗口按列左右滚动。当选项Dump|Underline fixups(Dump|强调固位)激活,OllyDbg强调十六进制Dumps中的 固位。固位是一个对可调整的地址的定位。如果可执行文件或DLL加载了一个预期外的地 址,加载器就会改变地址的值。当你把代码放在一个被固位所占据的内存里时,要千万小 心,尤其是DLL!OllyDbg将固位的内容调整回了默认的库,但是如果出于任何原因,模块 加载在一个不同的库里加载了,代码就会发生改变(或者未固位的默认地址会指向旧的、现 在无效的定位――我也不知道哪一种情况会更糟)。 搜索搜索二进制模式串Ollydbg 提供了许多不同的搜索方案,该搜索样例就是搜索二进制模式串的。例如,要 查找创建主要窗口的模式串在 Test.exe 中的位置,这个窗口的标题是“Test application for OllyDbg v2”。Test.exe 是一个 ascii 码的程序,我们希望名字也是 ascii 码编码的。一些编译 器把静态数据加载到代码中,另一种则是使用数据段。我们之前不知道这个,所以必须就两 种可能性一一排查。 切换到 CPU 反汇编,按下 Ctrl+B,或者在菜单中选择 Search for | Binary string...(搜 索-&二进制串)。在弹出的对话框中,你可以将字符串搜索指定为如下几种格式: Ascii、多字节(MBCS)或者 UNICODE,或者直接设定为十六进制的字节序列。ASCII 和 MBCS 使用当前的代码页,例如,在上文的例子中,ASCII 使用默认代码 (1252,ANSI-Latin I),MBCS 则将编码设定为 UTF-8,点击上图中第一行(ASCII)并开 始输入要查找的内容。随着输入数据的过程,Ollydbg 也会动态地更新其他行。凡是类似于 UNICODE 中的奇数字节这样无效的符号,都会显示红色的问号。 如果你在一行中选择文本的一部分,Ollydbg 会选择所有能够全部或者部分匹配上的字 符。例如,如果你选择的第一个可见数字为 16 进制的 5,Ollydbg 将选择 ASCII5 的字母 T、MBCS(1 到 5 字节)还有第一个 UNICODE 的汉子字符。注意,Ollydbg 不支持字符替 换。双字节的必须为 UNICODE 编码。范围在 D800-DFFF 的字符串要被视为独立的字符, 即使他们并无实际意义。 16 进制的那一行支持模糊搜索,16 进制那一行的问号指的是忽略内容的半字节。例 如,你想在程序中找到 Analyse(或者 Analyze)9这个字符串,在 ASCII 栏输入 Analyse,并 选择字母 s,它的二进制码是 73,选择 16 进制编辑器。(Ctrl+鼠标滚轮向上)并用两个问 号代替 73,这种方式就能搜索到英式和美式的 Analyse 了。如果你粘贴到 16 进制控制栏,Ollydbg 会只显示 0-9 的数字以及 A-F 的字母,而忽略其 他的字母。将“We apologize for the inconvenience”粘贴到 16 进制栏里,得出的结果是 EA EF EC EE CE 几个字符的组合。输入文本后,可以选择搜索方向:可以选择整个模块,也可 以选择向前或者向后。忽略大小写的操作功能是十分有限的,它只针对标准的 ASCII 字符而 忽略本地的字符。在遇到 MBCS 和 UNICODE 格式的字符时,忽略大小写功能可能会失 效。 点击搜索按钮,不幸的是,在代码段中没有这样的字符串。在 CPU Dump 的窗口中选择 第一个字节,然后按下 Ctrl+L,这个快捷键表示“继续在同一方向展开同样的搜索”(顺 便说一下 Ctrl+Shift+L 表示在反方向上继续该搜索。)此时,文本在这里,为了确认,再按 一次 Ctrl+L 键。状态栏提示“Item not found”则表示该字符串在文本中是唯一的。 不幸的是,这里有一个问题。我们已经找到了文本串,但是我们需要访问该命令所在的 位置。别担心,有一个特殊的选项可以完成这样的功能。搜索引用对一些常量的引用就是一个包含这个常量的命令。例如,所有引用地址
的命9“分析”这个词,英式英语和美式英语中有不同的拼法――译者注 令: MOV EAX,[] PUSH
CMP CL,[BYTE +ESI*4+EDI] 我们会发现在 CPU Dump 出来的文本中,这是“Test application for OllyDbg v2”的位 置。选中这个位置,并在菜单中选择 Find references to | Selected block(查找|引用选块), 搜索引用的命令就是这样。双击这条索引,就能跳转到 CreateWindowEx()调用。我们进入了创建窗口的主函数 中。有时索引并不一定会显示直接包含常量的命令,例如 PUSHEDX。这不是一个错误,分析器试图传递函数的参数的值。命令的序列有时候很复杂,例如搜索 417634 会显示如下 命令序列。 MOV EBX, OFFSET 41751C Long sequence oif commands that don't change EBX LEA EDX,[EBX+18] PUSH EDX EDX 包含的是 x18= 这个值。 搜索引用的字符串搜索引用的字符串,有一种更快地方法。同时它也适用于 ASCII 和 UNICODE 字符串。 切换到反汇编的窗口,并在菜单中选择“Search for | All referenced strings”即可完成搜 索。点出的列表或许会很长,所以,搜索窗口会直接显示搜索内容(弹出菜单包括文本形式 的搜索列表、再一次搜索和逆向搜索三个选项)。找到相应命令后,双击它就能跳转到反汇 编窗口中该命令的位置处。 字符串的搜索利用的是分析器的结果,字符串采用启发式识别。默认情况下,ASCII 码 被限制在拉丁文范围内,要允许国际字符,可以通过激活 Strings | Allow 选项来完成。请注 意,这个选项不会考虑所选择的代码页。 如果 Strings | Allow 选项是激活的,UNICODE 格式的字符串和 ASCII 码格式的字符串限 于同一个子集。Windows API 自带的启发式分析器 TextUnicode()可以分析许多其他的语种。 (Strings | Use 是 TextUnicode()选项)。但是请注意,这个解码函数可能返回错误的结果。甚 至把独立的字符和 ASCII 码解码成 UNICODE。 字符串一般都以空字符结尾,有些编程语言,如 Pascal 和 Delphi 可能会使用另一种形 式。其中,ASCII 串受字符个数影响,Pascal 串的识别有字符串本身影响。 请注意,如果你改变了上面提到的设置和选项,你必须在反汇编窗口中键入 Ctrl+A 来 重复分析过程。常量搜索你可以直接或者间接地找到包含特定常量的命令。它和索引很像,但是常量搜索不局限 于地址。例如,搜索常数 1,会得到 PUSH 1 SHL EAX,1 MOV [BYTE EAX+1],4567 DD
这样的指令以及其使用常数 1 的指令。单个命令搜索及一系列命令的搜索你可以在 Ollydbg 上搜索一条命令,也可以搜索一个命令的序列。这种行为很频繁,因 为 80x86 架构提供很多重叠的寻址模式,且很多操作码表示的是相同的命令。举个例子说, MOV EAX,[EBX].这条命令有 16 个可能的二进制编码: 8B03 C 最简单的形式 8B43 00 C 带有一个字节位移的非SIB形式 8B83
C 有四个字节偏移的非SIB形式 8B0423 C 没有标度指数的SIB形式 8B0463 C同上 8B04A3 C 同上 8B04E3 C 同上 8B4423 00 C 一个字节偏移、无索引的SIB形式 8B4463 00 C 同上 8B44A3 00 C 同上 8B44E3 00 C 同上 8B0 C四个字节偏移、无索引的SIB形式 8B0 C 同上 8B84A3
C 同上 8B84E3
C 同上 8B041D
C 四字节偏移,标准比例,没有基地址 由于每条命令前都可以加前缀 DS(操作码 3E),所以命令条数加倍。 但是这不是 Ollydbg 本身的问题,无论有没有前缀,Ollydbg 都会找到所有的命令(如果 你只想查找带前缀的命令,那么在搜索模型中指定该前缀)。 命令中可能含有不准确的操作数,比如任何一个 32 位的寄存器,任何内存地址或者任 何操作数。例如,MOV EAX,ANY 会和 MOV EAX,ECX,MOV EAX,12345;,MOV EAX,[FS:0]等很多命令进行匹配。 不精确的使用下列伪操作数:关键字 R8 DH) R16 R32 ESI, EDI) SEG FPUREG MMXREG SSEREG CRREG DRREG CONST ANY对照 任意八位寄存器 (AL,BL, CL, DL, AH, BH, CH,任意16位寄存器 (AX, BX, CX, DX, SP, BP, SI, DI) 任意32位寄存器 (EAX, EBX, ECX, EDX, ESP, EBP,任意段寄存器 (ES, CS, SS, DS, FS, GS) 任意浮点运算寄存器 (ST0..ST7) 任意增强指令寄存器 (MM0..MM7) 任意指令集寄存器 (XMM0..XMM7) 任意控制寄存器 (CR0..CR7) 任意调试寄存器 (DR0..DR7) 任意常量 任意寄存器、常量或者操作数你可以对内存地址的这些关键字进行自由组合,具体示例如下:内存地址 [CONST] [R32] [R32+1000] [R32+CONST] [ANY]对照 任何固定的内存为止,比如 [400000] 寄存器中存储的地址,比如 [ESI] 32位寄存器的值与0x1000的和,比如[EBP+1000] 32位寄存器与偏移的和,比如 [EAX-4] 或者 [EBP+8] 内存操作数,比如[ESI] 或 [FS:EAX*8+ESI+1234]如果你在寻找命令的序列, 命令在序列中的相互影响是很重要的。假设你在寻找两个 操作数的比较。而 8086 架构没有这样的指令(除了 CMPS 指令,但是该指令执行缓慢,需 要长期的准备)因此,编译器将产生两个命令: MOV EAX,[DWORD 408804] CMP EAX,[DWORD 408808] 然而,编译器用 ECX 或其他寄存器代替 EAX 也是有可能的。考虑到这些情况

我要回帖

更多关于 电子锯开料怎样调尺寸 的文章

 

随机推荐