首页
社区
课程
招聘
[翻译]使用OllyDbg从零开始Cracking 第三章
发表于: 2009-10-1 07:58 41241

[翻译]使用OllyDbg从零开始Cracking 第三章

2009-10-1 07:58
41241

呵呵,成正式会员了,发到这里。

更新第三章。
请下载附件pdf版本阅读,排版好。

第一章链接:http://bbs.pediy.com/showthread.php?t=98569
第二章链接:http://bbs.pediy.com/showthread.php?t=98614

==========================================================

使用OllyDbg从零开始Cracking

第三章

(翻译:BGCoder)

什么是寄存器,有什么作用

寄存器用来做什么,什么是寄存器?

处理器在执行程序时需要一个助手。当执行一条指令时,例如将两个内存单元中存放的内容相加,处理器需要先把其中一个的内容置入寄存器,然后再把另一个内容置入,这是使用寄存器的一个例子(译注1)。

ESP指向堆栈最顶端的地址,现在来看一下这个CrueHead'a CrackMe(译注2)。


ESP为12FFC4,如果你看一下OllyDbg的堆栈窗口,


我们看到寄存器显示了在我们的堆栈最上方的值,打个比方,它就是一堆信件最上方的那一封。

EIP – 另一个非常重要的寄存器,它指向当前将要执行的指令。


我们在下面截图中看到CrackMe第一条将执行的指令的地址为401000,很明显,这正是EIP所指向的值。


如果你按下F7,那么将执行第一条指令,然后切到第二条将执行的指令。


EIP现在为401002,在反汇编窗口第一条指令已经走过,现在位于第二条上。


其它寄存器包含有不同的值来为帮助处理器执行指令提供服务。
记住OllyDbg在哪里显示这些寄存器。


在这里,显示有EAX,ECX,,EDX,,EBX, ESP, EBP,,ESI,,EDI和EIP等
它们都被称为32位寄存器。  

在OllyDbg中,它们的内容以十六进制显示。例如,EAX的最小值为00000000,最大值为FFFFFFFF,用二进制表示将是11111111111111111111111111111111。




我们看到它为32位,每一位可被设为0或1,所以这些寄存器被称为是32位的。
你可以在汇编语言教材中查阅参考这些32位寄存器。

现在,在OllyDbg中完成一个使用寄存器的例子,来获得一些实践经验。
打开OllyDbg,加载CrackMe(也可以加载其它的程序)。把EAX更改为我们需要的值,这里假如为12345678


在打开的窗口的Hexdecimal处填入12345678。


就在这里:


然后点击OK。


现在EAX变为了我们的期望值,OllyDbg将变化的值用红色高亮显示。

如果你要用到EAX寄存器的一部分,在这个例子中,AX是EAX的一部分,是16位寄存器,例如,在上述例子中,它的值为5678,我们在CommandBar中进行输入也可以看到。

? AX(问号也可用于查询寄存器的值)


当你按下回车键后,


看到了5678,AX包含的值为EAX的后4位数字。还可继续分为AL和AH(译注:16位寄存器AX的低八位和高八位),它们的值在OllyDbg中同样能够观察到。
? AL


? AH


或者这样更直观,如果EAX = 12345678,那么AX就是它的后四位数字。


AH就是数字5和6的组合,AL就是最后两位。


同样的,EBX可被分为BX,BL和BH。几乎所有其它寄存器都可以如此分割(译注3)。

如何更改寄存器的值

我们已经看到了,OllyDbg可以更改寄存器的值。我们在EAX上进行的一切操作同样适用于其它寄存器:检查寄存器,看哪一个是你想要更改的,然后右键点击它选择Modify。但EIP是唯一一个例外的,它指向下一条将要执行的指令。
要改变头的值,需要如下操作。

EIP指向将要执行的指令,只需简单的在反汇编窗口中选择新的指令起始点


一旦选择,例如40101A,在其上点击鼠标右键,选择New origin here(汉化版翻译为:此处为新的EIP),EIP就会改变为40101A,这样,程序就将会从这条指令执行。


在这里你会看到,EIP指向了40101A。


什么是标志寄存器

就像我们在第一章看到的,在OllyDbg寄存器信息的下方显示的就是标志寄存器。


我们看到,这里的标志分为C,P,A,Z,S,T,D和O。
我们还看到,它们只能是两个数字值,0和1。某一具体指令的执行可以改变它们的含义。

