1.一種線程的保護方法,其特征在于,包括以下步驟:
監(jiān)控目標線程是否接收到暫停指令;
當確定所述目標線程接收到所述暫停指令時,利用鉤子函數(shù)掛鉤與所述目標線程對應的預設(shè)函數(shù);
判斷所述目標線程對應的進程路徑是否在預設(shè)目錄下;
如果所述目標線程對應的進程路徑在所述預設(shè)目錄下,則執(zhí)行對所述目標線程的保護操作。
2.如權(quán)利要求1所述的方法,其特征在于,利用鉤子函數(shù)掛鉤與所述目標線程對應的預設(shè)函數(shù),包括:
從系統(tǒng)服務(wù)描述符表SSDT中查找所述預設(shè)函數(shù)的地址;
建立所述鉤子函數(shù),并將所述鉤子函數(shù)的地址設(shè)置為所述預設(shè)函數(shù)的地址,以掛鉤所述預設(shè)函數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于,判斷所述目標線程對應的進程路徑是否在預設(shè)目錄下,包括:
獲取所述目標線程的線程句柄;
根據(jù)所述線程句柄獲取所述目標進程的進程句柄;
根據(jù)所述進程句柄獲取所述進程路徑;
判斷所述進程路徑是否在預設(shè)目錄下。
4.如權(quán)利要求3所述的方法,其特征在于,根據(jù)所述線程句柄獲取所述目標進程的進程句柄,包括:
根據(jù)所述線程句柄獲取所述目標線程的線程體結(jié)構(gòu)地址;
根據(jù)所述線程體結(jié)構(gòu)地址獲取所述目標線程所在的進程體結(jié)構(gòu);
根據(jù)所述進程體結(jié)構(gòu)獲取所述進程句柄。
5.如權(quán)利要求1所述的方法,其特征在于,執(zhí)行對所述目標線程的保護操作,包括:
利用所述鉤子函數(shù)向所述暫停指令的發(fā)起主體返回拒絕狀態(tài);或者
利用所述鉤子函數(shù)向所述暫停指令的發(fā)起主體返回暫停成功的假狀態(tài);或者
利用所述鉤子函數(shù)執(zhí)行所述預設(shè)函數(shù),暫停所述目標線程,并在向所述暫停指令的發(fā)起主體返回暫停成功狀態(tài)之后,恢復所述目標線程。
6.一種線程的保護裝置,其特征在于,包括:
監(jiān)控模塊,用于監(jiān)控目標線程是否接收到暫停指令;
掛鉤模塊,用于當確定所述目標線程接收到所述暫停指令時,利用鉤子函數(shù)掛鉤與所述目標線程對應的預設(shè)函數(shù);
判斷模塊,用于判斷所述目標線程對應的進程路徑是否在預設(shè)目錄下;
執(zhí)行模塊,用于如果所述目標線程對應的進程路徑在所述預設(shè)目錄下,則執(zhí)行對所述目標線程的保護操作。
7.如權(quán)利要求6所述的裝置,其特征在于,所述掛鉤模塊,包括:
查找子模塊,用于從系統(tǒng)服務(wù)描述符表SSDT中查找所述預設(shè)函數(shù)的地址;
建立子模塊,用于建立所述鉤子函數(shù),并將所述鉤子函數(shù)的地址設(shè)置為所述預設(shè)函數(shù)的地址,以掛鉤所述預設(shè)函數(shù)。
8.如權(quán)利要求6所述的裝置,其特征在于,所述判斷模塊,包括:
第一獲取子模塊,用于獲取所述目標線程的線程句柄;
第二獲取子模塊,用于獲取根據(jù)所述線程句柄獲取所述目標進程的進程句柄;
第三獲取子模塊,用于獲取根據(jù)所述進程句柄獲取所述進程路徑;
判斷子模塊,用于判斷所述進程路徑是否在預設(shè)目錄下。
9.如權(quán)利要求8所述的裝置,其特征在于,所述第二獲取子模塊,用于:
根據(jù)所述線程句柄獲取所述目標線程的線程體結(jié)構(gòu)地址;
根據(jù)所述線程體結(jié)構(gòu)地址獲取所述目標線程所在的進程體結(jié)構(gòu);
根據(jù)所述進程體結(jié)構(gòu)獲取所述進程句柄。
10.如權(quán)利要求6所述的裝置,其特征在于,所述執(zhí)行模塊,用于:
利用所述鉤子函數(shù)向所述暫停指令的發(fā)起主體返回拒絕狀態(tài);或者
利用所述鉤子函數(shù)向所述暫停指令的發(fā)起主體返回暫停成功的假狀態(tài);或者
利用所述鉤子函數(shù)執(zhí)行所述預設(shè)函數(shù),暫停所述目標線程,并在向所述暫停指令的發(fā)起主體返回暫停成功狀態(tài)之后,恢復所述目標線程。