मैंने पाया और इस सवाल पढ़ा लेकिन मैं अपने जवाब SSDT hooking alternative in x64 systemsहुक ZwTerminateProcess (SSDT के बिना)
मैं अन्य कार्यक्रमों के द्वारा समाप्ति के खिलाफ अपने आवेदन की रक्षा करना चाहते हैं नहीं मिला था। विंडोज़ के 32 बिट संस्करण में मैंने SSDT hooking
का उपयोग ZwTerminateProcess
या ZwOpenProcess
को हुक करने के लिए किया था। मुझे विंडोज़ के 64 बिट संस्करण में उपयोग करने के लिए अपने प्रोग्राम को अपग्रेड करना होगा। और दुर्भाग्य से 64 बिट विंडोज़ में हम SSDT
हुक (Because Patch Guard (KPP)) का उपयोग नहीं कर सकते हैं, ध्यान दें कि मैं इस मामले में पीजी को बाईपास नहीं करना चाहता हूं और मुझे केवल कर्नेल मोड हुकिंग का उपयोग करना है। उदाहरण के लिए मैं अपने कार्यक्रम के लिए नहीं करना चाहते समाप्त शुरू (यहां तक कि) निम्नलिखित कोड द्वारा:
NTSTATUS drvTerminateProcess(ULONG ulProcessID)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
HANDLE hProcess;
OBJECT_ATTRIBUTES ObjectAttributes;
CLIENT_ID ClientId;
DbgPrint("drvTerminateProcess(%u)", ulProcessID);
InitializeObjectAttributes(&ObjectAttributes, NULL, OBJ_INHERIT, NULL, NULL);
ClientId.UniqueProcess = (HANDLE)ulProcessID;
ClientId.UniqueThread = NULL;
__try
{
ntStatus = ZwOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &ObjectAttributes, &ClientId);
if(NT_SUCCESS(ntStatus))
{
ntStatus = ZwTerminateProcess(hProcess, 0);
if(!NT_SUCCESS(ntStatus))
DbgPrint("ZwTerminateProcess failed with status : %08X\n", ntStatus);
ZwClose(hProcess);
}
else
DbgPrint("ZwOpenProcess failed with status : %08X\n", ntStatus);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
ntStatus = STATUS_UNSUCCESSFUL;
DbgPrint("Exception caught in drvTerminateProcess()");
}
return ntStatus;
}
इस काम मैं निम्नलिखित समारोह (NewZwOpenProcess
) का इस्तेमाल किया कर रही करने के लिए और SSDT में लेकिन 64 में मूल ZwOpenProcess
से बदल खिड़कियों मैं मुझे क्या करना चाहिए पता नहीं है :(:
NTSTATUS NewZwOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL)
{
HANDLE ProcessId;
__try
{
ProcessId = ClientId->UniqueProcess;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
return STATUS_INVALID_PARAMETER;
}
if (ProcessId == (HANDLE)11) //Check if the PID matches our protected process PID (My programm)
{
return STATUS_ACCESS_DENIED;
}
else
return OldZwOpenProcess(ProcessHandle, DesiredAccess,ObjectAttributes, ClientId);
}
किसी भी विचार ??
(मुझे माफ करना अगर मेरी अंग्रेजी बुरा है)
में पाया गया था और इसलिए हमें पैच गार्ड पसंद है। –
@ हंसपैसेंट :), हां हम पीजी से प्यार करते हैं, लेकिन मैं सुरक्षा सॉफ्टवेयर विकसित कर रहा हूं और मेरे कार्यक्रमों की रक्षा करना मेरे लिए महत्वपूर्ण है। – Behrooz
माइक्रोसॉफ्ट ने पीजी विकसित किया है, इसलिए आपको अब इस तरह के गड़बड़ वाले हैक्स की आवश्यकता नहीं है। –