国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

如何在程序中完成電子注冊技巧

如何在程序中完成電子注冊技巧

更新時間:2020-01-14 文章作者:未知 信息來源:網絡 閱讀次數:

目前,國內軟件銷售過程中采用了一種新的方式:開發者根據計算機中不同的硬件配置標志直接在應用程序中設置密鑰,限制程序的使用次數或者限制某些先進功能的使用,然后將受限制的應用程序無償提供給用戶。用戶在試用一段時間之后如果覺得很滿意,就可以將安裝程序提取的硬件配置解密密鑰或已經采集機器配置情況的應用程序提供給開發者,并花少量費用購買自己機器中的電子注冊密鑰,從而能夠充分利用應用程序的所有功能。

  在應用程序中利用電子注冊來限制應用程序的部分功能,這樣既可以讓用戶先試用然后再決定是否購買應用程序,又保護了開發者的合法勞動成果,減少了用戶與開發者之間的不必要的中間環節。開發者直接得到用戶購買軟件的費用,真正地體現了開發者所創造的價值;用戶在試用軟件之后再決定是否購買,從而使得用戶能夠得到稱心如意、物有所值的軟件。因此,不通過中間環節這種銷售方式降低了軟件的成本,使開發者和用戶雙方都受益。同時,這種方式還可以使得開發者能夠直接獲得用戶的反饋信息,促使開發者開發出功能更加完善的應用程序。

  然而,要想在應用程序中實現電子注冊功能決不是件容易的事情,尤其是在Windows 平臺推出以后,要想實現一個跨平臺的應用程序電子注冊功能,則要求開發者應具有豐富的編程技巧和實際開發經驗以及廣闊的開發視野。筆者通過實踐探索,終于成功地實現了跨越DOS、Windows 3.X和Windows 95平臺的應用程序電子注冊功能。下面將闡述其實現原理及技巧。

  一、注冊密鑰點的選擇與生成

  實現應用程序的電子注冊功能,最關鍵的問題是采集硬件配置中的密鑰點。在DOS 系統下,可以通過硬盤端口1F6H和1F7H直接讀取硬盤的序列號等作為密鑰算法的數據,因為每塊硬盤的型號、版本號和序列號均不同,只要用戶提供上述內容,利用這種方法生成的注冊密鑰在每臺計算機中均不同,從而實現電子注冊的功能。著名的字表處理軟件CCED 5.18中采用的就是類似的方法。雖然這種方法在絕大數場合下很有效,甚至可以在Windows 3.X系統和Windows 95系統的兼容模式下通過,但在最高性能配置的Windows 95保護模式下卻行不通,原因是Windows 95保護模式下不允許通過端口方式讀取硬盤類型參數,所以利用這種方法無法實現跨平臺的通用電子注冊功能。

  本人仔細分析計算機中ROM區的F000H-FFFFH內容后 ,發現該區域中記錄著很多與硬件配置有關的信息(如CMOS配置信息、主板名稱、型號和序列號、主機標志字節和生產日期等)。可以采集其中一處或幾處作為注冊密鑰算法的原始數據(如機器ROM區中的F000H:FFF5H-F000H:FFFFH中依次存放主機出廠日期和主機標志字節的內容),這些硬件特有的信息對于不同型號的計算機來說是不可能相同的。因此,完全可以將其作為注冊密鑰算法的原始數據,而且這些內容在DOS、Windows 3.X和Windows 95下均相同。需要注意的是,如果在實際應用中真的將該采集點作為算法的原始數據,則不應該包括F000:FFF0H開始的前五個字節的內容,原因是該地址已被用作機器熱啟動時的入口地址,在DOS、Windows 3.X和Windows 95系統中對熱啟動復合鍵Ctrl+Alt+Del的處理程序均不同,因此該處的內容在三者之中也都不相同,讀者應記住這一點。

  利用上述方法取得注冊密鑰算法的原始數據后,開發者就可以確定自己的加密算法,這可以通過編程語言中豐富的位操作功能來實現。然后將注冊加密算法增加到應用程序中需要限制的部分,并可根據應用程序的實際需要和限制的功能任意設置多處,使盜版者很難解密,從而有效地保護開發者的成果。利用這一方法,即使機器中有多個應用程序使用相同的硬件配置信息采集點,也不可能發生任意加密沖突問題;即便是使用了相同的算法原始數據,由于算法不同,注冊密鑰也不會完全相同;即使解密者知道加密算法的原始數據,由于無法知道加密算法,再加上加密算法貫穿于整個應用程序,所以很難解密。因此,上述方法可以有效地實現跨越DOS、Windows 3.X和Windows 95平臺的電子注冊功能。此外,由于ROM 區關鍵點的內容不可能發生變化,所以即使將來推出新型的操作系統平臺,這種方法仍然會很有效。

  二、利用解密密鑰建立聯系

  應用程序的加密部分完成之后,就需要建立相應的解密密鑰。所謂解密密鑰,就是將加密算法的原始數據經過加密之后,直接顯示給用戶并寫入應用程序的相應位置。這樣,用戶既可以通過電話或計算機網絡給開發者提供注冊功能的算法原始數據,也可以將安裝后的應用程序寄給開發者。加密密鑰既可以是ROM 區域內的原始數據(最好不要原樣提供),也可以是由原始數據經過一定換算后形成的新的數據。因此,開發者提供的應用程序中的加密算法部分應包括兩部分:將機器ROM 區域內的數據經過解密密鑰算法后形成解密密鑰,再將解密密鑰數據經注冊算法后形成注冊密鑰。

  應用程序中注冊密鑰的算法、注冊密鑰的長度、顯示或提供給開發者的方式可自己確定,但解密密鑰的長度和算法應與注冊密鑰完全相同。解密密鑰也沒有必要做得那么復雜,只需進行簡單處理后就可以實現,例如本文程序中實現的方法是將ROM中采集的數據簡單地減去0x2020。

  三、電子注冊密鑰生成程序

  開發者得到用戶提供的解密密鑰原始數據后,需要利用專用的密鑰生成程序將其轉換成注冊密鑰,并將注冊密鑰交給用戶。注冊密鑰的算法與應用程序中判斷注冊密鑰的加密算法程序應該完全相同。該程序一般應具有以下三種取得注冊密鑰算法原始數據的方式,以方便進行密鑰的處理。該程序的名稱為READKEY.EXE,其功能如下:

  (1)當READKEY不帶參數時,則直接從當前機器中取得注冊密鑰;

  (2)當READKEY帶參數時,則從鍵盤輸入解密密鑰來獲取注冊密鑰;

  (3)當READKEY帶EXE文件名參數時,則從相應應用程序的特定位置取得解密密鑰,并生成注冊密鑰。

  用戶得到注冊密鑰后,重新安裝一次應用程序或在需要輸入注冊密鑰處直接輸入密鑰,則應用程序會自動將這個注冊密鑰存放到文件的特定位置處,當應用程序被他人拷貝到其它機器中之后,由于注冊密鑰隨機器的不同而不同,所以應用程序的功能或使用次數仍然受限,要想在其它機器中使用該應用程序,則必須重新注冊。

  應用程序中解密密鑰和注冊密鑰的位置,可先用特殊字符來標識,然后用DEBUG 等程序直接查找其位置,再修改其它程序中讀取或寫入數據的地址值。至于解密密鑰顯示和注冊密鑰的輸入方式,可由開發者確定是用安裝程序的方法還是在應用程序中直接處理的方法。

  /*電子注冊功能密鑰讀取程序清單READKEY.C*/

  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include

  void readser(void);
  void readser1(void);
  unsigned char Buff[18];
  unsigned int keyrom[9];
  unsigned int sum,sumi,sumj;
  unsigned int far *pt= (unsigned int far *)0xf000fff6L;
  unsigned int i=0,j=0,m;
  unsigned char p;
  unsigned int nn,nn1,nn2;
  unsigned char rbuff[100],cc,cc1,cc2;
  int fp;
   void main(int argc,char *argv[])
  { if((argc>3)|| ((argc==2) && (argv[1][1]!=':'))){

   printf("USAGE:READKEY 程序路徑及名稱.\n");
   scanf("%s",rbuff); //手工輸入加密密鑰
   printf("sss:%s,%u\n",rbuff,strlen(rbuff));
   j=strlen(rbuff);
   if(j!=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[1]);

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

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

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

   printf("File %s open error!",argv[1]);
   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++){ //形成16位密鑰

   for(sumi=0;sumi<5;sumi++)

   sum-=(*(pt+3+sumi)-0x2020);//形成解密密鑰

   sum^=0x0404<wsprintf((LPSTR)sImeG.ImeBuff+4*sumj,(LPSTR)"%04x",sum);

   }

   if(flag==TRUE) FreeSelector(Sel2);

   sImeG.ImeBuff[16]==0;

   for(sumi=0;sumi<16;sumi++)

   sImeG.ImeBuff[sumi]+=(unsigned char)sumi;

   if(lstrcmpi(sImeG.ImeBuff,sImeG.ImeKey)==0)

   sImeG.UseFlag=FALSE;//已經注冊

   else sImeG.UseFlag=TRUE;

  }

  利用注冊密鑰讀取函數,就可在應用程序的多處關鍵代碼部分增加程序功能的限制。例如,本人使用的限制代碼部分如下:

  ImeCmpKey1();

  if(lstrcmpi(sImeG.ImeBuff,sImeG.ImeKey)==0){

  for(i=0;i<18;i++) sImeG.ImeBuff[i]="0;"

   sImeG.UseFlag=FALSE;//已經注冊

   sImeG.UseNum=0;

  } else{

   sImeG.UseFlag=TRUE;//未注冊

  }

  由于直接讀取內存單元中的數據來生成注冊密鑰和注冊限制功能的代碼部分,其執行速度特別快,對應用程序幾乎沒有任何影響。因此,可以在應用程序中增加若干個注冊密鑰生成函數和限制功能代碼,使解密者知難而退,從而達到保護開發者的勞動成果的目的。這種增加注冊密鑰生成及判斷限制功能的方法,其缺點是使應用程序的長度增加了,但這對于目前高檔計算機的大容量硬盤來說只不過是九牛一毛而已,所以該方法非常可行。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        综合久久给合久久狠狠狠97色| 欧美成人免费网站| 在线视频一区二区三| 国产精品伦一区| 成人禁用看黄a在线| 国产精品动漫网站| 欧洲生活片亚洲生活在线观看| 亚洲精品国产无套在线观| 欧美日韩一区二区三区在线| 日韩高清电影一区| 久久精品夜夜夜夜久久| 成人免费毛片高清视频| 亚洲裸体在线观看| 日韩一区二区三区四区五区六区| 久久疯狂做爰流白浆xx| 亚洲欧美中日韩| 欧美精品色一区二区三区| 国产激情视频一区二区在线观看 | 婷婷久久综合九色国产成人| 欧美久久一区二区| 韩国成人精品a∨在线观看| 国产精品毛片久久久久久久| 欧美色视频一区| 国内成人免费视频| 亚洲精品国产第一综合99久久 | 国产欧美一区二区精品婷婷| 日本丶国产丶欧美色综合| 男女性色大片免费观看一区二区| 国产日韩成人精品| 538在线一区二区精品国产| 国产成人在线视频网站| 午夜影视日本亚洲欧洲精品| 精品盗摄一区二区三区| 欧美在线一二三| 国产亚洲综合av| 欧美性大战久久久| 国产激情视频一区二区在线观看| 亚洲激情第一区| 国产目拍亚洲精品99久久精品 | 国产成人自拍网| 五月开心婷婷久久| 亚洲日本在线看| 久久色在线观看| 欧美午夜一区二区| va亚洲va日韩不卡在线观看| 加勒比av一区二区| 天天综合色天天| 一区二区三区视频在线看| 欧美激情一区在线| 欧美成va人片在线观看| 欧美妇女性影城| 欧美日韩在线不卡| 在线观看视频一区| 色婷婷综合久久久久中文一区二区| 国产精品一二三四五| 精品一区二区三区影院在线午夜| 亚洲午夜av在线| 一区二区三区 在线观看视频| 国产日韩欧美精品在线| 久久亚洲综合色一区二区三区| 欧美三级三级三级爽爽爽| 色又黄又爽网站www久久| av电影一区二区| 99久久er热在这里只有精品15| 国产成人午夜99999| 国产白丝精品91爽爽久久| 久久97超碰国产精品超碰| 麻豆精品久久精品色综合| 麻豆精品视频在线观看视频| 欧美a级一区二区| 精品一区二区免费在线观看| 理论电影国产精品| 久久精品国产第一区二区三区| 日本sm残虐另类| 久久超碰97中文字幕| 国产一区二区三区高清播放| 国产精品一线二线三线精华| 国产成人在线网站| av日韩在线网站| 在线观看欧美日本| 欧美丰满一区二区免费视频| 日韩免费观看2025年上映的电影 | 亚洲一区二区四区蜜桃| 亚洲国产综合色| 青青草国产成人av片免费| 激情av综合网| 91尤物视频在线观看| 欧美日本不卡视频| 亚洲精品在线观| 亚洲美女视频在线观看| 美女尤物国产一区| 99在线精品观看| 日韩一级视频免费观看在线| 欧美在线观看一区二区| 精品区一区二区| 亚洲欧美日韩中文字幕一区二区三区| 亚洲观看高清完整版在线观看| 久久精品国产亚洲aⅴ| av在线不卡免费看| 国产美女一区二区| 在线观看国产精品网站| 亚洲精品一区二区三区精华液| 成人免费一区二区三区在线观看| 日韩电影一区二区三区四区| 成人综合在线观看| 欧美一级二级三级乱码| 亚洲同性gay激情无套| 九色porny丨国产精品| 色婷婷综合在线| 91精品在线免费| 亚洲男人的天堂在线观看| 日日夜夜一区二区| eeuss影院一区二区三区| 欧美精品粉嫩高潮一区二区| 一区视频在线播放| 国产在线一区观看| 色婷婷精品大视频在线蜜桃视频| 欧美www视频| 亚洲777理论| 色94色欧美sute亚洲13| 欧美精品一区二区不卡| 午夜婷婷国产麻豆精品| 粉嫩绯色av一区二区在线观看| 欧美浪妇xxxx高跟鞋交| 亚洲精品视频在线看| 成人动漫一区二区三区| 久久亚洲捆绑美女| 麻豆精品一区二区综合av| 色婷婷狠狠综合| 综合激情成人伊人| 粉嫩13p一区二区三区| 日韩免费一区二区| 日本女优在线视频一区二区 | 成人av免费在线播放| 日韩亚洲欧美高清| 五月婷婷综合激情| 欧美精品久久99| 日韩和欧美一区二区三区| 欧美日韩一区在线观看| 日韩三级伦理片妻子的秘密按摩| 午夜精品免费在线| 欧美亚洲丝袜传媒另类| 亚洲免费视频成人| 日本大香伊一区二区三区| 亚洲激情自拍偷拍| 在线亚洲精品福利网址导航| 亚洲美女视频一区| 99久久精品国产一区二区三区| 国产精品久久久久毛片软件| 成人av资源下载| 一级特黄大欧美久久久| 91蝌蚪porny九色| 亚洲激情六月丁香| 欧美一级视频精品观看| 国产美女av一区二区三区| 国产精品天美传媒沈樵| 欧美在线观看18| 日韩高清不卡一区二区三区| 久久―日本道色综合久久| 夫妻av一区二区| 亚洲黄色性网站| 欧美三级资源在线| 免费的国产精品| 国产亚洲成av人在线观看导航| 国产激情偷乱视频一区二区三区 | 欧美a一区二区| 在线观看免费成人| 午夜婷婷国产麻豆精品| 欧美一区国产二区| 国产伦精品一区二区三区视频青涩| 国产日本亚洲高清| 欧美午夜理伦三级在线观看| 亚洲一区二区四区蜜桃| 精品少妇一区二区三区在线视频| 成人性色生活片| 中文字幕精品一区| 欧美日韩免费观看一区二区三区| 久久精品视频网| 91免费小视频| 石原莉奈一区二区三区在线观看 | 91精品国产综合久久久久久漫画| 久久精品国内一区二区三区| 国产人久久人人人人爽| 欧美亚洲动漫精品| 韩国v欧美v亚洲v日本v| 亚洲女人****多毛耸耸8| 欧美r级在线观看| 91亚洲资源网| 美女看a上一区| 亚洲蜜臀av乱码久久精品| 精品久久久久一区二区国产| 色妞www精品视频| 国产精品影视网| 免费观看在线综合色| 亚洲天堂免费在线观看视频| 久久久精品蜜桃| 欧美一区二区高清| 婷婷成人综合网| 亚洲一区二区三区四区不卡| 成人欧美一区二区三区|