
rt26cx21x64.sys शोषण (Realtek PCIe GbE/2.5GbE/5GbE परिवार)
rt26cx21x64.sys एक्सप्लॉइट (Realtek PCIe GbE/2.5GbE/5GbE परिवार)
OID 0xFF816871 निक के mmio बार को कॉल करने वाली प्रक्रिया के वर्चुअल एड्रेस स्पेस में मैप करता है, (MmLockedPagesSpecifyCache), जो um से \.\RealTekCard{GUID} के माध्यम से पहुंच योग्य है
यह IOCTL (0x0012C818) एक रजिस्ट्री मान (DrvMode=4) द्वारा गेट किया जाता है
एक बार जब हमारे पास mmio रेग एक्सेस हो जाता है, तो हम निक के tx/rx डिस्क्रिप्टर रिंग्स को लूपबैक मोड में प्रोग्राम करते हैं ताकि मनमाने phys एड्रेस को r/w किया जा सके (AllocateUserPhysicalPages हमें PFNs देता है)।
IOCTL 0x12C008 (1230872) पहली कमजोर डिस्पैच शाखा है। 0x12C00C और 0x12C010 अलग-अलग पथों की ओर ले जाते हैं, a5 स्विच के माध्यम से IOCTL कोड ले जाता है

DMA पथ तक पहुंचने से पहले, drv एक वैश्विक DrvMode फ्लैग की जांच करता है, बिट 2 सेट होना चाहिए अन्यथा हम कभी भी कमजोर MMIO मैपिंग पथ तक नहीं पहुंच पाएंगे।

dword_1400D0208 और 4 ही जांच है
कमजोर पथ के सामने दो गार्ड हैं, दोनों को DMA पथ में प्रवेश करने के लिए false का मूल्यांकन करना होगा, ये डिवाइस एक्सटेंशन पर एक बाइट फ्लैग और पिछली छवि में मोड जांच हैं

!_(_BYTE _)(a1 + 12465) को बायपास करना आसान है, हमें बस यह सुनिश्चित करना है कि डिवाइस इनिशियलाइज़ नहीं है।
sub_14001B67C भी तुच्छ रूप से आसान है।
ड्राइवर कॉलर द्वारा आपूर्ति किए गए phys एड्रेस पर बिना किसी सत्यापन के एक MDL आवंटित करता है, कोई सीमा या रेंज सत्यापन नहीं है, जैसे कुछ भी नहीं।

MDL को कर्नेल VA में मैप किया जाता है और बेस एड्रेस कॉलर को दिया जाता है, 0x40000010 MAP_NO_EXECUTE और MmNonCached है।

MmMapLockedPagesSpecifyCache मैप किया गया VA उत्पन्न करता है जो *a2 में लिखा जाता है और um को लौटाया जाता है, यह हमें एक मनमाना phys r/w प्रिम देता है।
nic.h से मेल खाता हो।एडमिन के रूप में चलाएँ।
पहली बार चलाने के बाद, reg मान सेट हो जाएंगे और आपको अपना पीसी पुनः आरंभ करना होगा।
इसे काम करने के लिए, आपका NIC लिंक UP स्थिति में होना चाहिए (ताकि हम डिस्क्रिप्टर प्रोसेस कर सकें)।
या तो:
या
$ cmake -B build
$ cmake --build build --config Release