♣
保护共享软件的一个思路
看了一篇保护共享软件这方面的文章,自己想了一个使用数字认证(rsa算法)的方法,也许别人已有实现,还请恕本人孤陋。方法如下:
1.提取用户机器信息(或者加密一下),生成字符串
2.注册时,程序向作者发送步骤1生成的信息
3.作者用私钥加密步骤2生成的信息,把密文作为注册码发给用户
4.程序得到用户输入的注册码后,用公钥解密后,与步骤1生成的字符串比较,以是否相同确定注册是否成功。
基本思路就是判断注册码是否是由软件作者本人发送来的。
大家对这个想法有什么看法,欢迎拍砖。
· 网友精彩回答:
这个思路是比较传统的实现方法之一。也有不通过网络的,直接在软件内部嵌入验证和生成程序。我认为重点还是软件的代码保护,一般的共享软件为了防止破解者的跟踪破解,都会采用加壳,但是比较著名的加壳软件加的壳有很多工具可以成功脱壳,再用反汇编工具和跟踪调试工具很容易破解。我发现一个剧难破解的共享软件,名字是“东日-多媒体日记本”,关键是无法脱壳。
可能忽略了一个问题,不管你的非对称加密做得如何好,但是有一个前提:
你提取的是机器信息,对于共享软件这实际上并不是一个非常有意义的事情,相对以前的普通作法并无大的创新
只要有一个合法版本的软件,那么要破解生成其它软件是比较容易的,通过修改提取的机器信息(直接在文件中修改生成数据),那么复杂的算法是毫无意义的,对于加密关键是要做到多个环节互相影响才好,环节的独立性太强是很容易被破解的
个人认为安全的方法还是采用硬加密狗的方法,而且一部分数据运算需要置入硬件内部完成,实现分布式的思想,但通常硬狗的运算能力有限,不适于大量计算,只做一些重要数据的运算比较合适
而由于硬狗与pc的通讯过程也是非常容易监听的(例如采用过滤驱动的方法),因此在发送和接收的数据中适当采用非对称加密是可行的
这就是个数字签名的基本原理嘛,我们公司的软件就是这样保护的,用的是个license file作为签名文件。
其实把软件做好才是根本的,真的没必要花太多精力在反破解上
虽然rsa加密很多做出注册机,但是很多软件只要改1个字节,就可以跳过验证
这就是传说种的爆破大法
其实我也一直思考这个问题,以下是我的见解,有不对的地方大家不要见笑
不管使用多么复杂的加密算法,最终总有一个判断跳转,所以破的时候从这里入手太容易了
我觉得,与其想个好的算法,还不如去防破解软件,softice,trw2000,等等,一但发现这些软件或类似的界面,就做出处理.防止了工具,基本上就安全了
to: qrlvls(空 气)
如果提取系统的安装时间有没有意义?
--------------------------
这与前面提到的取机器信息并没有区别
如同snowshow(snowshow)所说的:虽然rsa加密很多做出注册机,但是很多软件只要改1个字节,就可以跳过验证
这就是传说种的爆破大法
--------------------------
为什么出现这种情况呢?你在判定注册码是否正确后通常的方法就是jz或jnz跳转,而一旦把这个jz或jnz改成了jmp,那么前面大量的加密工作实际上都付之东流了
如果你有了一个好的加密方法,你可以想办法增强模块的耦合性来校验加密的结果,但要在代码结构和保护之间有所权衡
bobob所提到的方法以前有很多软件也在应用,也的确是一个行之有效的方法
优秀的动态跟踪调试工具也就是这些,虽然现在不断地出了很多补丁可以欺骗各种检测手法,但是共享保护的目的在于一段时间内保护软件的合法性判断,而不是永久保护
可以用多线程,多个线程来完成验证,同时验证过程放在部分功能代码之间,以迷惑跟踪者。
.- 更多问题:
- · 动态添加DATAGRID的绑定列怎么做!
- · 看看外行是如何充老大的
- · 关于使用ASP将ACCESS数据库转移到SQL SERVER 2000 的问题。
- · 求教高手,这个问题如何解决? 如何改变IFRAME的HEIGHT与WIDTH
- · 【投诉帖】扩充话题==灌水乐园== goodluckyxl(被人遗忘的狗) : 投诉你乱删除回复!!!!!
- · 有好办法吗?记录变为字段
- · 如何着手做一个影院系统,大家都进来说说。
- · 能否让Windows,redflag_linux,,redhat_linux三系统共存?
- · 熟悉PHP和JavaScript的大哥,近来帮我看一下问题.
- · 问个实体bean的问题阿!!
- · 问。在C#里怎么执行执行一个带参数的存储过程。
- · 动态的导航怎么实现
- · 为什么我的dib写到文件是黑屏啊?
- · 关于一个网上xml树型菜单例子的问题:
- · CListCtrl 插入多行,闪烁问题如何解决?
- · 如何利用ASP将XML数据岛导入到ACCESS里去2?

