标 题:
【翻译】R4ndom破解教程全文翻译(For新手):第二章
作 者: QQSniper
时 间: 2015-03-29,20:47:04
链 接: http://bbs.pediy.com/showthread.php?t=199128
翻译说明:
1、本教程在 52破解论坛 及 看雪论坛 全球同步首发!
2、本教程翻译自国外的The Legend of Random的系列教程,英文原文地址:http://thelegendofrandom.com/blog/sample-page。本翻译教程只是为了给不愿看英文教程以及英文水平不好的人提供方便,同时也是自己的学习过程。该教程对英文水平要求不是很高,不过个人水平有限,有些地方翻译不准的请批评指正。
3、本翻译教程请勿用于商业用途。另,转载请注明!!!
4、感谢The Legend of Random!
发帖说明:
根据译者的时间安排,一般2-3天会上传一章。如果有段时间没更新请勿怪,因为译者的工作性质,有时是接触不到网络的。
其他章节:
全系列章节导航帖
一、什么是Olly Debugger?
援引作者Oleh Yuschuk的话“OllyDbg是一个用于微软Windows的32位汇编级分析调试器”。在没有源代码的情况下,二进制代码分析非常有用。Olly也是一个动态调试器,意味着它允许用户在程序运行时修改一些东西。这在实际分析二进制文件尝试找出程序工作原理时非常的重要。Olly有许多许多很棒的特性,这就是为什么它是逆向工程领域的天字第一号调试器(至少在Ring3级是,我们马上就接触到了)。
二、概览
下面是Olly的主界面图片,上面有一些说明性的标签。
打开Olly时有一个默认的子窗口是CPU窗口。这是那个“大图片”中大部分数据所在的地方,如果你什么时候把它关掉了,只需要点击工具栏中那个“C”图标就行了。窗口被分成了四个部分:反汇编区(Disassembly),寄存器区(Registers),堆栈区(Stack)以及内存数据区(Dump)。下面是对每个区的说明:
1、反汇编区
该部分主要包含了二进制文件的反汇编代码。这是Olly显示二进制信息的地方,包括操作码(opcode)和翻译的汇编代码。第一列是指令的地址(内存中地址)。第二列按汇编语言叫操作码,每个指令至少对应一条代码(有很多对应多条)。这才是CPU真正需要并且是唯一能读懂的代码。这些操作码组成了“机器语言”,也就是计算机的语言。如果你看过二进制的原始数据(用十六进制编辑器),你除了看到这些操作码的字符串以外,就没有其他的了。Olly的一个主要工作是将这些“机器语言”“反汇编”成人类可读的汇编语言。第三列是汇编语言。不过退一步讲,对于不太懂汇编的人来说,汇编不比操作码好多少。不多随着学的越来越多,汇编提供了远多于代码所做的更多信息。
最后一列是Olly对于该行代码的注释。有时候会包含所调用API 的名字,比如 CreateWindow 和GetDlgItemX。Olly也会尝试通过将非API调用命名来帮助我们理解代码,上图中的“ImageRed.00510C84″ 和“ImageRed.00510BF4″就是此类情况。退一步讲,这些东西不是那么有用,Olly也允许我们将它们修改成一个有意义的名字。你也可以在该列写自己的注释。只要双击该列中的某行,就会弹出一个对话框让你输入注释。这些注释会自动保存到下一次。
2、寄存器区
每个CPU都有一组寄存器。用来临时存放数值,和高级语言中的变量很像。下面是寄存器窗口的特写(有标记):
顶部实际上是CPU的寄存器。如果值有变化,寄存器会从黑色变为红色(对于观察数值的变化真的非常有用)。你也可以双击任何一个寄存器来改变它的内容。这些寄存器能做很多事情,后面会讨论更多。
中间那块是标志寄存器,是CPU用来标记代码中一些事情的发生(两个数相等、一个数比另外一个大等等)。双击其中一个标志寄存器就可以修改它。这些玩意儿在我们的学习过程中扮演着重要的角色。
底下的部分是FPU,或者叫浮点运算器。只要CPU执行任何涉及小数点的运算就会用到它们。逆向者很少用到它们,主要是在我们接触加密的时候用。
3、堆栈区
堆栈是内存中的一段区域,用于存储二进制数据的临时列表。这些数据包括指向内存中地址的指针,字符串,制造者(makers)及大部分重要的数据,还包括函数调用后的返回地址。当程序中的一个方法调用另一个方法时,控制权需要转移到新方法以便于它能够返回。CPU必须知道一个新方法执行完后它是从哪被调用的,CPU能够返回到它被调用的地方,继续执行该调用之后的代码。堆栈就是CPU保存返回地址的地方。
关于栈你需要知道一点,他是“先进后出”的数据结构。打个常用的比方,就像是自助餐厅里下面带有弹簧的一摞盘子一样。当你向顶部“压(PUSH)”进一个盘子,下面的所有盘子都会被往下压。当你移除(“POP”)顶部的一个盘子,下面的所有盘子都会被往上提升一级。下个教程我们会实际看看,所以这里别担心看不太懂。
图片中,第一列是每一个数据成员的地址,第二列是十六进制的32位数据,如果Olly能够分析出来的话,那么最后一列是Olly关于数据项的注释。如果你注意看第一行的话,会看到“RETURN to kernel…”的注释。这里是CPU放在栈上的一个地址,以便于在当前的函数执行完后,CPU知道返回到哪。
在Olly中,你可以右键点击堆栈区,并且选择“修改(modify)”来更改内容。
4、内存数据区
在教程的开始,当我们讨论CPU从二进制文件中读取的原生“操作码”时,我提到过你能在十六进制查看器中看到原始数据。不过,在Olly中你不需要这么做。因为内存数据区就是一个内置的十六进制查看器,以便于你查看原始的二进制数据,只查看内存中的而不是磁盘上的。通常对于同样的数据有两种查看方式,十六进制的和ASCII的。图片中右边的两列就是(第一列是数据驻留内存中的地址)。Olly允许修改这些数据的显示方式,后面的教程就会看到。
三、工具栏
不幸的是,Olly的工具栏给大家留下了一点念想(尤其是当英语并不是作者的母语)。我将左边的工具栏图标进行了注释:
这些都是控制代码运行的主要工具。记住这些,尤其是你开始使用Olly的时候,这些按钮的所有功能都可以从“调试(Debug)”菜单的下拉菜单中访问到。如果你不知道某些东西是什么,你可以从菜单中看到。
关于一些图标我要多说几句。“Re-load”是用来重新启动应用并暂停在入口点处。所有的补丁(后面会看到)都会被删除,一些断点会失效,应用程序也不会运行任何代码。好吧,大部分情况下是这样的。“Run” 和 “Pause”做的就是你看到的那样。 “Step In”意思是运行一行代码然后暂停,如果有的话它会跟进函数的内部。 “Step Over”做同样的事情,不过它会跳过对另一个函数的调用。“Animate”有点像Step In和Step Over,不过它特别慢好让你观察。这个你用的不多,不过有时候看代码运行也挺有意思的,尤其是遇到多态二进制的时候能够观察到代码的变化。讲的有点超前了......
下面是各窗口的按钮图标(更加有点神秘):
点击其中的任何一个按钮都会弹出一个窗口,有些你会经常用到,而有的却很少用。看这些字母并不是很直观,这点你可以像我学习,把它们都点一遍直到你找到你需要的那个。每一个都可以通过“View”菜单来访问,所以在第一次征程时你可以获得些许帮助。下面我会介绍最常用的窗口:
1、(M)emory——内存映射窗口
内存窗口显示程序已经分配的所有的内存块。它包括正在运行的程序的主段(本例中,是Owner列中的“Showstr”)。在下面你能看到很多其他的段,这些都是程序载入进内存的DLL的,准备将来用的。如果你双击其中的任何一行,都会打开一个显示该段的反汇编代码(或十六进制数据)的窗口。这个窗口也显示了块的类型和访问权限、大小以及该段载入内存的地址。
2. (P)atches——补丁窗口
该窗口显示的是你做的任何“补丁”,即对原始代码的任何修改。注意那个状态(State列)是激活的(Active)。如果你重新载入应用程序(通过点击re-load图标),这些补丁就会失效。为了简便的使它们重新生效(或失效),点击期望的补丁以及敲击空格键。这可以打开或关闭补丁。注意那个“Old”和“New”列,显示的是原始的指令和修改后的指令。
3. (B)reakpoints——断点窗口
该窗口显示了当前所有断点设置的位置。这个窗口将会是你的好朋友
4. (K)all Stack——调用栈窗口
(哎呀,我知道为什么初学者记这些图标比较难了......)
这个窗口与前面看到的“堆栈区”不一样,它显示了更多信息,有关于代码中的调用、发送给这些函数的值以及其他的东西。不久我们会了解到更多。
*下一教程,我会包含我的经过“升级”的Olly版本,有些是你一看就明白的按钮。这里有张图片*
四、上下文菜单
本教程的最后,我会快速介绍Olly的右键菜单。它是许多操作产生的地方,所以你最少应该熟悉一下它。右键反汇编区的任何地方都会调出该菜单:
我只会介绍最常用的几项。随着经验的增多,你最终会遇到那些较少用到的选项。“Binary”菜单项允许你按字节编辑二进制数据。在这里你可以将埋在一堆二进制数据中的“未注册”几个字改成“已注册”。“Breakpoint”菜单可以设置断点。断点分好几种,下一章我会讲到。“Search for”有一个相当大的子菜单。这里你可以搜索类似字符串、函数调用等二进制数据。“Analysis”菜单会强制Olly重新分析当前正在查看的代码段。有时候Olly会对你正在查看的是代码还是数据感到困惑(记住,它们俩都只是一些数字),这个可以强制Olly将你正在看的内容当做是代码,并且尝试猜测该部分看起来应该是什么样子的。
注意,我的菜单看起来和你的可能不太一样,因为我装了一些插件,这些插件在菜单中添加了一些功能。不过别担心,后面的教程中我会介绍这些菜单的。
PDF文件下载(已排版):
教程二:介绍Olly Debug.pdf
本文相关附件下载(国外链接,有时不好使):
包含英文原文PDF*转载请注明来自看雪论坛@PEdiy.com
作 者: QQSniper
时 间: 2015-03-29,20:47:04
链 接: http://bbs.pediy.com/showthread.php?t=199128
1、本教程在 52破解论坛 及 看雪论坛 全球同步首发!
2、本教程翻译自国外的The Legend of Random的系列教程,英文原文地址:http://thelegendofrandom.com/blog/sample-page。本翻译教程只是为了给不愿看英文教程以及英文水平不好的人提供方便,同时也是自己的学习过程。该教程对英文水平要求不是很高,不过个人水平有限,有些地方翻译不准的请批评指正。
3、本翻译教程请勿用于商业用途。另,转载请注明!!!
4、感谢The Legend of Random!
发帖说明:
根据译者的时间安排,一般2-3天会上传一章。如果有段时间没更新请勿怪,因为译者的工作性质,有时是接触不到网络的。
其他章节:
全系列章节导航帖
第二章:介绍Olly Debug
一、什么是Olly Debugger?
援引作者Oleh Yuschuk的话“OllyDbg是一个用于微软Windows的32位汇编级分析调试器”。在没有源代码的情况下,二进制代码分析非常有用。Olly也是一个动态调试器,意味着它允许用户在程序运行时修改一些东西。这在实际分析二进制文件尝试找出程序工作原理时非常的重要。Olly有许多许多很棒的特性,这就是为什么它是逆向工程领域的天字第一号调试器(至少在Ring3级是,我们马上就接触到了)。
二、概览
下面是Olly的主界面图片,上面有一些说明性的标签。
打开Olly时有一个默认的子窗口是CPU窗口。这是那个“大图片”中大部分数据所在的地方,如果你什么时候把它关掉了,只需要点击工具栏中那个“C”图标就行了。窗口被分成了四个部分:反汇编区(Disassembly),寄存器区(Registers),堆栈区(Stack)以及内存数据区(Dump)。下面是对每个区的说明:
1、反汇编区
该部分主要包含了二进制文件的反汇编代码。这是Olly显示二进制信息的地方,包括操作码(opcode)和翻译的汇编代码。第一列是指令的地址(内存中地址)。第二列按汇编语言叫操作码,每个指令至少对应一条代码(有很多对应多条)。这才是CPU真正需要并且是唯一能读懂的代码。这些操作码组成了“机器语言”,也就是计算机的语言。如果你看过二进制的原始数据(用十六进制编辑器),你除了看到这些操作码的字符串以外,就没有其他的了。Olly的一个主要工作是将这些“机器语言”“反汇编”成人类可读的汇编语言。第三列是汇编语言。不过退一步讲,对于不太懂汇编的人来说,汇编不比操作码好多少。不多随着学的越来越多,汇编提供了远多于代码所做的更多信息。
最后一列是Olly对于该行代码的注释。有时候会包含所调用API 的名字,比如 CreateWindow 和GetDlgItemX。Olly也会尝试通过将非API调用命名来帮助我们理解代码,上图中的“ImageRed.00510C84″ 和“ImageRed.00510BF4″就是此类情况。退一步讲,这些东西不是那么有用,Olly也允许我们将它们修改成一个有意义的名字。你也可以在该列写自己的注释。只要双击该列中的某行,就会弹出一个对话框让你输入注释。这些注释会自动保存到下一次。
2、寄存器区
每个CPU都有一组寄存器。用来临时存放数值,和高级语言中的变量很像。下面是寄存器窗口的特写(有标记):
顶部实际上是CPU的寄存器。如果值有变化,寄存器会从黑色变为红色(对于观察数值的变化真的非常有用)。你也可以双击任何一个寄存器来改变它的内容。这些寄存器能做很多事情,后面会讨论更多。
中间那块是标志寄存器,是CPU用来标记代码中一些事情的发生(两个数相等、一个数比另外一个大等等)。双击其中一个标志寄存器就可以修改它。这些玩意儿在我们的学习过程中扮演着重要的角色。
底下的部分是FPU,或者叫浮点运算器。只要CPU执行任何涉及小数点的运算就会用到它们。逆向者很少用到它们,主要是在我们接触加密的时候用。
3、堆栈区
堆栈是内存中的一段区域,用于存储二进制数据的临时列表。这些数据包括指向内存中地址的指针,字符串,制造者(makers)及大部分重要的数据,还包括函数调用后的返回地址。当程序中的一个方法调用另一个方法时,控制权需要转移到新方法以便于它能够返回。CPU必须知道一个新方法执行完后它是从哪被调用的,CPU能够返回到它被调用的地方,继续执行该调用之后的代码。堆栈就是CPU保存返回地址的地方。
关于栈你需要知道一点,他是“先进后出”的数据结构。打个常用的比方,就像是自助餐厅里下面带有弹簧的一摞盘子一样。当你向顶部“压(PUSH)”进一个盘子,下面的所有盘子都会被往下压。当你移除(“POP”)顶部的一个盘子,下面的所有盘子都会被往上提升一级。下个教程我们会实际看看,所以这里别担心看不太懂。
图片中,第一列是每一个数据成员的地址,第二列是十六进制的32位数据,如果Olly能够分析出来的话,那么最后一列是Olly关于数据项的注释。如果你注意看第一行的话,会看到“RETURN to kernel…”的注释。这里是CPU放在栈上的一个地址,以便于在当前的函数执行完后,CPU知道返回到哪。
在Olly中,你可以右键点击堆栈区,并且选择“修改(modify)”来更改内容。
4、内存数据区
在教程的开始,当我们讨论CPU从二进制文件中读取的原生“操作码”时,我提到过你能在十六进制查看器中看到原始数据。不过,在Olly中你不需要这么做。因为内存数据区就是一个内置的十六进制查看器,以便于你查看原始的二进制数据,只查看内存中的而不是磁盘上的。通常对于同样的数据有两种查看方式,十六进制的和ASCII的。图片中右边的两列就是(第一列是数据驻留内存中的地址)。Olly允许修改这些数据的显示方式,后面的教程就会看到。
三、工具栏
不幸的是,Olly的工具栏给大家留下了一点念想(尤其是当英语并不是作者的母语)。我将左边的工具栏图标进行了注释:
这些都是控制代码运行的主要工具。记住这些,尤其是你开始使用Olly的时候,这些按钮的所有功能都可以从“调试(Debug)”菜单的下拉菜单中访问到。如果你不知道某些东西是什么,你可以从菜单中看到。
关于一些图标我要多说几句。“Re-load”是用来重新启动应用并暂停在入口点处。所有的补丁(后面会看到)都会被删除,一些断点会失效,应用程序也不会运行任何代码。好吧,大部分情况下是这样的。“Run” 和 “Pause”做的就是你看到的那样。 “Step In”意思是运行一行代码然后暂停,如果有的话它会跟进函数的内部。 “Step Over”做同样的事情,不过它会跳过对另一个函数的调用。“Animate”有点像Step In和Step Over,不过它特别慢好让你观察。这个你用的不多,不过有时候看代码运行也挺有意思的,尤其是遇到多态二进制的时候能够观察到代码的变化。讲的有点超前了......
下面是各窗口的按钮图标(更加有点神秘):
点击其中的任何一个按钮都会弹出一个窗口,有些你会经常用到,而有的却很少用。看这些字母并不是很直观,这点你可以像我学习,把它们都点一遍直到你找到你需要的那个。每一个都可以通过“View”菜单来访问,所以在第一次征程时你可以获得些许帮助。下面我会介绍最常用的窗口:
1、(M)emory——内存映射窗口
内存窗口显示程序已经分配的所有的内存块。它包括正在运行的程序的主段(本例中,是Owner列中的“Showstr”)。在下面你能看到很多其他的段,这些都是程序载入进内存的DLL的,准备将来用的。如果你双击其中的任何一行,都会打开一个显示该段的反汇编代码(或十六进制数据)的窗口。这个窗口也显示了块的类型和访问权限、大小以及该段载入内存的地址。
2. (P)atches——补丁窗口
该窗口显示的是你做的任何“补丁”,即对原始代码的任何修改。注意那个状态(State列)是激活的(Active)。如果你重新载入应用程序(通过点击re-load图标),这些补丁就会失效。为了简便的使它们重新生效(或失效),点击期望的补丁以及敲击空格键。这可以打开或关闭补丁。注意那个“Old”和“New”列,显示的是原始的指令和修改后的指令。
3. (B)reakpoints——断点窗口
该窗口显示了当前所有断点设置的位置。这个窗口将会是你的好朋友
4. (K)all Stack——调用栈窗口
(哎呀,我知道为什么初学者记这些图标比较难了......)
这个窗口与前面看到的“堆栈区”不一样,它显示了更多信息,有关于代码中的调用、发送给这些函数的值以及其他的东西。不久我们会了解到更多。
*下一教程,我会包含我的经过“升级”的Olly版本,有些是你一看就明白的按钮。这里有张图片*
四、上下文菜单
本教程的最后,我会快速介绍Olly的右键菜单。它是许多操作产生的地方,所以你最少应该熟悉一下它。右键反汇编区的任何地方都会调出该菜单:
我只会介绍最常用的几项。随着经验的增多,你最终会遇到那些较少用到的选项。“Binary”菜单项允许你按字节编辑二进制数据。在这里你可以将埋在一堆二进制数据中的“未注册”几个字改成“已注册”。“Breakpoint”菜单可以设置断点。断点分好几种,下一章我会讲到。“Search for”有一个相当大的子菜单。这里你可以搜索类似字符串、函数调用等二进制数据。“Analysis”菜单会强制Olly重新分析当前正在查看的代码段。有时候Olly会对你正在查看的是代码还是数据感到困惑(记住,它们俩都只是一些数字),这个可以强制Olly将你正在看的内容当做是代码,并且尝试猜测该部分看起来应该是什么样子的。
注意,我的菜单看起来和你的可能不太一样,因为我装了一些插件,这些插件在菜单中添加了一些功能。不过别担心,后面的教程中我会介绍这些菜单的。
PDF文件下载(已排版):
教程二:介绍Olly Debug.pdf
本文相关附件下载(国外链接,有时不好使):
包含英文原文PDF*转载请注明来自看雪论坛@PEdiy.com