delphi4arab منتديات دلفي للعرب

نسخة كاملة : إستدعاء & إستخدام Native Api من الـ User Mode
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم و رحمة الله و بركاته

- يمكن إستدعاء روتينات 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] .
بالتوفيق,,
السلام عليكم

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

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

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