如何实现软件有注册码功能(100分)

  • 主题发起人 pengshaopeng
  • 开始时间
P

pengshaopeng

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现软件有注册码功能
 
K

kingqc

Unregistered / Unconfirmed
GUEST, unregistred user!
很容易啊,把注册码放在注册表里,
每次启动检查注册表不就可以了,关键是加密的算法
 
P

pass

Unregistered / Unconfirmed
GUEST, unregistred user!
借光,如何每台机子生成不同的注册码呢?
 
D

deadcandance

Unregistered / Unconfirmed
GUEST, unregistred user!
用CPU ID或用户名生成注册码。
 
T

tomboy

Unregistered / Unconfirmed
GUEST, unregistred user!
强烈推荐turbo power公司的onGuard控件组,爽得让你无法忍受
 
P

pengshaopeng

Unregistered / Unconfirmed
GUEST, unregistred user!
各位仁兄:
能具体点吗?
tomboy:
onguard哪里有下载?能告诉我吗?谢谢
 
A

a_fi

Unregistered / Unconfirmed
GUEST, unregistred user!
另外还可以使用外壳软件实现限时和注册功能,象Aspect(好象是这个),怎么说呢,
很省事但是效果好象难以保证,脱壳的软件也实在太多了,推荐去 hyperd.126.com 那里
看看。他的主页上有连接。
 
B

beta

Unregistered / Unconfirmed
GUEST, unregistred user!
to a_fi: 是 ASPack :)
不过的确不管用 :-(
当然,要是你担心破解的话,那还是有很多问题要考虑的
要是不担心,那也可以非常简单
 
K

kingqc

Unregistered / Unconfirmed
GUEST, unregistred user!
turbo power公司的onGuard控件组是有源码的
不推荐使用
 
C

coolbaby

Unregistered / Unconfirmed
GUEST, unregistred user!
原理很简单,就是写注册表
有什么方便的控件么?
 
K

kingqc

Unregistered / Unconfirmed
GUEST, unregistred user!
你如果用控件的话
那就不要加密了
那样加了和不加都一样
 
B

Beckham

Unregistered / Unconfirmed
GUEST, unregistred user!
假设软件的主程序窗口为FORM1,则将该段代码置放在FORM1.CREATE事件中。代码如下:
procedure TForm1.form1create(Sender: TObject);
var
re_id:integer;
registerTemp : TRegistry;
inputstr,get_id:string;
dy,clickedok:boolean;
begin

 dy:=false;
//软件是否已到注册期、及是否允许继续使用的标志,当值为FALSE是为允许使用。
 registerTemp := TRegistry.Create;
//准备使用注册表
 with registerTempdo

 begin

   RootKey:=HKEY_LOCAL_MACHINE;
//存放在此根下
   if OpenKey('Software/Microsoft/Windows/CurrentVersion/Mark',True) then

    // 建一目录,存放标志值。当然也可以存放在已存在的目录下。怎么样,很难发现吧?
    begin

     if valueexists('gc_id') then
begin
//用gc_id的值作为标志,首先判断其存在否?
       re_id:=readinteger('gc_id');//读出标志值
       if (re_id<>0) and (re_id<>100) then
begin
//若标志值为0,则说明已注册。
              //若不为0且值不到100,说明虽未注册,但允许使用的次数尚未达到。
        re_id:=re_id+5;
//允许标志的最大值为100,每次加5,则最多只可用20次。
        Writeinteger('gc_id',re_id);//将更新后的标志值写入注册表中。
     end;

     if re_id=100 then
dy:=true;
//假如值已到100,则应注册。
    end
   else
Writeinteger('gc_id',5);//建立标志,并置初始标志值。
  end;

  if dy then
begin
//若dy值为TRUE,则应提示用户输入注册码,进行注册。
    clickedok:=InputQuery('您使用的是非注册软件,请输入注册码:',' ',inputstr);
    if clickedok then
begin

      get_id:=inttostr(27593758*2);//注册码为55187516,当然可加入更杂的算法。
      if get_id=inputstr then
begin

        Writeinteger('gc_id',0);//若输入的注册码正确,则将标志值置为0,即已注册。
        CloseKey;
        Free;
       end
      else
begin
//若输入的注册码错误,应作出提示并拒绝让其继续使用
        application.messagebox('注册码错误!请与作者联系!','警告框',mb_ok);
        CloseKey;
        Free;
        application.terminate;
//中止程序运行,拒绝让其继续使用
       end;

      end
    else
begin
//若用户不输入注册码,也应作出提示并拒绝让其继续使用
      application.messagebox('请与作者联系,使用注册软件!','警告框',mb_ok);
      CloseKey;
      Free;
      application.terminate;
     end;

  end;

 end;

end;

 
G

goddy

Unregistered / Unconfirmed
GUEST, unregistred user!
我的想法:取硬盤序列號+主板序列號+CPU序列號---->為注冊號
再由注冊號算出注冊密碼
同一台計算機就可公開注冊號和密碼 不用怕別人Copy
 
B

Brave

Unregistered / Unconfirmed
GUEST, unregistred user!
同意goddy的意见
我们现在使用硬盘的序列号加密,但是不太完善
因为三星等硬盘没有序列号,读主板和CPU的序列号也不好读。
哪里有好的读序列号的程序?
 
K

kingqc

Unregistered / Unconfirmed
GUEST, unregistred user!
最好的方法
还是做demo版
注册了再给正式版
当然那正是版是给用户定制的
 
W

WindMirror

Unregistered / Unconfirmed
GUEST, unregistred user!
得到一个随机数列串,提供给用户作为要注册的元字串
待用户注册返回该字串后,通过一定的加密算法,提供注册码
设定相应的变量,让程序的功能健全,
在程序中设定变量,不要写入注册表,这样很容易破解
 
顶部