السلام عليكم و رحمة الله و بركاته
- يمكن إستدعاء روتينات Ntxxx من الـ User Mode , دون الحاجة إلى تصريح تصدير الدالة من NtDLL
آلية العملية بسيطة , يتم الإنتهاء من الـ SysTem Call الى قلب النظام (Win32.sys & NtosKrnl.exe)
حيث يحدد طبيعة الإستدعاء (Gui or Native) , على أساس قيمة ServiceTable (.)
- يتم تمرير بيانات الإستدعاء عن طريق SysEnter = $2E , تعتبر بوابة الكيرنل مود و كتعريف بسيط
هي عبارة عن روتين ينفذ عن إستدعاء Ntxxx/Zwxxx أو عند تنفيذ المقاطعة Int $2E من اليوزر مود(..)
- للـ SysEnter , بارامتران الأول يسجل في EAX و الثاني في الـ EDX
EAX سيؤشر إلى ترتيب الدالة المستهدفية أو الموافقة لـ SysCall في ServiceTable
EDX سيؤشر إلى بارامترات الدالة المستهدفة المحجوزة في الـ Stack
- مثال , دالة NtTerminateProcess , تنقيح المكتبة NtDLL بـ IDA Pro
- الفكرة واضحة الآن , يكفي دفع ببرامترات الدالة :
- الأن يمكن الإستغناء على إعادة تصريح التصدير & مساحة أقل & سرعة تنفيذ (Inline) .
- أيضا يمكن إستغلال الطريقة من الكيرنل مود , لم أحضر مثال بعد
.
بالتوفيق,,
- يمكن إستدعاء روتينات Ntxxx من الـ User Mode , دون الحاجة إلى تصريح تصدير الدالة من NtDLL
آلية العملية بسيطة , يتم الإنتهاء من الـ SysTem Call الى قلب النظام (Win32.sys & NtosKrnl.exe)
حيث يحدد طبيعة الإستدعاء (Gui or Native) , على أساس قيمة ServiceTable (.)
- يتم تمرير بيانات الإستدعاء عن طريق SysEnter = $2E , تعتبر بوابة الكيرنل مود و كتعريف بسيط
هي عبارة عن روتين ينفذ عن إستدعاء Ntxxx/Zwxxx أو عند تنفيذ المقاطعة Int $2E من اليوزر مود(..)
- للـ SysEnter , بارامتران الأول يسجل في EAX و الثاني في الـ EDX
EAX سيؤشر إلى ترتيب الدالة المستهدفية أو الموافقة لـ SysCall في ServiceTable
EDX سيؤشر إلى بارامترات الدالة المستهدفة المحجوزة في الـ Stack
- مثال , دالة NtTerminateProcess , تنقيح المكتبة NtDLL بـ IDA Pro
كود :
.text:7C91DE50 public ZwTerminateProcess
.text:7C91DE50 ZwTerminateProcess proc near
.text:7C91DE50
.text:7C91DE50 mov eax, [COLOR=Red]101h[/COLOR] ; NtTerminateProcess
.text:7C91DE55 mov edx, [COLOR=Red]7FFE0300h[/COLOR]
.text:7C91DE5A call dword ptr [edx]
.text:7C91DE5C retn 8
.text:7C91DE5C ZwTerminateProcess endpكود :
Asm
push [COLOR=Blue]Dword(-1)[/COLOR]
Push[COLOR=Blue] 0[/COLOR]
mov eax, [COLOR=Red]101h[/COLOR] // TerminateProcess
mov edx,[COLOR=Red]$7FFE0300[/COLOR]
call dword ptr [edx]
ret 8
End;- أيضا يمكن إستغلال الطريقة من الكيرنل مود , لم أحضر مثال بعد
بالتوفيق,,
I'M Fly Like A G6


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)