怎樣用VC限制軟體的試用次數 (轉)

worldblog發表於2007-12-10
怎樣用VC限制軟體的試用次數 (轉)[@more@]試用次數的限制有很多種方法,其關鍵是把次數這個值在哪 裡。這裡介紹一種方法,透過改變 的時間來儲存試用次數,從而限制軟 件的試用。 一、透過改變檔案時間來限制軟體的試用次數 在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("此軟體為試用版,您的試用次數已滿!n"); if(flag==2) printf("此軟體為試用版,歡迎試用!n");

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990720/,如需轉載,請註明出處,否則將追究法律責任。

相關文章