使用OllyDbg从零开始Cracking(7)

2019-04-08 21:24

由于EBP容纳不下结果,所以只能保存能够容纳的部分,其余的部分丢弃。 第三个例子,只有两个操作数,两者相乘,并将结果存放到第一个操作数中。 0FAF55E8 IMUL EDX, DWORD PTR [EBP-18] EDX x [EBP-18] -> EDX

正如你所看到的,这些方法中,最好的方式就是一个操作数的方式,结果存放到EDX:EAX中,这意味着拥有两倍的大小,通过两个操作数或者三个操作数无法完成的操作可以通过一个操作数的方式来完成。

DIV(无符号除法)/IDIV(有符号除法)

这两个指令反别与MUL和IMUL相反。

DIV只有一个操作数,该操作数必须是无符号数,结果存放到EDX:EAX中。

IDIV指令经常被使用。如果是一个操作数的话,那么它和DIV类似,只不过操作数是有符号的,结果依然保存在EDX:EAX中。两个操作数的情况,第一个操作数除以第二个操作数,结果存放到第一个操作数中。三个操作数的情况,第二个操作数除以第三个操作数,结果存放到第一个操作数中。

由于跟MUL和IMUL类似,这里就不提供例子了。

XADD(交换并相加)

正如你所猜想的一样,这个指令其实就是XCHG和ADD两个简单指令的组合。 XADD EAX,ECX

我们可以看到ECX的值为1,EAX的值为9。按F7键,它们交换数值。也就是,EAX的值变为了1,ECX的值变为了9,然后相加。

31

可以看出,相加的结果是存放到第一个操作数中的。ECX的值现在为9,这是执行这条指令之前EAX的值。 NEG

该指令的目的是将操作数的符号取反,即如果我们有一个32位的16进制数,用NEG操作以后,结果就会取反。 例如:

在OD中写入NEG EAX指令,并将EAX的值改为32。

按下F7键后,将会得到一个-32。一起来看看:

在第二行中,我们看到的结果是十进制的-50(对应的十六进制的-32)。

32

如果你再命令栏中输入?-32,就可以得到其十进制的值。这个值就是-50,还有16进制的值FFFFFFCE。

所以NEG指令是将操作数符号取反。

逻辑指令

逻辑指令有两个操作数,两操作数按位运算,并将结果存放到第一个操作数中。 AND

只有两个二进制位都为1的时候结果才为1,其他情况,结果都为0。 1 and 1 = 1 1 and 0 = 0 0 and 1 = 0 0 and 0 = 0

让我们来看看OD中的例子: AND ECX,EAX

将ECX设置为0001200,EAX设置为3500。

手工计算的话,我们需要将两个数字转化为二进制: 1200二进制为01001000000000 3500二进制为11010100000000

我们将两数二进制按位与,例如:最后一位数字:

两个0取0。对每一位重复此过程,当两位都为1的时候才取1,这两个数中只有一次,两位都是1的情况。

按下F7键,我们将看到ECX的值为1000。相当于二进制的01000000000000。

33

OR

该指令AND的不同之处在于,两位中只要有一位为1,结果就取1。 1 or 1 = 1 1 or 0 = 1 0 or 1 = 1 0 or 0 = 0

XOR

该指令时异或运算,当两位不同时取1,相同时取0。 1 xor 1 = 0 1 xor 0 = 1 0 xor 1 = 1 0 xor 0 = 0

NOT

该指令是简单的按位取反。 not 1 = 0 not 0 = 1

例如:not 0110 = 1001

例如:EAX=1200,其二进制位1001000000000,我们将其填充为32位,不足的时候补0。 00000000000000000001001000000000 NOT后得到:

11111111111111111110110111111111

在windows自带的计算器中十六进制显示为FFFFEDFF。

将EAX设置为1200。

34

按F7键。

可以看到与计算器中的结果是一直的。

这里我们第5章就结束了,下一章我们将介绍比较,跳转,函数调用,以及函数返回指令。 第六章-比较和条件跳转

通常情况下,比较指令有两个操作数,并根据比较的结果来决定程序是否跳转到后面的分支中。

我们知道,当注册程序要求我们输入序列号的时候,这个时候,程序会执行一条或者多条比较指令,根据比较的结果来判断你输入的序列号是否正确。 接下来,我们将详细介绍比较和跳转指令。

我们知道,某些指令的指令会影响到标志位,最常见的就是零标志位Z。 CMP

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。 看看下面的例子: CMP EAX, ECX

EAX与ECX相减,它们本身的值并不改变,只是根据它们相减的结果来决定零标志位Z是否置1。在OD中来看一个例子。

写入CMP EAX,ECX指令并修改EAX和ECX的值,让它们相等。

35


使用OllyDbg从零开始Cracking(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:专业滑板项目可行性研究报告(目录) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: