做一个软件的注册码认证

30 views
Skip to first unread message

loseblue

unread,
Dec 30, 2009, 10:20:57 AM12/30/09
to pyth...@googlegroups.com
我想做一个软件带注册码认证。用户提供用户名,我提供注册码。用户通过用户名和注册码使用软件

用户名全部是数字。

我的思路是先将用户名转换为数字,然后加一个数N,然后md5加密,返回的值作为注册码给用户。

不知道这样能不能行的通?是否有隐患。

我比较担心客户通过md5算法暴力算出来N。导致注册控制失效。

Xin LI

unread,
Dec 30, 2009, 10:29:32 AM12/30/09
to pyth...@googlegroups.com, loseblue
On 2009/12/30 07:20, loseblue wrote:
> ������һ�������ע������֤���û��ṩ�û������ṩע���롣�û�ͨ���û���
> ��ע����ʹ�����
>
> �û���ȫ�������֡�
>
> �ҵ�˼·���Ƚ��û���ת��Ϊ���֣�Ȼ���һ����N��Ȼ��md5���ܣ����ص�ֵ��Ϊ
> ע������û���
>
> ��֪�������ܲ����е�ͨ���Ƿ���������

�У���Ϊ�����ƴӸ��Ͼ��Dz���ȫ�ģ���Ϊ�ͻ���ͬ���ܹ������ע���룩����
�Ҵ��ڶԳ�ʧ�ܵ����⡣

�Ƚϱ��յķ������÷ǶԳƼ����㷨4ʵ�֡��û���һ�˽�һЩ��Ϣ�������û�
����һ��hash���������̵Ļ���ֱ���ù�4Ҳ�У�������������������
�Լ���˽Կǩ��֮���ǩ��ء��ͻ��˳��й�Կ�����ù�Կ��֤���ǩ�����ʵ
�ԡ����Կ���ѡ�õ��㷨��RSA����Բ���ߵȡ�

> �ұȽϵ��Ŀͻ�ͨ��md5�㷨��f���4N������ע�����ʧЧ��


--
Xin LI <del...@delphij.net> http://www.delphij.net/
FreeBSD - The Power to Serve! Live free or die

shell

unread,
Dec 30, 2009, 10:40:40 AM12/30/09
to pyth...@googlegroups.com
������ѧûѧ��ô��������������㷨���ͻ�����ֻҪ֪��������l��f
�ƽⶼ����Ҫ����Ϊ����Ҫ�ͻ�����Ҳ����һ��ͬ���ֵ���������У����N��
д���ڴ����еġ���ida����һ�¾�����...
���Ƽ���ʹ�ù�Կ��ϵ������֤���ͻ������ṩ�û����������˽Կ�����û�
���������Ĺ�Կ�����û���һ�¾�ע��ͨ�������û�û�����˽Կ�����
�޷��ƽ⡣��������ķ����������⵽��f�ƽ⣬��ͨ���޸��ж���䣬�������
��ʧЧ��
��ǿ�ķ����ǽ�һ�δ���Ƕ�뵽���ע���ļ��У�ͨ��Կ����ע���ļ�����֤
ͷ�����û���һ�¡���󽫺���Ĵ���Ӧ�õ�Ӧ�ó����ij��������ȥ(���巽
�����в�ͬ)�����ͻ�������ע�ᣬ��ô����ԵľͲ����ƽ����⣬���Dz����
����ȱʧ�Ĵ�����ôд��...
��Ȼ��������ֻҪ��һ����Կһ����Ա�f�ƽ⡣
���ԣ����5ķ����ǽ������߼��Ƶ���������

loseblue �:


> ������һ�������ע������֤���û��ṩ�û������ṩע���롣�û�ͨ���û�
> ���ע����ʹ�����
>
> �û���ȫ�������֡�
>
> �ҵ�˼·���Ƚ��û���ת��Ϊ���֣�Ȼ���һ����N��Ȼ��md5���ܣ����ص�ֵ��
> Ϊע������û���
>
> ��֪�������ܲ����е�ͨ���Ƿ���������
>

> �ұȽϵ��Ŀͻ�ͨ��md5�㷨��f���4N������ע�����ʧЧ��
> --

> 4��: `python-cn`:CPyUG ~ �����û��� | ����:pyth...@googlegroups.com
> �˶�: http://tinyurl.com/45a9tb //���163/qq����:http://tinyurl.com/4dg6hc
> ����: https://groups.google.com/group/python-cn
> ����: ����б�! �ǻ�����! http://wiki.woodpecker.org.cn/moin/AskForHelp

Hu Cao

unread,
Dec 30, 2009, 10:53:06 AM12/30/09
to pyth...@googlegroups.com
-- 所以,完美的方案是将核心逻辑移到网络上做。
的确是这样的。

从计算理论上讲,*本地*验证一个程序的行为,等价于停机问题,不可判定。这话是另一位同学说的,一次和他讨论MapHack问题的时候。不过我还不怎么理解,但是他说道,理论上不存在一种只靠本地的办法,能够判断出自己有没有被修改。换句话说,本地的保护,都是可以破解的,具体只是难度和时间的问题。

不过,只要能够保证软件在一定时间内不被破解即可,追求绝对不被破解是没有意义的。

