一本到国产在线精品国内,国产大屁股视频免费区无卡,精品国产日韩aV在线免费观看,国产欧美日韩综合精品一区二区

建立先進理念和體系,創(chuàng)造更好技術和工藝,開創(chuàng)不凡業(yè)績和局面

當前位置:首頁>技術中心>關于知識產權> 瀏覽正文

軟件保護技術--時間限制

來源:龍人計算機研究所 作者:站長 時間:2006-11-04 17:43:12


(1) 定時器   有些程序的試用版每次運行都有時間限制,例如運行10分鐘或20分鐘就停止工作,必須重新運行該程序才能正常工作。這些程序里面自然有個定時器來統(tǒng)計程序運行的時間。

1)使用Settimer()

  常用的計數(shù)器是函數(shù)Settimer(),調用這個函數(shù)創(chuàng)建的定時器可以發(fā)出消息VM_TIMER,或者在定時期滿時調用一個回調函數(shù)。 使用這個函數(shù)會使時間延時,精度不高。

2)使用timeSetEvent()

  給Windows驅動程序最精確的周期性通知是由Windows的多媒體服務timeSetEvent()提供的。它的時間可以精確到1毫秒。

3)使用VXD

  可以使用VMM的Set_Global_time_Out()服務來迫使回調函數(shù)的幾個毫秒再執(zhí)行,這就創(chuàng)造了一個“只有一次”的定時器。VXD可以在回調中再次調用Set_Global_time_Out()來開始下一個定時器,這樣提供了一個連續(xù)運行的定時器了。

4)其它

  GetTickCount():精度不高;
  timeGetTime(): 可以以毫秒級返回windows開始后的時間。

(2)時間限制

  一般這類保護的軟件都有時間上的限制,如試用30天等,當過了共享軟件的試用期后,就不予運行,只有向軟件作者付費注冊之后才能得到一個無時間限制的注冊版本。

  這種類型程序很多,讓你有10天、20天、30天等,它們在安裝時,在你的系統(tǒng)某處做上時間標記,每次運行時用當前系統(tǒng)時間和安裝時的時間比較,判斷你還否能使用。
  如最典型的30天限制的一種情況:
  mov ecx,1E ; 把1E (30天 十進制) 放入 ecx
  mov eax,[esp+10] ; 把用過天數(shù)放到eax
  cmp eax,ecx ; 在此比較
  jl ...
  如碰到這種情況,只需把"mov eax,[esp+10]"改成"mov eax,1" 。

  要記住當前年份、月份的十六進制的一些表示方法,如:2000年的十六進制是07D0,然后用W32DASM反匯編你的程序,用查找字符串的方法找D007(在機器碼中位置顛倒了一下)或其它類似時間的數(shù)字,有可能會找到有價值的線索。你別小看這種方法,對那些沒怎么防范的程序,此招很有效。
  如:一程序限定在2000年使用,可能有如下一代碼:
  :00037805 817C2404D0070000 cmp dword ptr [esp+04], 000007D0 比較是否在2000年。

(3)與時間相關函數(shù)

1、GetSystemTime 得當前系統(tǒng)時間

說明:
在一個SYSTEMTIME中載入當前系統(tǒng)時間,這個時間采用的是“協(xié)同世界時間”(即UTC,也叫做GMT)格式。
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // SYSTEMTIME,隨同當前時間載入的結構
);


2、GetLocalTime 得當前本地時間

VOID GetLocalTime(

LPSYSTEMTIME lpSystemTime // SYSTEMTIME,用于裝載本地時間的結構
);


3、SystemTimeToFileTime 根據(jù)一個FILETIME結構的內容,載入一個SYSTEMTIME結構

 

BOOL SystemTimeToFileTime(

CONST SYSTEMTIME * lpst, // SYSTEMTIME,包含了系統(tǒng)時間信息的一個結構
LPFILETIME lpft // FILETIME,用于裝載文件時間的一個結構
);
返回值 :非零表示成功,零表示失敗。


4、SetTimer 創(chuàng)建一定時器,在指定時間內暫停

 

UINT SetTimer(
HWND hwnd, // 時間信息句柄
UINT idtimer, // 定時器ID 標識符
UINT uTimeout, // 暫停時間
TIMERPROC tmprc // 處理定時過程的程序入口地址
);