第5章 演示版保護技術 時間限制

2022-03-09 02:52:24 字數 1408 閱讀 9480

settimer() 函式

向系統申請乙個計時器並指定計時器的時間間隔,同時獲得乙個處理器超時的**函式,超時時系統會向申請計時器的目標視窗傳送訊息 wm_timer 

timesetevent() 函式

多**計時器,精度可以達到 1ms 

gettickcount() 函式

返回從系統成功啟動以來所經歷的時間(ms),兩次返回值相減即得程式執行時長

timegettime() 函式

多**計時器函式,同上

常用的獲取時間的 api 函式有:getsystemtime() , getlocaltime() , getfiletime() 

軟體時間檢測:

①安裝軟體時記錄安裝日期(儲存在登錄檔、檔案、扇區中),將當前時間與安裝日期對比

②安裝軟體時記錄安裝日期,或第一次執行時記錄日期,並將時間儲存在多個地方;記錄程式最近一次執行時的日期,與當前時間進行對比,並更新

③讀取需要頻繁修改的系統檔案(比如,user.dat 、system.dat )的最後修改日期,利用 filetimetosystemtime() 函式將其轉換為系統日期格式

在程式中看一下:

可以發現這個程式只呼叫了 dialogboxparama() 這個乙個 api,重點關注第四個引數。和上個程式類似,直接轉到該**函式:

收到 wm_timer 訊息,將資料

可以看到,它需要先執行 settimer() 函式,然後繼續對時間進行檢測,根據傳入引數的值(eax),判斷要執行什麼操作:

因此,這個程式存在漏洞,即程式處於除錯狀態時,只要沒有處理到 wm_timer (0x 113)訊息,則程式不會計時。

因此可以在 c6 直接跳轉到 d6,跳過 settimer() ,如此不會收到 wm_timer 訊息:

或者在計數次數到達後不跳**

第5章 演示版保護技術 序列號保護方式

序列號保護機制 序列號 f 使用者名稱 將序列號與變換後的使用者名稱作對比。非常容易被攻破。f 1 序列號 使用者名稱 將序列號進行逆變換,然後與使用者名稱進行對比。窮舉法,求逆演算法,輸入序列號然後得到使用者名稱從而得到一對正確的輸入。對等函式檢查 f1 使用者名稱 f2 序列號 二元函式 f 使...

第五章 演示版保護技術 去除警告視窗例項

去除警告視窗意為將廣告彈窗去除,去除的思路歸根結底是 在不影響主程式的條件下,查詢到警告視窗建立的位置將其跳過或者nop掉,顯示視窗的函式主要有messagebox dialogboxpara showwindow createwindowex。還有一種去除的方式是通過訊息斷點的方式準根溯源到視窗建...

《Lua程式設計 第4版 》 第5章練習答案

monday sunday sunday 一樣,都指向該錶。a.a.a.a 3,執行的是該錶的索引 a 賦值為3,之後的a.a.a.a將會引發異常,因現a.a 3,而非表。在方括號裡寫索引值 tab for i,j in pairs tab do io.write i,j,n endfunction...