1.一種卸載軟件的處理方法,其特征在于,包括:
獲取卸載操作的調(diào)用棧中的函數(shù)地址列表;
查詢所述函數(shù)地址列表中各個函數(shù)地址對應(yīng)的模塊名稱;
判斷所述模塊名稱中是否包括預(yù)設(shè)字符串,當(dāng)包括所述預(yù)設(shè)字符串時,禁止卸載軟件;當(dāng)不包括所述預(yù)設(shè)字符串時,允許卸載軟件。
2.如權(quán)利要求1所述的方法,其特征在于,所述允許卸載軟件具體為:在鉤子函數(shù)NewNtCreateSection里,調(diào)用NtCreateSection原始函數(shù);所述禁止卸載軟件具體為:在鉤子函數(shù)NewNtCreateSection里,禁止調(diào)用NtCreateSection原始函數(shù),返回拒絕訪問狀態(tài)并退出函數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于,所述獲取卸載操作的調(diào)用棧中的函數(shù)地址列表具體為:調(diào)用內(nèi)核函數(shù)RtlWalkFrameChain獲取卸載操作的調(diào)用棧中的函數(shù)地址列表。
4.如權(quán)利要求1所述的方法,其特征在于,所述獲取卸載操作的調(diào)用棧中的函數(shù)地址列表之前,還判斷在NewNtCreateSection函數(shù)中,參數(shù)AllocationAttributes是否為SEC_IMAGE,若是,進(jìn)行后續(xù)操作,否則結(jié)束操作。
5.如權(quán)利要求1所述的方法,其特征在于,所述獲取卸載操作的調(diào)用棧中的函數(shù)地址列表之前,還判斷正在打開的文件路徑中是否包含uniOnst.exe,若是,進(jìn)行后續(xù)操作,否則結(jié)束操作。
6.如權(quán)利要求5所述的方法,其特征在于,所述確定所述正在打開的文件路徑具體為:在NewNtCreateSection函數(shù)中,調(diào)用內(nèi)核函數(shù)ObReferenceObjectByHandle獲取文件對象指針,獲取所述指針結(jié)構(gòu)里保存的正在打開的文件路徑。
7.一種卸載軟件的處理裝置,其特征在于,包括:
用于獲取卸載操作的調(diào)用棧中的函數(shù)地址列表的模塊;
用于查詢所述函數(shù)地址列表中各個函數(shù)地址對應(yīng)的模塊名稱的模塊;
用于判斷所述模塊名稱中是否包括預(yù)設(shè)字符串,當(dāng)包括所述預(yù)設(shè)字符串時禁止卸載軟件,當(dāng)不包括所述預(yù)設(shè)字符串時允許卸載軟件的模塊。
8.如權(quán)利要求7所述的裝置,其特征在于,所述允許卸載軟件具體為:在鉤子函數(shù)NewNtCreateSection里,調(diào)用NtCreateSection原始函數(shù);所述禁止卸載軟件具體為:在鉤子函數(shù)NewNtCreateSection里,禁止調(diào)用NtCreateSection原始函數(shù),返回拒絕訪問狀態(tài)并退出函數(shù)。
9.如權(quán)利要求7所述的裝置,其特征在于,所述獲取卸載操作的調(diào)用棧中的函數(shù)地址列表具體為:調(diào)用內(nèi)核函數(shù)RtlWalkFrameChain獲取卸載操作的調(diào)用棧中的函數(shù)地址列表。
10.一種電子設(shè)備,其特征在于,所述電子設(shè)備包括:殼體、處理器、存儲器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲器設(shè)置在電路板上;電源電路,用于為上述電子設(shè)備的各個電路或器件供電;存儲器用于存儲可執(zhí)行程序代碼;處理器通過讀取存儲器中存儲的可執(zhí)行程序代碼來運(yùn)行與可執(zhí)行程序代碼對應(yīng)的程序,用于執(zhí)行如下操作:
獲取卸載操作的調(diào)用棧中的函數(shù)地址列表;
查詢所述函數(shù)地址列表中各個函數(shù)地址對應(yīng)的模塊名稱;
判斷所述模塊名稱中是否包括預(yù)設(shè)字符串,當(dāng)包括所述預(yù)設(shè)字符串時,禁止卸載軟件;當(dāng)不包括所述預(yù)設(shè)字符串時,允許卸載軟件。