這類軟體一般都有時間段的限制,例如試用30天等。當過了共享軟體的試用期後,就不予執行。只有向軟體作者付費註冊之後才能得到乙個無時間限制的註冊版本。這種保護的實現方式大致如下。
首先在安裝軟體的時候由安裝程式取得當前系統日期,或者主程式在第一次執行的時候獲得系統日期,並且將其記錄在系統中的某個地方;可能記錄在登錄檔的某個不顯眼的位置,也可能記錄在某個檔案或扇區中。這個時間統稱為軟體的安裝日期。
程式在每次執行的時候都要取得當前系統日期,且將其與記錄下來的那個安裝日期進行比較,當其差值超過允許的天數(比如30天)時就停止執行。
可見,這種日期限制的機理很簡單。但是在實現的時候,如果對各種情況處理得不夠周全,就很容易被繞過,比如在過期之後簡單地把機器時間調回去,軟體又可以正常使用了。
如果考慮得比較周全,軟體最少要儲存兩個時間值,乙個就是上面所說的安裝時間,這個時間可由安裝程式在安裝軟體的時候記錄,也可以在軟體第一次執行的時候記錄(即軟體發現該值不存在時就將當前日期作為其值記錄下來)。為了增加解密難度,最好把這個時間在不同的地方多存放幾份,否則解密者可以通過regmon、filemon等監視工具輕易地找到存放該值的地方,然後刪除該鍵值,這樣又可以正常使用軟體了。
另外乙個時間值就是軟體最近一次執行的日期,這是防止使用者將機器日期改回去而設的。軟體每次退出的時候都要將該日期取出來與當前日期相比較,如果當前日期大於該日期,則用當前日期替換掉該值,否則保持該值不變。同時,軟體每次啟動的時候要把該值讀出來與當前日期進行比較,如果該值大於當前系統日期,則說明使用者把機器時間改回去了,可以拒絕執行。
取得時間的api函式一般有getsystemtime、getlocaltime和getfiletime。軟體作者可能不直接使用上面的函式來獲得系統時間,比如採用高階語言中封裝好的類來作業系統時間等。這些封裝好的類實際上也是呼叫上面的函式。解密者在採用動態跟蹤方法破解這種日期限制時,最常用的斷點也是這個。
還用一種比較方便地獲得當前系統日期的方法,就是讀取需要頻繁修改的系統檔案(比如windows登錄檔檔案user.dat、system.dat等)的最後修改日期,利用filetimetosystemtime()將其轉換為系統日期格式,從而得到當前系統日期。
需要指出的是,採用日期限制的軟體必須能防regmon、filemon之類的監視軟體,否則很容易被找到日期的存放位置。
限制軟體使用時間
對於軟體產品的試用版來說,限制軟體使用是必不可少的。本文介紹如果限制使用時間。假設軟體a可以免費使用3個月,那麼要確定的是開始使用時間,結束時間 1。確定開始使用時間。如下 include windows.h include stdio.h int main int argc,char argv 上...
多開限制的原理
1.建立新節法 為程式加入乙個全域性變數,讓這個全域性變數可以被程式的多個例項所共享,每當程式例項執行時就對該全域性變數進行修改。通過訪問該全域性變數,就可以知道有多少個例項在執行了。當然,為了系統的安全和穩定性,預設情況下是不允許這樣做得。為了阻止這種事情的發生,系統使用了copy on writ...
多開限制的原理
1.建立新節法 為程式加入乙個全域性變數,讓這個全域性變數可以被程式的多個例項所共享,每當程式例項執行時就對該全域性變數進行修改。通過訪問該全域性變數,就可以知道有多少個例項在執行了。當然,為了系統的安全和穩定性,預設情況下是不允許這樣做得。為了阻止這種事情的發生,系統使用了copy on writ...