软件注册问题(100分)

  • 主题发起人 主题发起人 端木飘零
  • 开始时间 开始时间

端木飘零

Unregistered / Unconfirmed
GUEST, unregistred user!
如何有效控制软件注册问题

我想让客户输入他们的单位名称,然后根据他们的单位名称得出一串字符或数字,再将这串字符或数字进行计算得出注册码,这种方式好吗?怎么进行编程呢?
 
不好,比较容易破解,而且一个序列号可以重复使用,最好是用硬件狗加密

上一做法简单说如下:
1。先做一个解密程序,输入相应的数据得到密钥
2。在主程序做一个解密程序,输入密钥进行校验如果正确可以使用,如果不正确不允许使用
 
第一次回帖,希望有分可分哦~~~
你可以将输入的单位名称转化为ASIIC码,然后进行计算。
网上也有很多的算法源码可以使用啊。自己也写了点crakme如果需要sunzones@sina.com。
希望你做的注册不会被破解,因为我们公司做的,我很容易就破解了。
 
思路我知道,就是具体采用哪种方式进行加密计算,我现在还不太有把握,请有经验的朋友给点例程。
 
来自:sunzones, 时间:2006-10-20 9:55:29, ID:3601450
第一次回帖,希望有分可分哦~~~
你可以将输入的单位名称转化为ASIIC码,然后进行计算。
网上也有很多的算法源码可以使用啊。自己也写了点crakme如果需要sunzones@sina.com。
希望你做的注册不会被破解,因为我们公司做的,我很容易就破解了。


我给你发了邮件,你给我发一份过来。
 
以下是我设计的一个模型:

b=f1(a); //a:机器号;b:注册码。
c=f2(b); //c,授权码;此处只会在软件的注册机里有,在应用软件中不会出现。
e=f3(b,d); //d:需要加密的功能函数;e:加密后的功能函数; b:加密因子。
g=f2-1(h); //h:输入的授权码。
k=f3-1(g,e); //k:解密后的功能函数。
run k;

if h=c then k=d so (run k) will success
if h<>c then k<>d so (run k) will fail

细节处理很重要,前些天一个同事大体上按照次思路做的一个,还是有写漏洞~~~~
 
有例程么
 
已发送~~~
模型没有例程,因为不同的加密函数使用的方法也不同~自己没编写过~
 
qq:171833017,www.ysza.com
免费资源里,注册demo
 
来自:一生中最爱, 时间:2006-10-20 10:21:32, ID:3601491
qq:171833017,www.ysza.com
免费资源里,注册demo

丝毫没防破解啊,我用了不到1分种就实现破解了啊!
 
同志们,我实现了我的目的,不过不是各位高手的方案,我该怎么分分呢?
westboy2000,应该把分给他,不过他没有来呀,我看得他以前的例程。
为难。
 
楼主,请先把解决方法共享出来,然后想咋分就咋分````除此偶没丝毫建议
 
unit hztopy;//汉字to拼音

interface
uses Windows, Messages, SysUtils, Classes, Forms,
Controls, ComCtrls, CommCtrl, DsgnIntf, dialogs;

function GetPYIndexChar(hzchar: string): string; //返回一个汉字的拼音首字符
function getpystring(hzstring: string): string; //返回一个汉字串的拼单首字符串
function SearchByPYIndexStr(SourceStrs: TStrings; PYIndexStr: string): string; //从Tstrings 中找到所有拼音首字符串中有PYindexstr的字符串

implementation

function getpystring(hzstring: string): string;
var
i: integer;
str: array[1..255] of string;
hz: string;
hzstr: string;
begin
hzstr := hzstring;
i := 0;
while hzstr <> '' do
begin
if (ord(hzstr[1]) >= 33) and (ord(hzstr[1]) <= 126) then
begin
str := copy(hzstr, 0, 1);
hzstr := copy(hzstr, 2, length(hzstr) - 1);
end
else if ord(hzstr[1]) > 127 then
begin
hz := copy(hzstr, 0, 2);
hzstr := copy(hzstr, 3, length(hzstr) - 2);
str := getpyindexchar(hz);
end;
if result = '' then result := str
else result := result + str;
i := i + 1;
end;
end;

function GetPYIndexChar(hzchar: string): string;
begin
case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
$B0A1..$B0C4: result := 'A';
$B0C5..$B2C0: result := 'B';
$B2C1..$B4ED: result := 'C';
$B4EE..$B6E9: result := 'D';
$B6EA..$B7A1: result := 'E';
$B7A2..$B8C0: result := 'F';
$B8C1..$B9FD: result := 'G';
$B9FE..$BBF6: result := 'H';
$BBF7..$BFA5: result := 'J';
$BFA6..$C0AB: result := 'K';
$C0AC..$C2E7: result := 'L';
$C2E8..$C4C2: result := 'M';
$C4C3..$C5B5: result := 'N';
$C5B6..$C5BD: result := 'O';
$C5BE..$C6D9: result := 'P';
$C6DA..$C8BA: result := 'Q';
$C8BB..$C8F5: result := 'R';
$C8F6..$CBF9: result := 'S';
$CBFA..$CDD9: result := 'T';
$CDDA..$CEF3: result := 'W';
$CEF4..$D188: result := 'X';
$D1B9..$D4D0: result := 'Y';
$D4D1..$D7F9: result := 'Z';
else
result := char(0);
end;
end;

function SearchByPYIndexStr(SourceStrs: TStrings; PYIndexStr: string): string;
label NotFound;
var
i, j: integer;
hzchar: string;
begin
for i := 0 to SourceStrs.Count - 1 do
begin
for j := 1 to Length(PYIndexStr) do
begin
hzchar := SourceStrs[2 * j - 1]
+ SourceStrs[2 * j];
if (PYIndexStr[j] <> '?') and
(UpperCase(PYIndexStr[j]) <>
GetPYIndexChar(hzchar)) then goto NotFound;
end;
if result = '' then result := SourceStrs
else result := result + Char(13) + SourceStrs;
NotFound:
end;
end;

