OD 实验 - 破解程序的文件验证

需要破解的程序

双击程序,提示需要许可证文件

用 OD 打开

LoadIconA 为加载图标

LoadCursorA 为加载鼠标

F8 走一下程序

走到了这里,调用了 CreateFileA,打开或创建文件 Keyfile.dat

但是当前目录没有 Keyfile.dat 文件

接下来是有个跳转指令 jnz 指令跳转到地址 0040109A

先看一下地址 0040109A 上的指令

地址 0040109A 走下去是调用 ReadFile

如果这个 jnz 语句没跳转而是直走的话,程序将退出

所以要让 jnz 这个语句实现跳转,当前的条件不足以让这个 jnz 进行跳转

jnz 跳转的条件是 ZF=0

把 ZF 改为 0,让这个 jnz 指令进行跳转

按 F8 往下走

程序实现了跳转

然后 F8 继续往下走

然后走到 ReadFile 读取文件

之后有个 jnz 跳转指令,还是有一个 jmp 跳转指令

该跳转哪个跳转指令还不能确定

先看看地址 004010B4 上有什么指令,为 xor ebx, ebx

再看看地址 004010F7 上的指令

这个是最早运行程序弹出来的对话框

看来要执行 jnz 跳转指令

将 ZF 置 0,按 F8 进行跳转

之后有一个 jl 跳转指令

看看地址 004010F7 上的指令

看来不能进行这个跳转

jl 跳转指令为当 SF != OF 的时候才进行跳转

将 SF 的 1 修改为 0,不让 jl 跳转指令进行跳转

F8 往下走

有个 je 跳转指令,跳转到地址 004010D3

不知道下面的情况怎么样,执行 je 跳转指令看看情况

然后有两个跳转指令 jl 和 jmp

从上面的步骤可以知道,地址 004010F7 不能走,那就不跳转 jl 指令,执行 jmp 跳转指令

这个跳转已经实现了,把 SF 设置为 0,为 SF = OF 不进行跳转

然后按 F8 往下走,到 jmp 跳转指令

看看地址 00401205 上的指令

这个地址上的指令是最终想要的

所以执行这个 jmp 跳转指令是正确的

按 F8 走 jmp 跳转

然后按 F8 进行往下走

成功

猜你喜欢

转载自www.cnblogs.com/sch01ar/p/9563386.html
今日推荐