论坛风格切换切换到宽版
  • 40619阅读
  • 65回复

用 Inno 制作需要输入注册码(与机器码相关)的安装 [复制链接]

上一主题 下一主题
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 30 发表于: 2010-11-28
哎,找了个计算机专业的同事,可以看懂代码,但是他说要一个平台才能运算出注册码,虎兄给出的代码他说运算出错,好郁闷

虎兄能好人做到底给出个计算方法真是感激不尽了!
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 31 发表于: 2010-11-28
哎,找了个计算机专业的同事,可以看懂代码,但是他说要一个平台才能运算出注册码,虎兄给出的代码他说运算出错,好郁闷

虎兄能好人做到底给出个计算方法真是感激不尽了!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 32 发表于: 2010-11-28
那个代码就是一个算法。你说的运算出错,不知道具体指什么。示例安装程序见下面。
如果你的机器码是 6J7-D13-8D1-24F-220-A4
那么相应的注册码是 3P6-D15-1S7-02G-245-A1
[ 此帖被gnatix在2010-11-28 17:11重新编辑 ]
附件: gnatixDemo.zip (270 K) 下载次数:23
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 33 发表于: 2010-11-29
太感谢虎兄了

请问虎兄能不能给解释一下那段代码啊,麻烦虎兄了,再次说声不好意思,麻烦麻烦,谢谢谢谢!

真的是急需,再次致谢!
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 34 发表于: 2010-11-29
// 生成注册码
  if SerialNum > 432109876 then
    SN:= SerialNum-432109876
  else
    SN:= 432109876-SerialNum;
  MID:='';
  tmp1:= IntToStr(SN);
  while length(tmp1)>3 do
    begin
    tmp2:= copy(tmp1,1,3);
    delete(tmp1,1,3);
    MID:= MID+Chr(65+StrToInt(tmp2)*26/999)+tmp2;
    end;
  MID:= MID+Chr(65+StrToInt(tmp1)*26/999)+tmp1;
  tmp1:= MID;
  MID:= '';
  while length(tmp1)>3 do
    begin
    tmp2:= copy(tmp1,1,3);
    delete(tmp1,1,3);
    MID:= MID+tmp2+'-';
    end;
  MID:= MID+tmp1;
  If SerialNum > 432109876 then
    MID:='3P6-'+MID
  else
    MID:='X5B-'+MID;
result:= MID;
end;


这段是生成注册码的代码吧,虎兄帮解释一下这几句能计算出注册码就可以了,不胜感激!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 35 发表于: 2010-12-01
那个代码只是把硬盘序列号胡乱作一番转换而已,没有什么很深的逻辑在里面的,我甚至自己现在都不知道为什么要这样转换了,只是当时一时的想法而已。没有必要要把它当作法宝来套用。既然你一定要坚持,下面我就把这些语句的意思解释一下,
// 生成注册码  if SerialNum > 432109876 then    SN:= SerialNum-432109876     //如果序列号大于 432109876 则取大于的部分为 SN  else    SN:= 432109876-SerialNum;    //如果序列号小于 432109876 则取小于的部分为 SN  MID:='';  tmp1:= IntToStr(SN);          //把 SN 转换为字串  while length(tmp1)>3 do    begin                       //如果字串长度大于 3    tmp2:= copy(tmp1,1,3);      //提取前面3个字符到 tmp2    delete(tmp1,1,3);           //删除前面3个字符    MID:= MID+Chr(65+StrToInt(tmp2)*26/999)+tmp2;  //插入一个字母,然后附加 tmp2 在后面    end;  MID:= MID+Chr(65+StrToInt(tmp1)*26/999)+tmp1;  //插入一个字母,然后附加 tmp1 在后面  tmp1:= MID;  MID:= '';  while length(tmp1)>3 do   //如果 tmp1 长度大于3    begin    tmp2:= copy(tmp1,1,3);  //提取前面3个字符到 tmp2    delete(tmp1,1,3);       //删除前面3个字符    MID:= MID+tmp2+'-';   //后面加上减号    end;  MID:= MID+tmp1;  If SerialNum > 432109876 then    MID:='3P6-'+MID     //如果序列号大于 432109876 则在前面加上 3P6-  else    MID:='X5B-'+MID;    //如果序列号小于 432109876 则在前面加上 X5B-result:= MID;


再次提醒:用 INNO 这样产生的注册码起不到真正保护软件的作用,很容易被读出来的。
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 36 发表于: 2010-12-01
真是太感激兄虎了!

如果你的机器码是 6J7-D13-8D1-24F-220-A4
那么相应的注册码是 3P6-D15-1S7-02G-245-A1

这个是怎么计算出的呢?能不能麻烦虎兄给出一个推断计算过程

在得知对方电脑机器码的后可以推断出他的注册码?我现在还搞不清楚这个推断过程

这个注册功能或许很弱,但对大部分电脑不懂的人来讲还是破解不了的,比如我,呵,非常感谢虎兄的提醒!
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 37 发表于: 2010-12-03
真是一个劲的汗……
找了四位单位中专门负责编程的同事帮忙,竟然没人能知道怎么计算出……
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 38 发表于: 2010-12-04
回 36楼(libaiping) 的帖子
注册码是这样算出来的:

你的机器码: 6J7-D13-8D1-24F-220-A4
前面的 6J7- 可以不管,它只是说明实际的硬盘序号大于 567890123
去掉那些插入的减号后: D138D124F220A4
再去掉那些插入的字母后: 1381242204
因为前面说过的 6J7-,所以实际的硬盘序号是: 1381242204 +  567890123 = 1949132327
根据该硬盘序号算出的注册码是: 3P6-D15-1S7-02G-245-A1 (具体看下面)

根据硬盘序号算注册码的代码前面已经解释了,具体到目前的情况就是:
硬盘序号: 1949132327, 它大于 432109876
转换一下:  1949132327 - 432109876 = 1517022451
每隔3个数字插入一个字母,结果是: D151S702G245A1
每隔3个字符插入减号,结果是: D15-1S7-02G-245-A1
因为硬盘序号大于 432109876,所以在前面加上 3P6-,结果是: 3P6-D15-1S7-02G-245-A1
所以你的注册码是: 3P6-D15-1S7-02G-245-A1

总之,无论是机器码还是注册码,只是把硬盘序号做了一些非常简单的伪装而已,并没有进行什么加密运算。
[ 此帖被gnatix在2010-12-04 14:23重新编辑 ]
离线libaiping

发帖
169
金钱
810
威望
81
只看该作者 39 发表于: 2010-12-04
Re:回 36楼(libaiping) 的帖子
引用第38楼gnatix于2010-12-04 06:49发表的 回 36楼(libaiping) 的帖子 :注册码是这样算出来的:你的机器码: 6J7-D13-8D1-24F-220-A4前面的 6J7- 可以不管,它只是说明实际的硬盘序号大于 567890123去掉那些插入的减号后: D138D124F220A4.......


不知道怎么感谢虎兄!帮我解决了多年来的难题

以上基本看懂,还有一个小问题,插入的字母是遵循什么规律的?还是随意插入字母的?

我另外一台电脑的机器码是V94-A-2-0Z9-74Q-615-A11,根据虎兄的讲解,我推断出我这台电脑的注册码为X5B-D22-3S3-24G-175-A8,但是下一步按钮依然是灰色的,出错,我估计应该是字母插入出问题了,还望虎兄给予帮助!