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 运行
修改成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架