网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
如何在程序中实现电子注册功能
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
20) exit(1);
   for(i=0;i<20;i++){
   if((rbuff[i]>=''a'') && (rbuff[i]<=''f'')) rbuff[i]&="0xdf;"
   if((rbuff[i]>=''A'') && (rbuff[i]<=''F'')) rbuff[i]-="0x37;"
   else if((rbuff[i]>=''0'') && (rbuff[i]<=''9'')) rbuff[i]-="0x30;"
   else exit(1);
   }
   printf("num:");
   for(i=0;i<5;i++){
   cc1=rbuff[i*4]&0xf;
   cc2=rbuff[i*4+1]&0xf;
   cc=(cc1<<4)|cc2;
   nn1=(unsigned int)cc;
   cc1=rbuff[i*4+2]&0xf;
   cc2=rbuff[i*4+3]&0xf;
   cc=(cc1<<4) | cc2;
   nn2=(unsigned int)cc;
   nn=(nn1<<8) | nn2;
   keyrom[i]=nn;
   printf("%04x",keyrom[i]);
   }
   printf("\n");
   sum=0x2020;
   for(sumj=0;sumj<4;sumj++){ //形成16位密钥
   for(sumi=0;sumi<5;sumi++)
   sum-=keyrom[sumi]; //形成解密密钥

   sum^=0x0404<sprintf(Buff+4*sumj,"%04x",sum);
   }
   printf(Buff);

   exit(1);

   }

   if(argc>1){

   strlwr(argv);

   if(strstr(argv,".EXE")==NULL){

   printf("USAGE:READKEY 路径及文件名.\n");

   exit(1);
   }
   if((fp=open(argv,O_RDWR | O_BINARY))==-1){

   printf("File %s open error!",argv);
   exit(1);
   }
   lseek(fp,0xf040L,SEEK_SET);//ROM 10个数据地址+200H

   read(fp,keyrom,0xaL); //读取数据

   readser1(); //读文件中的注册密钥

   } else readser(); //读机器中的注册密钥

  }

  void readser(void)

  {
   sum=0x2020;
   for(sumj=0;sumj<4;sumj++){//形成16位密钥
   for(sumi=0;sumi<5;sumi++)
   sum-=(*(pt+sumi)-0x2020);//形成解密密钥

   sum^=0x0404<sprintf(Buff+4*sumj,"%04x",sum);
   }
   printf(Buff);
  }
  void readser1(void)

  {
   sum=0x2020;
   for(sumj=0;sumj<4;sumj++){//形成16位密钥
   for(sumi=0;sumi<5;sumi++)

   sum-=keyrom[sumi]; //形成解密密钥

   sum^=0x0404<sprintf(Buff+4*sumj,"%04x",sum);
   }
   printf(Buff);
  }

  四、应用程序中密钥的读取及限制

  当应用程序进行电子注册之后,安装程序会将注册密钥写入到应用程序中。在应用程序中,判断是否进行注册的方法就是重新生成注册密钥并进行判断处理。注册密钥的读取函数如下:

  void ImeCmpkey(void)

  {//Windows下注册密钥的读取函数

   static unsigned int sum,sumi,sumj;

   static BOOL flag;

   static unsigned int far *pt;

   static UINT Sel1,Sel2;

   static WORD Seg,Off,Start;

   static DWORD Bas,Lim;

   flag=TRUE;

   sum=0x2020;

   __asm mov Sel1,ds; //将DS作为模板

   Sel2=AllocSelector(Sel1); //分配一个新选择符

   if(Sel2==NULL){

   flag=FALSE;

   pt=(unsigned int far*)0xf000fff0L;

   } else {

   Seg=0xffff; //绝对地址段址

   Off=0x10; //绝对地址偏移

   Start=0x0;

   Bas=((unsigned long)Seg)<<4 | Start;

   Lim=(unsigned long)Off-1;

   SetSelectorBase(Sel2,Bas);

   SetSelectorLimit(Sel2,Lim);

   pt=(unsigned int far*)((((unsigned long)Sel2)<<16) | Start);

   }
   for(sumj=0;sumj<4;sumj+
  • 下一篇资讯: VC5打印字体的控制
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号