程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 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 <sidio.h>
#include <dos.h>
#include <conio.h>
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("此軟件為試用版,您的試用次數已滿!\n");
  if(flag==2) printf("此軟件為試用版,歡迎試用!\n");
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved