一種防止篡改系統時間的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及計算機技術領域,特別涉及一種防止篡改系統時間的方法及裝置。
【背景技術】
[0002]系統時間是操作系統的重要組成部分,是用戶獲取準確時間的一個便利入口。
[0003]目前很多應用軟件依賴于系統時間來保證其正常的運行。如果系統時間被惡意軟件或病毒篡改,則可能導致某些安全軟件失效,不能對系統進行保護;或者導致某些軟件(例如財務軟件)的數據出錯等問題。
【發明內容】
[0004]本發明實施例的目的在于提供一種防止篡改系統時間的方法及裝置,以防止系統時間被篡改。
[0005]為達到上述目的,本發明實施例公開了一種防止篡改系統時間的方法,預先創建跟隨系統一起啟動的、用于檢測系統的設置本地時間函數被調用的服務程序;所述方法包括:
[0006]獲得所述設置本地時間函數的入口函數地址;
[0007]通過所述服務程序,檢測所述設置本地時間函數是否被調用,如果所述設置本地時間函數被調用,表示欲對系統時間進行篡改;
[0008]如果是,則將所獲得的所述入口函數地址修改為預設的空函數的地址。
[0009]可選的,所述創建跟隨系統一起啟動的、用于檢測系統的設置本地時間函數被調用的服務程序,包括:
[0010]通過調用系統打開服務控制管理器函數,鏈接到服務控制管理器;
[0011]通過調用創建服務函數,創建用于檢測系統的設置本地時間函數被調用的服務程序;
[0012]通過調用注冊服務控制句柄函數,注冊該服務程序的控制函數;
[0013]通過調用所述控制函數,將該服務程序的狀態設置為啟動狀態。
[0014]可選的,所述獲得所述設置本地時間函數的入口函數地址,包括:
[0015]將包含所述設置本地時間函數的庫函數加載到所述服務程序的進程空間中;
[0016]通過調用獲得程序地址函數,從所述庫函數的導入地址表中獲得所述設置本地時間函數的入口函數地址。
[0017]可選的,所述服務程序中包含用于捕獲所述設置本地時間函數被調用的信息的Hook函數;
[0018]所述通過所述服務程序,檢測所述設置本地時間函數是否被調用,包括:
[0019]通過所述服務程序中的所述Hook函數對所述信息進行捕獲,如果捕獲到所述信息,表示所述設置本地時間函數被調用。
[0020]可選的,還包括:
[0021]在接收到用戶針對所述Hook函數的刪除指令后,刪除所述Hook函數。
[0022]可選的,還包括:
[0023]在接收到用戶針對所述服務程序的停止指令后,通過調用所述控制函數,將所述服務程序的狀態設置為停止狀態。
[0024]為達到上述目的,本發明實施例公開了一種防止篡改系統時間的裝置,包括:創建模塊、獲得模塊、檢測模塊和修改模塊,其中,
[0025]所述創建模塊,用于預先創建跟隨系統一起啟動的、用于檢測系統的設置本地時間函數被調用的服務程序;
[0026]所述獲得模塊,用于獲得所述設置本地時間函數的入口函數地址;
[0027]所述檢測模塊,用于通過所述創建模塊創建的服務程序,檢測所述設置本地時間函數是否被調用,如果所述設置本地時間函數被調用,表示欲對系統時間進行篡改;
[0028]所述修改模塊,用于在所述檢測模塊檢測到所述設置本地時間函數被調用的情況下,將所獲得的所述入口函數地址修改為預設的空函數的地址。
[0029]可選的,所述創建模塊,具體用于:
[0030]通過調用系統打開服務控制管理器函數,鏈接到服務控制管理器;
[0031]通過調用創建服務函數,創建用于檢測系統的設置本地時間函數被調用的服務程序;
[0032]通過調用注冊服務控制句柄函數,注冊該服務程序的控制函數;
[0033]通過調用所述控制函數,將該服務程序的狀態設置為啟動狀態。
[0034]可選的,所述獲得模塊,具體用于:
[0035]將包含所述設置本地時間函數的庫函數加載到所述服務程序的進程空間中;
[0036]通過調用獲得程序地址函數,從所述庫函數的導入地址表中獲得所述設置本地時間函數的入口函數地址。
[0037]可選的,所述服務程序中包含用于捕獲所述設置本地時間函數被調用的信息的Hook函數;
[0038]所述檢測模塊,具體用于:
[0039]通過所述創建模塊創建的服務程序中的所述Hook函數對所述信息進行捕獲,如果捕獲到所述信息,表示所述設置本地時間函數被調用。
[0040]可選的,還包括:刪除模塊,
[0041]所述刪除模塊,用于在接收到用戶針對所述Hook函數的刪除指令后,刪除所述Hook函數。
[0042]可選的,所述創建模塊,還用于:
[0043]在接收到用戶針對所述服務程序的停止指令后,通過調用所述控制函數,將所述服務程序的狀態設置為停止狀態。
[0044]由上述的技術方案可見,本發明實施例提供了一種防止篡改系統時間的方法及裝置,預先創建跟隨系統一起啟動的、用于檢測系統的設置本地時間函數被調用的服務程序;方法包括:獲得所述設置本地時間函數的入口函數地址;通過所述服務程序,檢測所述設置本地時間函數是否被調用,如果所述設置本地時間函數被調用,表示欲對系統時間進行篡改;如果是,則將所獲得的所述入口函數地址修改為預設的空函數的地址。
[0045]應用本發明實施例所提供的技術方案,在設置本地時間函數被調用的情況下,將設置本地時間函數的入口函數地址修改為空函數的地址,進而調用空函數,不對系統時間做任何修改,防止了系統時間被篡改。
【附圖說明】
[0046]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0047]圖1為本發明實施例提供的一種防止篡改系統時間的方法的流程示意圖;
[0048]圖2為本發明實施例提供的一種防止篡改系統時間的裝置的結構示意圖。
【具體實施方式】
[0049]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0050]為了解決現有技術問題,本發明實施例提供了一種防止篡改系統時間的方法及裝置。下面首先對本發明實施例所提供的一種防止篡改系統時間的方法進行介紹。
[0051]圖1為本發明實施例提供的一種防止篡改系統時間的方法的流程示意圖,可以包括:
[0052]S101:獲得設置本地時間函數的入口函數地址;
[0053]S102:通過服務程序,檢測所述設置本地時間函數是否被調用,如果是,執行S103 ;
[0054]如果所述設置本地時間函數被調用,表示欲對系統時間進行篡改,
[0055]S103:將所獲得的所述入口函數地址修改為預設的空函數的地址。
[0056]具體的,上述服務程序為預先創建的跟隨系統一起啟動的、用于檢測系統的設置本地時間函數被調用的服務程序。
[0057]具體的,在實際應用中,設置本地時間函數可以為SetLocalTime函數。
[0058]具體的,創建跟隨系統一起啟動的、用于檢測系統的設置本地時間函數被調用的服務程序,可以通過調用系統打開服務控制管理器函數,鏈接到服務控制管理器;通過調用創建服務函數,創建用于檢測系統的設置本地時間函數被調用的服務程序;通過調用注冊服務控制句柄函數,注冊該服務程序的控制函數;通過調用所述控制函數,將該服務程序的狀態設置為啟動狀態。
[0059]示例性的,通過調用系統API (Applicat1n Programming Interface,應用程序編程接口)函數中的OpenSCManager函數鏈接到服務控制管理器;通過調用CreateService函數創建用于監測SetLocalTime函數被調用的服務程序MyService.exe,通過調用RegisterServiceCtrlHandler函數注冊服務程序MyService.exe的控制函數,通過調用該控制函數將服務程序MyService.exe的狀態設置為啟動狀態。
[0060]具體的,在實際應用中,還可以通過調用操作系統提供的ChangeServiceStatus函數,將服務程序MyService.exe的狀態值設置為4,服務的狀態值為4表示服務處于運行狀態(即啟動狀態)。
[0061]具體的,獲得設置本地時間函數的入口函數地址,可以將包含所述設置本地時間函數的庫函數加載到所述服務程序的進程空間中;通過調用獲得程序地址函數,從所述庫函數的導入地址表中獲得所述設置本地時間函數的入口函數地址。
[0062]在實際應用中,SetLocalTime函數為系統API函數中的一個函數,系統API函數都是以DLL (庫函數)封裝起來,因此,需要將包含SetLocalTime函數的庫函數加載到上述創建的服務程序MyService.exe的進程空間中,通過調用GetProcAddress函數,從庫函數的導入地址表中獲得SetLocalTime函數的入口函數地址,其中,導入地址表中存儲有函數預先指定的加載地址(函數真實地址)。假設獲得的SetLocalTime函數的入口函數地址為00030100H。
[0063]具體的,上述服務程序中包含用于捕獲所述設置本地時間函數被調用的信息的Hook函數;通過所述服務程序,檢測所述設置本地時間函數是否被調用,可以通過所述服務程序中的所述Hook函數對所述信息進行捕獲,如果捕獲到所述信息,表示所述設置本地時間函數被調用。
[0064]在實際應用中,Hook (鉤子)為Windows消息處理機制的一個平臺,應用程序可以在上面監控指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達后,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理Windows消息或特定事件。鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控