关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。

2014年10月23日 技术资料 4690 views 0

贝壳PE_企业版没想到会受到广泛的关注,介于最近贝壳PE_企业版被人尝试破解甚至面临破解的边缘,以下总结了一些程序防止破解的思路.供大家学习交流.


贝壳PE_企业版V2.0.4也即将发布了,尽管受到破解问题此次更新依然以提升维护系统性能为主,程序依然只是简单加壳处理,使用破解版难免会导致不可估量的损失,或许就因为一不小心...

这是较老的文章,新版贝壳PE企业版已经无需担心这些问题。



经验收集:

1. 直接编译成机器码的软件容易被破解。相反。现在的动态解析语言不容易被破解。

因为机器码可以直接被反编译成汇编。而汇编容易被跟踪和调试。虽然机器码无法被反编译成源码。但是行迹容易被抓住关键的点。
而动态语言运行于VM之中。虽然代码是有被反编译的可能。但是反编译软件在工作时会碰到几个问题:1.1 版本问题,最新版可能无法反编译;1.2 复杂的代码和逻辑或者冷僻的写法无法反编译。还有,验证过程的复杂和技巧会使得代码无法被正确的反编译或者理解。因为动态语言的唯一方法是反编译后进行破解。如果有比较复杂的程序,反编译出来肯定是代码不完整,或者工程太大。
 
2. 验证过程需要隐藏,而不是提示:你的注册码无效。汇编调试者,最希望看到这样的提示了。
以我目前的做法。就是把注册码写入到一个ini中。然后置入一个标志,表明是注册用户。然后在未来的时间比如重新开启程序,或者是多少次使用之后,或者是未来的某个时间,几分几秒才进行验证。就极大地迷惑了一部分人。
 
3. 静态的机器码生成规律是不对的。我采用的是动态的机器码生成方式。就是说每次生成的机器码都不一样。其实机器码肯定是一样的。但是以不同的加密规律进行显示。破解者也会量力而行的。
 
4. 由密字“12345678”生成的MD5如果能见,也不是安全的。爆破法是适合任何口令的猜测的。虽然单向算法是不可以逆转的。但是爆破就是有效的。暴力的词典生成是可以搞定的。所以尽可能地隐藏或者多位置存放是必须的。对于存放的东西必须得进行多次加密和单向算法。而且根据一些因素来动态决定算法。比如今天星期一,采用第一种算法。今天是星期二,则采用另外一种算法。总而言之。不要幼稚地认为把密码用md5存在数据库那就是安全。除非你是一个学生,否则不要写这么简单的东西。在我的总结看来。迷惑,动态,加密,多次加密,多处存放关键数据,多处验证,多时验证这些才是可行的。
 
试想把你输入的注册码存放在十张表内,然后根据每个表内存放的数据生成某些数据,再在程序启动时验证这些数据,并对全局变量等进行控制。这样的程序似乎无法被简单地破解。即使找到一些地方,也还是会有功能上的限制。比如限制菜单,限制数据行数。如果功能写得变态一点,就算拿到源代码。也要是有经验的程序员调试N久才可以修改回来。何况说没有源代码呢。
 
5. 对调用外部dll进行验证的程序,必须注意不要被人替换掉dll的傻瓜式破解。必须时刻验证外部的dll是否为原始的dll。比方说返回一个磁盘的序列号。如果dll被替换,永远都返回某个已注册的磁盘号,那你的程序就是通通成免费版了。
 
6. 程序本身的MD5至关重要。就是说,程序必须有方法发现自己被修改了。对于修改字节码的做法是可以发现的啊。可以在程序执行之初,用一个启动程序来调用主程序,并对主程序进行验证。如果发现被修改。可以删除自身,也可以格式化硬盘。这个由你自便。也可以写一个死循环。。。吓吓人。
 
 7. 你把软件的售前咨询,价格做得适当,售后服务跟上。这样才是树立品牌,积极打击盗版的正统方法。就算好事者用破解版,那也全当测试而已。真正的企业用户,正式场合下使用,他也不会为公司节约几百,几千块而担当那个风险。所以。能给一个宽松的测试版本也是必须的。
同时,你可以自己写一片 文章,比如:某某软件破解版,免费版,绿色版。并做好宣传。使用者往往喜欢在百度里这里搜。那也能最先搜到你的。这也算一个搜索引擎的优化吧:)
 
8. 可以进行网络验证是否正版。
这样部分关键的验证过程可以做在网络程序里。就不会被破解了。把加密过的机器码和注册码都上传。然后返回一个复杂的数据包。用这个数据包对本地的一些变量进行设置。。。复杂些。。。这样就保险了。
 
9. 严密防止代理商破解软件。代理商因为有渠道和大量散发软件赚钱的机会。所以要严格防止他们作案。还有他们掌握的机器码和注册码也很多。容易分析出破绽。另外就是对软件非常熟悉。利益驱动上,他们是最容易搞破解的。
 
10. 软件升级。如果能做到2-3个月升级一次。或者一年内来一次断点升级(旧版本无法直接升级)这样验证方式和注册码计算等不同。部分破解版用户必然被限制在较低版本。而软件也有必要设置一些时间限制。比如2年内必须升级。否则无法使用。
 
11.形成强势品牌。客户相信品牌自然杜绝破解。因为破解无保证。私人如果使用倒无妨,就当免费宣传吧。如果企业使用。必然考虑数据安全性。所以企业的软件。更加不用怎么去担心。


比如某个MIS人员找了一个破解的OA,一套OA上去一运行就是三年五年。中途遇到问题,你去找谁?公司领导非常器重你,认为OA跑得很顺。而如果要升级到新版本,或者软件出现一些问题。你如何解决得了?所以的所以。针对企业的软件倒不太会在意破解。比如市面上的很多财务软件。破解的大把。而面向个人使用的软件那就不必去说了。要收到钱是非常困难的事情。所以可以免费一段时间给其测试。比如通达的OA。可以30user测试一年。这是非常好的做法。至于很多我看几十块钱的软件,别那么费劲。。写这些软件有什么用。对普通客户收钱。在中国现在还很难。

👍好活当赏🧧