程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 限次程序C語言源碼

限次程序C語言源碼

編輯:C語言基礎知識
軟件試用次數的限制有很多種方法,其要害是把次數這個值存儲在哪 裡。本文介紹一種方法,通過改變文件 的時間來存儲試用次數,從而限制軟 件的試用。稍微修改一下程序就可以使用了。
  
   一、通過改變文件時間來限制軟件的試用次數
   在MS-DOS中,文件的時間是 通過一個16位的值來保存的,位 15~11用來保存小時數,位10~5用 來保存分鐘數,位4~0用來保存秒鐘 數。這個16位的值正好可以被我們用來保存試用次數。例如,在下面的示例 程序中,筆者就使用了保存分鐘數的 位來保存
   試用次數。運行一下示例程 序,我們可以看到,只是文件時間的分 鐘數加了1,一般人很難察覺,這種方 法有比較好的隱蔽性。
  
   二、示例程序中所涉及的中斷
  
   1.中斷21H的功能3DH
   用途:打開文件用於讀。寫或補充。
   調用寄存器:AH=3DH,AL=00H,DS:DX=文件名;
   返回寄存器:CF 復位--成功,AX=文件把柄。
   CF 置位--出錯,AX=錯誤代碼。
  
   2.中斷21H的功能3EH
   用途:強迫清除所有緩沖區,更新目錄,使文件把 柄無效。
   調用寄存器:AH=3EH,BX=文件把柄;
   返回寄存器:CF 復位--成功,AX被破壞,
   CF 置位--出錯,AX=錯誤代碼。
  
   3.中斷21H的功能57H、子功能00H
   用途:讀出文件被最後修改的日期和時間。
   調用寄存器:AX=5700H,BX=文件把柄;
   返回寄存器:CF 復位--成功,CX=文件時間, DX=文件日期,CF 置位--出錯,AX=錯誤代碼。
  
   4。中斷21H的功能57H、子功能01H
   用途:將文件最後被修改過的日期和時間信息變 成指定值。
   調用寄存器:AX=5701H,BX=文件把柄,CX= 新時間,DX=新日期;
   返回寄存器:CF 復位--成功,CF 置位--出錯,AX=錯誤代碼。
  
   三、示例程序 #include
   #include
   #include
   int count( )
   {
   union REGS inregs,outregs;
   strut SREGS segs;
   unsigned handle;
   unsigned times;
   / * 打開文件 * /
   inregs.h.ah =0x3d;
   inregs.h.al =0;
   scgread(& segs);
   inregs.x.dx ="test.exe";
   intdosx(& inregs, & outregs, & segs);
   if(outregs.x.cflag) return(0);
   else
   {
   / * 讀取文件日期時間 * /
   handle = Outregs.x.ax;
   inregs.x.ax = 0x5700;
   inregs.x.bx = handle;
   intdosx(& inregs, & outregs, &segs);
   times = (outregs.x.cx &0x7e0)> > 5;
   if(times <40)/ * 試用次數可以通過改變此處的'40'來實現 * /
   {
   inregs.x.ax = 0x5701;
   inregs.x.bx = handle;
   inregs.x.cx = outregs.x.cx + 0x20; / * 試用次數計數 * /
   inregs.x.dx = outregs.x.dx;
   intdosx(& inregs, & outregs, & segs); / * 重置日期時間 * /
   return(2);
   }
   else return(1);
   / * 關閉文件 * /
   inregs.h.ah = 0x3e;
   inregs.x.bx = handle;
   intdosx(& inregs, & outregs, & segs);
   }
   }
   main()
   {
   int flag;
   flag = count();
   if(flag==0) printf("此軟件為試用版,請勿任意修改! n");
   if(flag==1) printf("此軟件為試用版,您的試用次數已滿! ");
   if(flag==2) printf("此軟件為試用版,歡迎試用! ");
   }
  
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved