“破解”在今天已经大行其道,作为开发者用得较多的Delphi,由于有其实现的特殊性,破解方式与MFC大不相同,但是在DEDE出现以后,Delphi程序的破解就变得容易起来. 结合本人在开发与破解中的经验, 将几个提高反破解能力的想法提供出来,请大家指正.
1.不要使用明码比较.
如果在程序中使用类似如下代码:
if edt_SerialNo.Text = '1234567' then ...
else ShowMessage(”Serial No Error!”);
直接使用反汇编工具就可以看到注册码(序列号)了. 所以不能使用明码, 一定要是经过一系列计算.
2.针对DEDE寻找过程/函数入口的功能, 对要发布的程序做"混淆"---将BtnRegister名字修改为cmp_20040101, 这个没有任何意义的名字, 并适当在画面中多增加几个相似的控件.
3.针对DEDE对bpl包中函数地址的参考, 对于关键性程序, 如: 控制注册的程序(在Delphi做得最多的分布式数据库管理系统中常常是一台机器管理注册). 不要使用包含运行期包的方式. 而且可以将这部分VCL源码另存到项目目录下, 适当做一些修改(调整参考地址及调用代码).
4.判断密码可以多Call几个函数, 尤其是字符串作为参数. Delphi对字符串的处理与C/C++不同, 在栈中只保留一个地址指针, 全局字符串与局部方法不同, 而且每多CALL一层函数/过程, 指针就多指一层. 无他, 增加动态调试的复杂度而已.
5.如果是服务端程序(分布式数据库管理系统注册部分), 尽量做成系统服务. 并限制在98下使用(98下破解较容易), 注册不正确时, 服务端不报错, 而是不提供客户端服务.