使用OllyDbg从零开始Cracking(8)

2019-04-08 21:24

按下F7键,可以看到EAX和ECX的值并没有改变,但是相减的结果是零标志位Z被置为了1,我们在OD来看一个例子。

实际上,我们并不关心相减的确切结果,我们只关心EAX和ECX是否相等。

虽然我们还没有介绍条件跳转,这里简单提一下,有两种可能性:根据标志的值来决定跳转还是不跳转。最简单的例子就是配合JZ指令,如果Z标志被置为1,就跳转,否则,就不跳转。

如果有两个序列号做比较,例如EAX存放的是你输入的序列号,ECX存放的是正确的序列号,该程序使用CMP指令来比较,如果它们两个是相等的,那么零标志位Z就置为1,后面JZ指令就会跳转到注册成功的部分。如果EAX不等于ECX的话,那么零标志位就会置0,那么就不会跳转到注册成功的部分。

让我们来看看有关条件跳转的一个更具体的例子。

符号标志位S是比较第一个操作数是否大于第二个操作数。 让我们来看下面的例子:

重新写入CMP EAX,ECX指令,但是现在要求是EAX的值要大于ECX的值。

按下F7键:

36

可以看到,零标志位Z是0,所以我们知道,这两个值并不相等,并且符号标志位S也等于0,我们就可以得知EAX-ECX结果是正的。也就说明EAX大于ECX。 依然是CMP EAX,ECX指令,但这次是EAX小于ECX。

然后按下F7键:

这里我们可以看到,EAX减去ECX的结果是负的,也就是说ECX大于EAX。所以符号标志位S被置为了1。

根据比较的不同结果来设置相应的标志位,来决定程序应该走哪个分支。此外,CMP指令还允许寄存器与BYTE,

WORD,DWORD类型的内存单元的值做比较。

这里,该指令是比较的EAX和405000内存单元的值,跟之前一样,我们在OD来看看解释窗口。

这个例子里面,EAX是小于405000内存单元中的值的,405000内存单元中的值是1000,相减的结果为负的,所以符号标志位S会被置1。

37

类似的例子还有

CMP AX,WORD PTR DS:[405000] 和

CMP AL,BYTE PTR DS:[405000]

这两种情况下分别是与BYTE,WORD类型的内存单元的值做比较。

TEST(逻辑比较)

该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位(比如说,SF,ZF,PF标志位),程序可以根据结果来决定是否跳转到相应的分支。 下面有几个例子:

TEST EAX,EAX

你会说,如果EAX与自己做比较呢?用这个指令,可以确定EAX是否等于0。 我们在OD中写入下面的指令: TEST EAX,EAX

与操作的表如下: 1 and 1 = 1 1 and 0 = 0 0 and 1 = 0 0 and 0 = 0

上表中结果为0的只有一种情况,只有当两个数都为0的情况(我们并不关心操作数的值是多少,因为我们是EAX与自身操作,它们永远是相等的),但是如果EAX的二进制某些位为1的话,那么运算的结果就不为零。 我们将EAX修改为0。

OD中在寄存器上单击鼠标右键选择零。

38

现在按下F7键。

我们看到,零标志位被置1了,两个0做与操作,结果为0,所以零标志位被置1。 如果我们将EAX改为非零值,然后重复上面的操作呢。

按下F7键。

零标志位没有被置1的话,就说明结果不等于0。

如果你使用计算器的话,可以计算出390 AND 390结果依然是390,二进制为1110010000。

因为位与运算中,如果两个操作数都为0,结果为0,如果两个操作数都为1,结果才为1,那么在这种情况,结果将依然是390,零标志位被置1。

上面是比较指令的主要部分,下面将介绍跳转指令部分。

JUMPS

所有的跳转指令都会指向程序将会跳转到的地址。我们在下面的列表中可以看到各种不同类型的跳转指令。

39

JMP – 跳转

JE, JZ – 结果为零则跳转

JNE, JNZ – 结果不为零则跳转 JS – 结果为负则跳转

JNS – 结果不为负则跳转

JP, JPE – 结果中1的个数为偶数则跳转 JNP, JNPE – 结果为1的个数为奇数则跳转 JO – 结果溢出了则跳转 JNO – 结果没有溢出则跳转

JB, JNAE – 小于则跳转 (无符号数)

JNB, JAE – 大于等于则跳转 (无符号数) JBE, JNA – 小于等于则跳转 (无符号数) JNBE, JA – 大于则跳转(无符号数) JL, JNGE – 小于则跳转 (有符号数) JNL, JGE – 大于等于则跳转 (有符号数) JLE, JNG – 小于等于则跳转 (有符号数) JNLE, JG – 大于则跳转(有符号数)

JMP

这是一个无条件跳转指令,即总是跳转到指定的地址。让我们在OD中来看一个例子:

当你执行这条指令时,将跳转到401031处,然后从这里继续往下执行。 在OD中有几个选项,可以使跳转指令突出显示。 进入OPTIONS-DEBUGGING OPTIONS:

切换到CPU标签页

40


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

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

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

马上注册会员

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