我们一起来看看这些标志:

1)  O标志(溢出标志)

溢出标志在当操作改变了符号位,返回错误值时被设置(译注4)。

看一下以下在OllyDbg中的例子,同样使用CrueHead'a的CrackMe。
我们按照前面讲述的方法将EAX的值改为7FFFFFFF,即最大的正数。


现在使其加1,其和将超过最大正数,我们还知道,80000000对应的是一个负数。
这需要打开一个能够写入指令的对话框(译注:本例中请在反汇编窗口的00401000指令上按空格键,或在反汇编代码那一列的指令上双击)。


在里面写入:ADD EAX,1。


写完后点击Assemble,就可以看到原来在00401000处的指令变为了我们输入的指令。


ADD EAX,1,执行这条指令会发生什么?它将EAX加1,并将值返回到EAX。
F7将完成这条指令,O标志现在等于0


在F7后,看看发生了什么,EAX变为80000000,其数字符号更改。
O标志被设置为1,该标志的目的:当指令的结果超出了它可能存取的最大值,将被设置


2)  A标志(辅助进位标志)

完成操作后,用其它的某种形式对其进行记录。目前我们不需要关心此标志。

3)  P标志(奇偶标志)

如果指令的结果用二进制表示,该二进制数中的的1的总个数为偶数时,P标志被设置。例如:1010,1100,1111000.

为做个试验,我们已经在OllyDbg中设置了指令:ADD EAX,1(译注5),再一次执行该操作。选择401000行,右键点击选择New orgin here,如果按下F7,将执行该指令。


现在,EAX中包含的值为00000000,P标志等于1,(这里是先前指令的结果),让我们看一下,当向EAX中加入1时发生了什么。
按下F7


我们看到,P标志变为了0,EAX中值用二进制表示为1,其二进制格式含有1的个数是一个,是奇数。
再次返回,选择ADD EAX,1这行,右键点击该行,选择New origin here,按F7,再次加1。


我们看到,EAX先前为1,现在为2,其二进制为10,1的个数为奇数,P标志未被设置。重复上述操作,再加1,


现在EAX包含的值为3,二进制为11,现在它的结果包含偶数个1,奇偶标志被设置。
从这里,我们可以考到该标志的设置基于以下事实:当指令结果的二进制格式含有偶数个1时,被设置。

4)  Z标志(零标志)

这是在Cracking过程中最著名最有用的一个标志。当运算产生的结果为0时被设置。

让我们返回到401000处的指令:ADD EAX,1。(右键点击New origin here),先设置EAX的值为FFFFFFFF,即十进制-1,当按下F7运行指令ADD EAX,1使,结果为-1+1,等于0,零标志被设置。

我们看到按下F7后,EAX的值为0,所以,如果操作的结果为0,Z标志被设置为1。



我想现在应该清楚了,当指令的结果为0时,该标志被设置。

5)  S标志(符号标志)

这个标志在运算结果为负时设置为1。来看一下它是如何运作的,改变EAX的数值为FFFFFFF8,它等于十进制-8


再次按上述操作选择New origin here,然后F7再次执行ADD EAX,1。结果为FFFFFFF9,等于十进制-7,是个负数,所以符号标志位被设置。


按F7执行指令,S标志位被设置,标志位为1,很清楚:负结果导致S标志被设置。

6)  C标志进位标志

(无符号运算的结果)在超过最大数值时设置,可能是寄存器的值,例如,将EAX设为FFFFFFFF,然后加1,我们会看到,进位标志位设为1.


7)  T,D标志和其它

我现在还不打算解释它们的用途,这是一个相对复杂的话题。我们对它们也不太感兴趣。所以目前可以先着手相对更简单问题,此话题将留到以后探讨。

这样,我们已经对寄存器和标志位有了一定的理解。接下来,你可以逐个回顾一下其它指令,尽管到现在为止,我们仅看到了一个指令:ADD

如果看完本文后,你还存有疑惑,请用指令ADD EAX,1跟随本文的操作(以改变标志位的值)来进行实践。

对基础知识的深刻理解是非常重要的,所以请不要倦于实践操作,对待本文同样如此。

译注1
寄存器是CPU内部的高速存储单元,访问速度比常规内存快很多。

译注2
此CrackMe仍然来自第一章,因本章讲述的是寄存器基础知识,所以您可以用其它程序代替。此文件随本文附带。

