जब मैं अपने ड्राइवर को संकलित करता हूं तो विंडोज 8.1 को लक्षित करता हूं तो कुछ बहुत अजीब होता है।विंडोज ड्राइवर में __security_init_cookie बगचेक का कारण बनता है KERNEL_SECURITY_CHECK_FAILURE
जैसे ही यह लोड हो जाता है, यह बगचेक KERNEL_SECURITY_CHECK_FAILURE
, पहले पैरामीटर 6 के साथ दुर्घटनाग्रस्त हो जाता है, जिसका अर्थ है "The stack cookie security cookie was not properly initialized by the loader
"।
यह केवल विंडोज 8 पर चलाने के लिए ड्राइवर चलाने और विंडोज के पुराने संस्करण पर ड्राइवर छवि को लोड करने का प्रयास कर सकता है। इस समस्या से बचने के लिए, यदि आप Windows के पिछले संस्करण "पर चलाने के लिए ड्राइवर का निर्माण करना होगा। यह त्रुटि जब मेरे द्वारा लक्षित नहीं होती है विंडोज 7
मैं बिल्कुल खोजने के लिए जहां यह त्रुटि उत्पन्न हो रही है कर रहा था। यह इस disassembly से __security_init_cookie
समारोह जो GsDriverEntry
द्वारा कहा जाता है में हो रहा है।
INIT:000000014000C1B4 __security_init_cookie proc near ; CODE XREF: GsDriverEntry+10p
INIT:000000014000C1B4 mov rax, cs:__security_cookie
INIT:000000014000C1BB test rax, rax
INIT:000000014000C1BE jz short loc_14000C1DA
INIT:000000014000C1C0 mov rcx, 2B992DDFA232h
INIT:000000014000C1CA cmp rax, rcx
INIT:000000014000C1CD jz short loc_14000C1DA
INIT:000000014000C1CF not rax
INIT:000000014000C1D2 mov cs:__security_cookie_complement, rax
INIT:000000014000C1D9 retn
INIT:000000014000C1DA ; ---------------------------------------------------------------------------
INIT:000000014000C1DA
INIT:000000014000C1DA loc_14000C1DA: ; CODE XREF: __security_init_cookie+Aj
INIT:000000014000C1DA ; __security_init_cookie+19j
INIT:000000014000C1DA mov ecx, 6
INIT:000000014000C1DF int 29h ; Win8: RtlFailFast(ecx)
हम देख सकते हैं कि यह 2 जाँचों का निष्पादन।
The first check checks if rax (__security_cookie) is zero and the
second check compares it to 2B992DDFA232h.
हालांकि, 012,378,को मेरी बाइनरी में 2B992DDFA232h
के रूप में घोषित किया गया है, और इस प्रकार बाधा को कभी नहीं कहा जाना चाहिए, लेकिन किसी भी तरह यह है।
क्या आपने मैन्युअल रूप से '__security_cookie' घोषित किया था? यदि कोड '__security_cookie == 2B992DDFA232h' है तो यह कोड ** असफल ** (कॉल 'RtlFastFail') होगा क्योंकि इसका मतलब है कि कुकी को इसके डिफ़ॉल्ट मान (असुरक्षित) पर छोड़ दिया गया था। वहां कहीं और कोड है ('केटिककाउंट' के लिए देखो) जो कि एक नई यादृच्छिक सुरक्षा कुकी की गणना करनी चाहिए। – nneonneo
आह हाँ, आप सही @nneonneo हैं, मैंने उस नियंत्रण प्रवाह को गलत तरीके से व्याख्या की है। अपने प्रश्न का उत्तर देने के लिए, नहीं, मैंने मैन्युअल रूप से __security_cookie घोषित नहीं किया था। मैंने विंडोज 7 बाइनरी में एक नज़र डाली और वास्तव में केटिककाउंट के साथ एक नई कुकी की गणना की, हालांकि विंडोज 8.1 बाइनरी पर बराबर कोड पूरी तरह गायब है। – InvokeStatic
मुझे लगता है कि आप विंडोज 8.1 सिस्टम पर ड्राइवर का परीक्षण कर रहे हैं? सवाल नहीं कहता है। –