OD 实验(十二) - 对一个 Delphi 程序的逆向
程序:
运行程序
界面显示的是未注册
点击 Help -> About
点击 Use Reg Key
这里输入注册码
用 PEiD 看一下
该程序是用 Delphi 6.0 - 7.0 写的
逆向:
用 OD 打开程序
右键 -> 查找 -> 所有参考文本字串
然后右键 -> 查找文本
搜索
这里有个是 accepted 为接受,failed 为失败
双击到 accepted 处
如果程序执行到这里则说明,注册码是可以的
在 Delphi 中,push 后的 retn 指令相当于 jmp 指令
在该 push 处下一个断点,然后跑一下程序
输入注册码,点击 Register
程序没有停在断点处,我们往上看程序
可以看到很多的 call 指令
这也是 Delphi 语言的特性
在提示信息之后下一个断点
重新跑一下程序
输入注册码,点 Register
程序停在了断点处
程序会出现这样的对话框
点击“确定”,然后按“Register”
再按 F8 往下走
走到某个地方会跳到动态链接库处
按“-”后退一步看看在哪跳的(“+”为向前一步),已经执行,只是向前或向后看一下
在 call 上面的 mov 指令下一个断点
运行程序,停在该断点处
如果继续执行的话,会弹出刚才那个错误的对话框
把 call 语句改为 nop
接下来有个 jbe 跳转语句会进行跳转
跳转到下面的地方
按 F8 继续往下走
这里有两个跳转,这两个跳转都是未实现的
如果这两个跳转都没跳的话,将会弹出错误的对话框,所以要让其中一个进行跳转
je 跳转的地方为
jnz 跳转的地方为
jnz 跳转到退出的位置
所以,让 je 指令执行跳转,把 je 改为 jmp
je 执行跳转之后按“F8”继续往下走
这里有个已实现跳转的 jnz 跳转
如果它实现跳转的话,将会跳过成功的对话框,所以不要让它实现跳转
把该指令改为 nop
然后继续按 F8 往下走
走到这个地方会弹出成功的对话框
OD 实验(十二) - 对一个 Delphi 程序的逆向的更多相关文章
- OD 实验(十五) - 对一个程序的逆向
程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...
- Linux基础入门(新版)(实验九-实验十二)
实验九 简单文本入门 一.常用的文本处理命令 二.文本处理命令 1.tr 命令 tr 命令可以用来删除一段文本信息中的某些文字.或者将其进行转换. 使用方式: tr [option]...SET1 [ ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十二:串口模块① — 发送
实验十二:串口模块① — 发送 串口固然是典型的实验,想必许多同学已经作烂,不过笔者还要循例介绍一下.我们知道串口有发送与接收之分,实验十二的实验目的就是实现串口发送,然而不同的是 ... 笔者会用另 ...
- 20155301第十二周java课程程序
20155301第十二周java课程程序 内容一:在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Ar ...
- 【IE6的疯狂之十二】一个display:none引起的3像素的BUG
今天同事给我看了一个display:none引起的3像素的BUG,非常奇怪!从来没碰到过display:none还能引起这种bug. 看代码: <div style="width: ...
- 实验十二 团队作业8:软件测试与Alpha冲刺
实验十二 团队作业8:软件测试与Alpha冲刺 实验时间 2018-6-13 Deadline: [6.13-6.19]之间任选连续5天的23:00,以团队随笔博文提交时间为准. 评分标准: 按时交 ...
- 实验十二 团队作业8:软件测试与Alpha冲刺 第四天
项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 Always Run! 作业学习目标 (1)掌握软件测试基础技术 (2)学习 ...
- 实验十二 团队作业8:软件测试与Alpha冲刺 第五天
项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 Always Run! 作业学习目标 (1)掌握软件测试基础技术 (2)学习 ...
- OD学习笔记10:一个VB程序的加密和解密思路
前边,我们的例子中既有VC++开发的程序,也有Delphi开发的程序,今天我们给大家分析一个VB程序的加密和解密思路. Virtual BASIC是由早期DOS时代的BASIC语言发展而来的可视化编程 ...
随机推荐
- MySQL 不开启slave如何完成异地复制
1,分批次通过远程的binlog来进行数据加载 业务新需求,线上数据库数据拉到本次,但是不允许开启slave服务,不建立直接外网的数据库账号,也不能打通数据库对外网的网络,所以我们测试环境无法通过普通 ...
- Go语言打印调用堆栈
Go语言打印调用堆栈 这两天看Go的代码,呃,协程太多,无数个携程调用了一个方法,彻底看不清了,所以就想到是不是可以把调用堆栈打印出来. 查了一下,发现Go的 runtime/debug 库可以把调用 ...
- angular 与jQuery混用 大坑一
由于angular是在真实dom加载之后,运行,所以jQuery操作dom时,要先于angular添加的元素(如,ng-repeat),所以常常会出现,元素错位,解决办法:添加一个透明的站位元素:
- Android常见问题——找不到HttpClient和okHttp的包
今天再用Android Studio进行网络编程的时候遇到了一个问题,就是怎么也找不到HttpClient的包,上网搜了一下也没什么结果,但最后偶然解决问题,下面总结了一下方法: 首先打开File-& ...
- crm 03--> crm与权限结合
---恢复内容开始--- 1:先分组 2:给权限分组 3:具体的权限(即设计url) 二:制作左侧菜单,显示当前用户拥有的权限 关于项目下的templates里的HTML查找顺序 先从根目录找,找不到 ...
- 通过Java Api与HBase交互
HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要,本文将继续前两篇文章中blog表的示例,介绍常用的Api. import java.io.IO ...
- 重温CLR(十四) 可空类型
我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型 ...
- [MEF] 学习之一 入门级的简单Demo(转)
MEF 的精髓在于插件式开发,方便扩展. 我学东西,习惯性的先搞的最简单的Demo出来,看看有没有好玩的东东,然后继续深入.这个博文,不谈大道理,看demo说事儿. 至于概念,请google ,大把大 ...
- travis-cli 使用
1. 添加项目 登录 travis 选择对应项目即可 2. 添加持续集成文件 .travis.yml language: node_js node_js: - "node" bef ...
- Cucumber 使用例子
1. junit 配置 @RunWith(Cucumber.class) @CucumberOptions(format ={"pretty","html:target/ ...