某DBISAM文件型数据库管理小工具的试用版破解过程详细记录

2022-06-21 00:00:00 修改 代码 所示 显示 如下图

这个小工具软件是一个 DBISAM 文件型数据库的管理工具,可以查看 DBISAM 格式的文件数据,软件名称为 DBISAM Viewer。
这个软件的试用版有一些限制:
1、时间限制,过期后不可用;
2、每次打开文件时会弹出 NAG 窗口;
3、查询的记录条数有限制,超过100条及以上数据不显示;
4、条件过滤;
5、导出文件也有100条限制,还有一个水印显示,并且禁止在"Options"界面中取消水印;
6、主窗口显示“(UNREGISTERED)”,About 窗口显示“未注册/演示版/只能查询前100条记录”等信息。

首先查看文件信息:

首先查看文件信息:

显示是 Delphi 编译的,“Scan /t” 再查一下:

显示了具体的 Delphi 版本为 3.0。程序的节信息如下:

标准的 delphi 程序。我们用 DeDe Dark 打开程序,查看 Form 和 事件 等信息:

DeDe 分析完成,表单信息如下:


上图是 TfrmMain 主表单的信息,事件过程的地址指针数据。

如上图所示,对事件进行排序一下,可以看到前面的几个事件是 Form 的事件,对我们有用的主要是 FormCreate 和 FormActivate 两个事件。


首先看看 Form 的  FormActivate 事件,如下图所示:

可以看到,这一段代码就是对时间进行限制的。下面再看看 FormCreate 事件:

继续:

主要是初始化一些界面显示,标题栏和状态栏字符串等。


现在开始跟踪调试,用 OD 载入程序,首先Ctrl+G跳转到 FormActivate 事件,如下图所示:


如下图所示,就是 TfrmMain 表单的 FormActivate 事件的代码,在 0x004B126B 处下一个断点,并按 F9 执行程序:

程序中断在所下的断点处,按 F8 执行代码到下图所示位置:

这里是一个时间转换函数,将 year, month, day 转换成 Delphi 的 TDateTime 格式(2021-08-07,实际上是一个双精度浮点数:44415.0)。

然后再取得系统时间,与转换后的时间比较:

如果当前系统时间大于 2021-08-07,则表示过期,程序会弹出如下提示:

然后程序会退出。


首先破解这个时间限制,如下图所示:


将 jbe 指令改成 jmp 指令即可。具体改为如下所示(修改的是后一条指令):

跳过时间检查后,进入主界面,如下图所示:

按“Open File” 打开一个 *.DAT 文件,会弹出一个 NAG 窗口(其实就是 About 窗口),如下图所示:

在 DeDe Dark 中找到这个 "Open File" 事件,如下图所示:

该事件调用了另外一个 btnLoadClick() 事件,业务处理都是在这个btnLoadClick()事件中进行的。在 OD 中跳转到 "Open File" 事件,如下图所示:


我们在 btnLoadClick() 中下一个断点(在 0x004AAE2B 处),然后再次打开一个 *.DAT 文件,如下图所示:

点“打开”后,OD 会中断程序:

一路按 F8 执行,执行完整个函数,也没有弹出 NAG ,如下图所示,已退出 btnLoadClick() 函数:

看来不在此函数内处理的NAG显示,F9 运行,可以听到“咣”的一声后,NAG 如期弹出。还好有这个“咣”的一声,我们在 OD 的命令窗口下断点 "bp MessageBeep",然后再一次打开一个*.DAT文件,这次会断在如下位置,如下图所示:


这是中断在系统 MessageBeep 函数中了,一路 F8 退出函数,如下图所示:


再一次F8返回上一级函数,如下图所示:

具体代码如下:

[Asm] 纯文本查看 复制代码

相关文章