关于一个Java程序软件保护的问题,请各位指点指点~

wugng 2004-01-06 11:11:58
最近在要做一个Java程序软件保护,初步有以下想法,请大家看看有什么不足
大致上流程如下:
1, 首先提供一个小工具给用户取得用户机的唯一信息,然后用户需要将此信息返回给我
2. 使用此唯一信息生成用户License,并返回给用户
3. 程序运行时进行License的验证

那么这样就有以下几点需要保证:
1.使用客户端Dll文件取得客户端机器的唯一信息
2.对取得用户机信息的客户端Dll文件进行签名,保证此文件不被篡改,此时不能保证dll被调用.(这个Dll可是我进行软件保护的核心,随便被用户改掉可不行^0^)
3.根据用客户端Dll文件取得客户端机器的唯一信息产生License, 并对License文件签名,保证此文件不被篡改(即用户不可能通过修改License进行破解)
3.Java代码中安全验证程序分散于系统的各个子模块中(保证Java的调用代码的安全, 避免用户修改一处代码即可破解的情况,除非其能找出所有的Java调用代码:P)
4.在验证是,检查客户端Dll文件是否被加载,保证Java运行和外部系统中的接口被唯一调用
检查Java程序运行时是否载入客户端Dll文件(BTW:这是一个JNI程序调用)

大致上就是这几点, 请各位指点一下还有什么不足或漏洞.
另外,关于第4点, 如何取得在Java程序运行时加载了多少个Dll,不知到大家有没有什么好办法.
还有,客户端Dll文件取得客户端机器的唯一信息我准备是用网卡Mac地址信息, 但在许多情况下用户可以自行修改Mac地址,所以不能保证用户机器的唯一性, 不知还有什么机器的物理信息是不变的,也请大家一起指点一下

嗯, 分不够可以在加, 还请大家多帮忙:)
...全文
122 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wugng 2004-01-14
  • 打赏
  • 举报
回复
哎,算了,我决定这么做了,感谢上面几位CSDN的朋友的帮忙
结贴了
wugng 2004-01-08
  • 打赏
  • 举报
回复
嗯,还是只有通过JNI来获得了当前进程加载的模块信息了
Java本身似乎不能直接取得这样的数据~
lapwing2002 2004-01-07
  • 打赏
  • 举报
回复
使用JNI可以得到当前进程加载了什么模块
takecare 2004-01-06
  • 打赏
  • 举报
回复
为什么不编在一个dll里呢?
wugng 2004-01-06
  • 打赏
  • 举报
回复
关于如何取得在Java程序运行时加载了多少个Dll这个问题,还不知大家有没有什么好办法.多指点啊
wugng 2004-01-06
  • 打赏
  • 举报
回复
似乎与软件序列号+注册号有些相似,:)
但是我们的注册号是不能让用户随意产生的, 必须是用户机的唯一序号,才能保证用户的license只能在用户的机器上使用
wugng 2004-01-06
  • 打赏
  • 举报
回复
没错,开始时用户只能得到我们的有使用期限的试用版本,一般是30天, 如果他需要一个正式版,那么就需要我们为他颁发一个license, 为了保证这个license是与他的机器相关的,我们只能先让他运行我们的一个小工具,产生与其机器相关的唯一序号, 在他把这个唯一序号mail给我们之后, 我们就可以根据此来生成一个正式版的license了, 用户得到这个正式版的license后输入到我们的试用版本, 验证通过即可成为正式版.
takecare 2004-01-06
  • 打赏
  • 举报
回复
如果没有网络的话,给他一个有使用期限的版本。
通过email中可以吧。
wugng 2004-01-06
  • 打赏
  • 举报
回复
呵呵, MS的那种激活机制的确有效, 以后也是我们发展的一个方向,当然,要我们的系统有足够多的客户才行:P
wugng 2004-01-06
  • 打赏
  • 举报
回复
takecare(大厅), 可能我的客户和我在网络上是不连通的, 那么系统如何知道"这对软件序列号/注册号已经有人用过了"呢
takecare 2004-01-06
  • 打赏
  • 举报
回复
如果你一定要这么做的话,还有一个选择那就是取硬盘号,这个目前好像可行的。
takecare 2004-01-06
  • 打赏
  • 举报
回复
intel曾经在p3之前时候cpu序列号的,但是因为有侵权的嫌疑,所以都没有了,而且pIII在bios中也都是被禁止掉了。
takecare 2004-01-06
  • 打赏
  • 举报
回复
windows目前就是这样做的,ms知道有人盗用,但是他还是希望你继续用,因为他现在不想发难。要不然,中国市场将是linux的天下。呵呵,好精明的ms呀。
wugng 2004-01-06
  • 打赏
  • 举报
回复
lapwing2002(), 关于Mac地址信息, 其实用户可以自行修改Mac地址,所以不能保证用户机器的唯一性, 不知还有什么样的机器物理信息是不变....
takecare 2004-01-06
  • 打赏
  • 举报
回复
使用软件序列号+注册号来做。
要crak也可以,他们可以先用者,但是系统知道这对软件序列号/注册号已经有人用过了。这样的话你就可以先保留你的权利,等你想发难的时候,再找他们算帐。

用jaas保护你的类,此外还可以使用证书来达到管理发布在外的客户版或接口。
wugng 2004-01-06
  • 打赏
  • 举报
回复
我也考虑过混淆的问题,但使用混淆后JNI程序调用似乎会有些问题,并且混淆后的性能上影响也有些明显......
wugng 2004-01-06
  • 打赏
  • 举报
回复

我需要根据保证正式的license与用户机唯一挂钩, 好像也只能这样吧!
况且,据我所知象这样做公司也可不少呀~

不知你有什么好的办法,不妨讨论一下

tiger_wkh52741 2004-01-06
  • 打赏
  • 举报
回复
.class需要保护这个很重要...
考虑将它们反编译!
lapwing2002 2004-01-06
  • 打赏
  • 举报
回复
以下的文章里是关于混淆器的讨论
http://expert.csdn.net/Expert/topic/2547/2547351.xml?temp=.7607691
lapwing2002 2004-01-06
  • 打赏
  • 举报
回复
1 标识用户: 用户名+用户机的特定信息,然后也可对这些信息作个MD5或SHA-1散列。
http://expert.csdn.net/Expert/topic/2560/2560802.xml?temp=.4622309 有我在Java里使用JNI访问MAC地址的例子程序
2 .class 文件同样需要保护,至少要使用混淆器,也可以对.class文件进行加密(DES,IDEA),然后定制ClassLoader,在载入类时进行解密(需要付出性能上的代价)
3 可以使用Https链接

加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