إستدعاء & إستخدام Native Api من الـ User Mode
#1
السلام عليكم و رحمة الله و بركاته

- يمكن إستدعاء روتينات Nt
xxx من الـ 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;
- الأن يمكن الإستغناء على إعادة تصريح التصدير & مساحة أقل & سرعة تنفيذ (Inline) .
- أيضا يمكن إستغلال الطريقة من الكيرنل مود , لم أحضر مثال بعد
[صورة: icon10.gif] .
بالتوفيق,,
I'M Fly Like A G6

[-] كل من 1 user says قال شكرا ل TF6M على المشاركة المفيدة
  • mohamed49
الرد
#2
السلام عليكم

انا ضد استخدام رقم خدمة من جدول الخدمات الخاص بنظام التشغيل بشكل مباشر
لماذا ؟
إليك الجواب
كود :
http://www.metasploit.com/users/opcode/syscalls.html

وقد ذكرتني بمقالة قرأتها يجب ان تتطلع عليها وتحديدا الفقرة
Operating system differences
اليك المقالة
كود :
http://www.symantec.com/connect/articles/windows-syscall-shellcode
لذلك يجب استخدام تصريح التصدير فهذا اضمن لنا للتوافق مع كافة انظمة تشغيل مايكروسوفت
[-] كل من 1 user says قال شكرا ل syscall على المشاركة المفيدة
  • mohamed49
الرد
#3
- رقم الخدمة يكون على أساس دقيق , لأنني قمت بتنقيح الـ NtDll , هناك طريقتين كإظافة :
1- إستخراج ترتيب الدوال من الـ NtDLL راجع هذا الموضوع : هنا
2- يمكن التحقق من إصدار النظام : GetOSinfo تحديد نسخة النظام & BuildNumber
على أساس الإصدار يتم , إرفاق الترتيب المناسب : هنا

- 'لذلك يجب استخدام تصريح التصدير فهذا اضمن لنا للتوافق مع كافة انظمة تشغيل مايكروسوفت '
وهذا ما أردت الإستغناء عنه , دون اللجوء إلى إعادة التصريح & تنفيذ تعليمات أقل & سهولة تتبع
الدالة (ASM) .
[url=http://www.delphi4arab.net/forum/showthread.php?tid=4125][/url]
I'M Fly Like A G6

الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم