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

运行程序

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

点击 About

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

这是要注册的

点击 Register

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

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

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

逆向:

用 OD 打开程序

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

搜索上图的内容

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

双击进去

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

上面有个 jnz 跳转指令

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

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

jnz 跳转语句上有个 test 指令

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

test al,al 判断 al 是否为 0

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

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

al 为寄存器 EAX 的后八位

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

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

test 指令上面有个 call 指令

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

用 OD 运行这个程序

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

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

按 F7 步入

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

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

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

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

走到这个地方的时候

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

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

按 F8 步过这个函数

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

EAX 变为另外一个地址

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

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

重新步入这个函数

步入该函数的第一个函数

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

首先看一下最后出现的 al

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

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

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

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

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

看看对 bl 操作的相关指令

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

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

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

把 1 赋给 al,按 F9 运行

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

修改成功

相关文章:

  • 2022-12-23
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
  • 2021-09-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案