end.

符合我的需求。
 
$CEF4..$D188: result := 'X'; 改为 $CEF4..$D1B8: result := 'X';
 
当然不好啊!如果这个名称和密码被发布,那么所有软件都可以注册!一般为了防止软件被重复注册,都是根据机器的某个硬件的编号来设计,因为这些编号是唯一的,所以换个机器是无法注册的 ,当然,你可以让客户同时提交机器码和客户名,至于算法,很多的,当然越复杂破解的时间就越长,不过,你要保证你的软件得到别人认可,否则,别人不愿意用或者可以找到类似的代替,谁还去注册???

所以,优秀的软件肯定会被破解,只要不是免费版本的,只是一个时间问题!
把心思用在如何提高软件质量上,而不是如何防止破解上!
如果你的软件得到用户认可,就是破解也无所谓,毕竟很多人还是愿意使用正版!windows就是很好的例子,虽然无数个破解版本,但是其销量还是遥遥领先!
 
我主要是为了控制一个单位注册一次,并不是要控制个人,个人无所谓,你愿意用就用,但是显示的单位名称是被控制的。
谁也不愿意忙活了半天,最后显示的是别的单位的名称。
 
我觉得lovezyp说的很有道理。
另外,可不可以问一下:端木飘零,你说的显示的单位名称是被控制的,是如何控制的呢?请指教。
 
首先仁兄lovezyp的说法我不赞同,我能问问,你认识的人中有用正版windows的吗?微软从你认识的人中赚钱了?呵呵~~~提到注册的时候大家都会用微软的windows做为例子,其实我觉得这个有待商榷,如果微软只有中文版,我真的很担心它的命运?如果你的软件是世界上80%的电脑要用的,恭喜你,你可以不用做注册,你也会拿到很多钱。我想问问大家有几个人电脑里面有正版的软件(个人付过钱,而且未提供给其他人)。我想很多人用的Delphi都是盗版的吧?惭愧,我从没为注册软件付过钱(因为我没钱)……不过现在做软件注册很难啊~~~有时比做软件功能都难,毕竟很多程序员不了解破解这个领域啊~~~
 
关于软件加密与破解,个人新身经历如下

本人曾开发过一个进销存类管理软件,作为共享软件发布的,刚放到网上不到一个月,就被破解了。在做程序时根本没太多考虑破解问题,只做了一个加密点来判断,看来是加密做的太简单了。因为是个初级版本,而且只是暴力破解,不影响别的版本,没有多想,继续做下去。
七个月后,软件经过数十个版本的改进和升级,自认为基本达到商业软件的标准了,加密措施也做得比较完善了,取硬盘信息,生成ID号,ID号和单位名称合起来生成注册码,程序中设定了几十个加密点,暴力破解的难度很大,自我感觉良好。用户的购买咨询电话也不少,正在春风得意之时,软件再次被破解,这次破解和上次不同的是使用了内存注册机,可以算出正版注册码,当我从搜索引擎查到这次破解的注册机时,感觉这个软件完了,我已经没有精力再去花更大的精力去升级了,自认为被破解的这个版已经是共享软件中同类软件中比较好的了。近两年的辛苦一无所获,当时真的很无助!
一个武汉的朋友原来准备在当地代理销售我的软件,发现破解后劝我把软件改一个名字,他说只要和原来的名字一样,即使升级也没有人买的,事实也正是这样,购买软件的廖廖无几,反而是用盗版的用户经常来电话咨询技术问题,并且对我说,他们是花钱从卖电脑的人那儿买的软件,卖电脑的告诉他们打这个电话可以获得技术支持,搞得我哭笑不得。有的干脆冒充试用版用户来咨询。
虽然目前这个软件还在继续做,懒得去研究加密技术,而使用了加密狗。第二次破解已经过去近一年了,仍然经常接到用户的电话,说是在试用破解的那个版本,咨询破解的那个版本如何使用的问题。:(
第三次破解还会出现,只是时间问题,第三次破解后,估计只能放弃这个软件了。

经历过这些事情以后,给想做共享软件的朋友建议如下:
1、共享版软件,只要好用,一定会有人破解,很可能是用户雇人破解(至少我遇到的情况是这样,我有些不理解,同样是花钱,为什么不买正版而要雇人破解,看来还是有点献身精神)。顾客是上帝啊,琢磨不透,得罪不的呀!软件加密有其固有的弱点,很脆弱。建议使用加密狗,稍微安全一些,如果加密点做多一些,一般暴力破解会有一些问题。
2、在做加密时要考虑到一旦被破解应如何应对,即程序应该能够识别出是正版还是破解,可以在被破解后采取补救措施。
3、注册码的计算关键不在算法,而在于如何隐藏算法,如今的破解者一般不会有耐心去用汇编研究你的算法,而是想直接找到你的计算结果。
4、你的加密信息一般不要透露,也许破解者会给你打电话,问你是如何限制用户的,如何加密的等等,也许你的回答会给他带来破解的灵感。
5、试用版和正式版最好不使用同一套代码,至少也要是条件编译,在试用版中去掉一些很关键,但不常用的功能或代码。
6、一旦你的软件被解密,升级一般无济于事。因为你的被破解的旧版本已经满足了80%以上用户的需求,没人会花钱的,最好的办法,改名。

仅供参考,不妥之观点,请批评指正!
 
gxx

同感!

支持。。。
 
后退
顶部