译注3
仅用于EAX,EBX,ECX,EDX,其它寄存器可含有低16位寄存器,但不能进一步再分。

译注4
标志被设置,意思是说使其等于1,被清除,则使其等于0。

译注5
1.  更改寄存器EAX为00000000。
2.  将4010000处改为ADD EAX,1。

随文附件
1.  CrackMe:ollydbg01-Crackme.zip

翻译说明:
该系列教程目前官方已更新到第47章。本文原文为俄语,译者不才,斗胆翻译,采用了能用的所有手段。虽经本人严加审校,但难免讹误。有些词句加入了译者的理解,所以部分内容可能与原文有所出入。翻译本文也是译者学习的过程,所以错误在所难免。如发现错误,敬请指正,以免误人子弟。


该系列教程链接:http://wasm.ru/series.php?sid=17

本文原文链接:http://wasm.ru/article.php?article=ollydbg03

本文原文版权:[C] Рикардо Нарваха, пер. Aquila
译文版权:BGCoder,http://www.pediy.com

附件为pdf格式文本和随文附件:
使用OllyDbg从零开始Cracking 第三章翻译.rar


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (51)
雪    币: 486
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哈哈,莫非是沙发,支持LZ的加班精神!
2009-10-1 10:50
0
雪    币: 2307
活跃值: (1013)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
LZ翻译的好快!!好东西,支持。
2009-10-1 10:56
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
4
支持。。。。。
2009-10-1 11:18
0
雪    币: 251
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这真是太好了,太感谢楼主分享了
2009-10-1 11:53
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持楼主,这年头,懂俄语的少。
2009-10-1 13:10
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
三章都下完了,感谢LZ,等待后续篇章
2009-10-2 12:10
0
雪    币: 244
活跃值: (38)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
这两天很是郁闷。

起因:
回想起了翻译第一章时,里面提到的西班牙语教程。当时也访问过该网站:
http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/
进去之后,发现教程很多,但看不懂,就匆匆退出了
最后在文末照抄了原文版权属于:Рикардо Нарваха

发展:
无聊,想知道这个Рикардо Нарваха到底是何许人也, 开始注意起这个名字来,Рикардо ,Ricardo 越看越觉得哪不对劲,突然意识到http://ricardonarvaja.info会不会就是作者本人的网站。

结果:
没错,http://www.ricardonarvaja.info/就是原作者的网站,西班牙语。天哪,我居然拿着篇二手译文来翻译!
翻译此教程的激情一下消失了一半,呵呵。

推论:
多学几门外语是有好处的,可以少走很多弯路!

另:作者网站上的英文版是用类似咱们的金山词霸等翻译软件翻出来的,可读性很差。不过教程不错,还是想参照着N个版本把它翻下来……
2009-10-4 04:16
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
顶楼主,看得很爽,不过一下就看完了,呵呵,所以要加油哦
2009-10-8 02:58
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
Come,让教程来的猛烈些吧。我全下了,拿家去研究。
2009-10-22 15:40
0
雪    币: 152
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
多谢LZ的辛勤劳动
2009-10-22 15:59
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
12
support!期待下文,呵呵……
2009-10-22 16:08
0
雪    币: 94
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
好文,支持LZ,加油,。。。我们期待你的后续.
2009-10-23 18:00
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢,收下看看。
2009-10-24 20:05
0
雪    币: 437
活跃值: (82)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好文,希望看到后续教程!
2009-10-27 23:46
0
雪    币: 187
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不错不错支持
2009-10-28 00:57
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢,收下看看
2009-11-15 19:25
0
雪    币: 337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
建议一直更新下去,这个系列强烈推荐
2009-11-16 07:39
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好东西。。感激。。感激。。。
2009-11-18 14:47
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
第一 第二 第三我都下了 期待第4 哈哈
2009-11-18 15:07
0
雪    币: 7129
活跃值: (4070)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
盼...,盼...
2009-12-15 10:35
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
很厉害啊楼主也很努力
2009-12-15 16:14
0
雪    币: 198
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
thx!
2009-12-15 16:45
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
值得好好看看,我下了,希望能多翻译些,,支持你
2009-12-29 17:57
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
支持LZ。。期待。。
2009-12-29 18:18
0
游客
登录 | 注册 方可回帖
返回
//