OD 实验(九) - 对一个程序的破解

程序:

运行程序

点击 About

这是要注册的

点击 Register

输入邮箱和注册码,点击 Register Now

逆向:

用 OD 打开程序

右键 -> 查找 -> 所有参考文本字串

搜索上图的内容

双击进去

上面有个 jnz 跳转指令

如果 jnz 实现跳转的话,就会提示注册成功

jnz 跳转语句上有个 test 指令

test al,al 判断 al 是否为 0

如果 al 为 0 的话,ZF 置 1,jnz 就不会实现跳转

所以 al 要为非零的数,jnz 才会实现跳转

al 为寄存器 EAX 的后八位

EAX 寄存器储存的是函数的返回值

test 指令上面有个 call 指令

用 OD 运行这个程序

点击 Register Now,程序将停在断点的函数处

按 F7 步入

这里面 call 调用了两个函数,执行了两个 test 指令判断 al

先用 F8 步过这两个调用往下走

走到这个地方的时候

这个时候的 EAX 的值为一个地址

按 F8 步过这个函数

EAX 变为另外一个地址

继续往下走,将走出这个函数

重新步入这个函数

步入该函数的第一个函数

首先看一下最后出现的 al

先把 al 的值赋给 bl,之后再把 bl 的值赋给 al

所以上图的第一个 call 指令是决定 al 值的关键

步入该函数,同样找最后出现的 al

看看对 bl 操作的相关指令

对 bl 的相关操作可以忽略,直接修改 mov al,bl 这里就好了

把 1 赋给 al,按 F9 运行

修改成功

posted @ 2018-09-09 22:26  Sch01aR#  阅读(364)  评论(1编辑  收藏  举报