OD 实验(十二) - 对一个 Delphi 程序的逆向

程序:

运行程序

OD 实验(十二) - 对一个 Delphi 程序的逆向_第1张图片

界面显示的是未注册

点击 Help -> About

OD 实验(十二) - 对一个 Delphi 程序的逆向_第2张图片

点击 Use Reg Key

OD 实验(十二) - 对一个 Delphi 程序的逆向_第3张图片

这里输入注册码

用 PEiD 看一下

OD 实验(十二) - 对一个 Delphi 程序的逆向_第4张图片

该程序是用 Delphi 6.0 - 7.0 写的

逆向:

用 OD 打开程序

OD 实验(十二) - 对一个 Delphi 程序的逆向_第5张图片

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

然后右键 -> 查找文本

OD 实验(十二) - 对一个 Delphi 程序的逆向_第6张图片

搜索

OD 实验(十二) - 对一个 Delphi 程序的逆向_第7张图片

这里有个是 accepted 为接受,failed 为失败

双击到 accepted 处

OD 实验(十二) - 对一个 Delphi 程序的逆向_第8张图片

如果程序执行到这里则说明,注册码是可以的

在 Delphi 中,push 后的 retn 指令相当于 jmp 指令

OD 实验(十二) - 对一个 Delphi 程序的逆向_第9张图片

在该 push 处下一个断点,然后跑一下程序

OD 实验(十二) - 对一个 Delphi 程序的逆向_第10张图片

输入注册码,点击 Register

程序没有停在断点处,我们往上看程序

OD 实验(十二) - 对一个 Delphi 程序的逆向_第11张图片

可以看到很多的 call 指令

这也是 Delphi 语言的特性

OD 实验(十二) - 对一个 Delphi 程序的逆向_第12张图片

在提示信息之后下一个断点

重新跑一下程序

OD 实验(十二) - 对一个 Delphi 程序的逆向_第13张图片

输入注册码,点 Register

OD 实验(十二) - 对一个 Delphi 程序的逆向_第14张图片

程序停在了断点处

OD 实验(十二) - 对一个 Delphi 程序的逆向_第15张图片

程序会出现这样的对话框

点击“确定”,然后按“Register”

再按 F8 往下走

OD 实验(十二) - 对一个 Delphi 程序的逆向_第16张图片

走到某个地方会跳到动态链接库处

按“-”后退一步看看在哪跳的(“+”为向前一步),已经执行,只是向前或向后看一下

OD 实验(十二) - 对一个 Delphi 程序的逆向_第17张图片

在 call 上面的 mov 指令下一个断点

OD 实验(十二) - 对一个 Delphi 程序的逆向_第18张图片

运行程序,停在该断点处

如果继续执行的话,会弹出刚才那个错误的对话框

OD 实验(十二) - 对一个 Delphi 程序的逆向_第19张图片

把 call 语句改为 nop

OD 实验(十二) - 对一个 Delphi 程序的逆向_第20张图片

接下来有个 jbe 跳转语句会进行跳转

OD 实验(十二) - 对一个 Delphi 程序的逆向_第21张图片

跳转到下面的地方

OD 实验(十二) - 对一个 Delphi 程序的逆向_第22张图片

按 F8 继续往下走

OD 实验(十二) - 对一个 Delphi 程序的逆向_第23张图片

这里有两个跳转,这两个跳转都是未实现的

如果这两个跳转都没跳的话,将会弹出错误的对话框,所以要让其中一个进行跳转

je 跳转的地方为

OD 实验(十二) - 对一个 Delphi 程序的逆向_第24张图片

jnz 跳转的地方为

OD 实验(十二) - 对一个 Delphi 程序的逆向_第25张图片

jnz 跳转到退出的位置

所以,让 je 指令执行跳转,把 je 改为 jmp

OD 实验(十二) - 对一个 Delphi 程序的逆向_第26张图片

je 执行跳转之后按“F8”继续往下走

OD 实验(十二) - 对一个 Delphi 程序的逆向_第27张图片

这里有个已实现跳转的 jnz 跳转

OD 实验(十二) - 对一个 Delphi 程序的逆向_第28张图片

如果它实现跳转的话,将会跳过成功的对话框,所以不要让它实现跳转

把该指令改为 nop

OD 实验(十二) - 对一个 Delphi 程序的逆向_第29张图片

然后继续按 F8 往下走

OD 实验(十二) - 对一个 Delphi 程序的逆向_第30张图片

走到这个地方会弹出成功的对话框

OD 实验(十二) - 对一个 Delphi 程序的逆向_第31张图片

 

转载于:https://www.cnblogs.com/sch01ar/p/9678256.html

你可能感兴趣的:(OD 实验(十二) - 对一个 Delphi 程序的逆向)