2009/12/30 shell <shell...@gmail.com>
你密码学没学过么?如果按照你的这个算法,客户那里只要知道这个方法,连暴力
破解都不需要。因为你需要客户那里也计算一遍同样的值,计算过程中,这个N是
写死在代码中的。用ida反向一下就有了...
我推荐你使用公钥体系进行验证,客户那里提供用户名,你用你的私钥加密用户
名。软件用你的公钥解密用户名,一致就注册通过。由于用户没有你的私钥,因此
无法破解。但是这样的方法很容易遭到暴力破解,即通过修改判断语句,让你的判
断失效。
更强的方案是将一段代码嵌入到你的注册文件中,通过公钥解密注册文件后,验证
头部和用户名一致。而后将后面的代码应用到应用程序的某个代码段上去(具体方
法各有不同)。如果客户不进行注册,那么他面对的就不是破解问题,而是猜你程
序中缺失的代码怎么写了...
当然,这个方法,只要买一个密钥一样可以暴力破解。
所以,完美的方案是将核心逻辑移到网络上做。

loseblue 写道:
> 我想做一个软件带注册码认证。用户提供用户名,我提供注册码。用户通过用户
> 名和注册码使用软件
>
> 用户名全部是数字。
>
> 我的思路是先将用户名转换为数字,然后加一个数N,然后md5加密,返回的值作
> 为注册码给用户。
>
> 不知道这样能不能行的通?是否有隐患。
>
> 我比较担心客户通过md5算法暴力算出来N。导致注册控制失效。
> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:pyth...@googlegroups.com
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:pyth...@googlegroups.com
退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
详情: https://groups.google.com/group/python-cn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

Heroboy

unread,
Dec 30, 2009, 11:06:47 AM12/30/09
to pyth...@googlegroups.com
只要你提供完整版的软件,Python破解起来易如反掌。除非你的软件一定要有网络来提供部分的服务才能用,否则怎么样复杂的加密算法到最后程序里也不过是一个是否注册的bool变量而已。

Can Xue

unread,
Dec 30, 2009, 3:55:58 PM12/30/09
to pyth...@googlegroups.com

2009/12/30 loseblue <lose...@gmail.com>

我想做一个软件带注册码认证。用户提供用户名,我提供注册码。用户通过用户名和注册码使用软件

用户名全部是数字。

我的思路是先将用户名转换为数字,然后加一个数N,然后md5加密,返回的值作为注册码给用户。



假设提供这个功能的模块叫 foo,这个函数叫 bar
 

不知道这样能不能行的通?是否有隐患。

我比较担心客户通过md5算法暴力算出来N。导致注册控制失效。


破解者只需要

import foo
foo.bar(...)

和暴力无关...
 



程晨

unread,
Dec 30, 2009, 8:07:34 PM12/30/09
to pyth...@googlegroups.com
这才是正解。本地加密目前最佳途径就是买硬件加密狗,厂家有教程告诉你如何使用,高档的加密狗都是含CPU的,可以写一个简单的函数放进去。这个几乎是无法破解的,唯一的方法是复制加密狗,当然这个成本也还是很高的。本地破解没有绝对的,只是加一个门槛而已,绝大部分用户都不能自己去破解,而复制加密狗之后无法像注册机一样在网上传播,所以这就足够了。

网络加密是最可靠的,极端的情况就是你把核心功能全做在服务器上,程序只是做数据的计算和提交,服务器返回结果而已。那破解的唯一方法就是黑掉你的服务器了。

pan shizhu

unread,
Dec 30, 2009, 9:51:39 PM12/30/09
to pyth...@googlegroups.com
> 这才是正解。本地加密目前最佳途径就是买硬件加密狗,厂家有教程告诉你如何使用,高档的加密狗都是含CPU的,可以写一个简单的函数放进去。这个几乎是无法破解的,唯一的方法是复制加密狗,当然这个成本也还是很高的。而复制加密狗之后无法像注册机一样在网上传播,所以这就足够了。

不够,因为加密狗其实只是个简单的函数而已,复制加密狗函数直接成为本地软件即可。虽然成本也很高,但是可以象注册机一样的传播。

本地加密从理论上是永不可能完整安全的。你有访问加密狗的代码,我可以修改可以跳过。可以用本地软件函数实现其中功能。——除非,你软件的全部功能都做在加密狗里面。——否则,只加密少量简单函数没意义。


> 网络加密是最可靠的,极端的情况就是你把核心功能全做在服务器上,程序只是做数据的计算和提交,服务器返回结果而已。那破解的唯一方法就是黑掉你的服务器了。

这个道理一样,如果你的网络只提供“认证注册”功能,那么我完全可以架个私服替换掉你的服务器,因为作为我的本机来讲。访问哪个服务器是我自己控制的。——除非你的程序的主要功能都在网络远端。然而那就不是本地程序加密的范畴了。

pmin

unread,
Dec 30, 2009, 11:17:18 PM12/30/09
to pyth...@googlegroups.com
看成本吧。
如果用户量不是很大(基本上你就属于这个情况)后者价值不是很高,你说的方法就差不多了。
当然我最不推荐直接拿16位和32位md5作验证的,这样的缺陷就是可以到cmd5,xmd5之类的网站上去破解。
建议在md5上玩些花样。比如取14位。
量力而为,别净整高端的,简单加密就是防君子不防小人。

2009/12/31 pan shizhu <pan.s...@gmail.com>

--

flya flya

unread,
Dec 30, 2009, 11:18:42 PM12/30/09
to pyth...@googlegroups.com
防君子,不防小人 ,随便搞个注册功能就行,等到你的软件值得破解,有人破解的时候,再考虑防范的问题就行,应该把精力放在提高软件的品质上。

2009/12/30 loseblue <lose...@gmail.com>:

> --
> 来自: `python-cn`:CPyUG ~ 华蟒用户组 | 发言:pyth...@googlegroups.com
> 退订: http://tinyurl.com/45a9tb //针对163/qq邮箱:http://tinyurl.com/4dg6hc
> 详情: https://groups.google.com/group/python-cn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp

--
http://www.flyaflya.com

Reply all
Reply to author
Forward
0 new messages