المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : إستدعاء & إستخدام Native Api من الـ User Mode


TF6M
13-01-2011, 04:42 PM
السلام عليكم و رحمة الله و بركاته

- يمكن إستدعاء روتينات Ntxxx من الـ User Mode , دون الحاجة إلى تصريح تصدير الدالة من NtDLL
آلية العملية بسيطة , يتم الإنتهاء من الـ SysTem Call الى قلب النظام (Win32.sys & NtosKrnl.exe)
حيث يحدد طبيعة الإستدعاء (Gui or Native) , على أساس قيمة ServiceTable (. (http://img146.imageshack.us/img146/4219/sst.gif))

- يتم تمرير بيانات الإستدعاء عن طريق SysEnter = $2E , تعتبر بوابة الكيرنل مود و كتعريف بسيط
هي عبارة عن روتين ينفذ عن إستدعاء Ntxxx/Zwxxx أو عند تنفيذ المقاطعة Int $2E من اليوزر مود(.. (http://img145.imageshack.us/img145/2189/downloadpw.png))

- للـ 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, 101h ; NtTerminateProcess
.text:7C91DE55 mov edx, 7FFE0300h
.text:7C91DE5A call dword ptr [edx]
.text:7C91DE5C retn 8
.text:7C91DE5C ZwTerminateProcess endp- الفكرة واضحة الآن , يكفي دفع ببرامترات الدالة :
Asm
push Dword(-1)
Push 0
mov eax, 101h // TerminateProcess
mov edx,$7FFE0300
call dword ptr [edx]
ret 8
End;- الأن يمكن الإستغناء على إعادة تصريح التصدير & مساحة أقل & سرعة تنفيذ (Inline) .
- أيضا يمكن إستغلال الطريقة من الكيرنل مود , لم أحضر مثال بعد http://www.delphi4arab.com/forum/images/icons/icon10.gif .
بالتوفيق,,

syscall
15-01-2011, 12:25 AM
السلام عليكم

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

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

TF6M
15-01-2011, 01:04 AM
- رقم الخدمة يكون على أساس دقيق , لأنني قمت بتنقيح الـ NtDll , هناك طريقتين كإظافة :
1- إستخراج ترتيب الدوال من الـ NtDLL راجع هذا الموضوع : هنا (http://www.delphi4arab.com/forum/showthread.php?t=4089)
2- يمكن التحقق من إصدار النظام : GetOSinfo تحديد نسخة النظام & (http://www.delphi4arab.com/forum/showthread.php?t=4125)BuildNumber (http://www.delphi4arab.com/forum/showthread.php?t=4125)
على أساس الإصدار يتم , إرفاق الترتيب المناسب : هنا (http://www.delphi4arab.com/forum/showpost.php?p=22262&postcount=12)

- 'لذلك يجب استخدام تصريح التصدير فهذا اضمن لنا للتوافق مع كافة انظمة تشغيل مايكروسوفت '
وهذا ما أردت الإستغناء عنه , دون اللجوء إلى إعادة التصريح & تنفيذ تعليمات أقل & سهولة تتبع
الدالة (ASM) .