06-08-2009, 12:59 PM
إقتباس :شكرا اخي strelitzia على فتح هكذا مواضيع .بارك الله فيكم انتم اخواني اعضاء المنتدى على اثراء المواضيع...
|
[تمرين] الكل يسأل و الكل يجيب
|
|
06-08-2009, 12:59 PM
إقتباس :شكرا اخي strelitzia على فتح هكذا مواضيع .بارك الله فيكم انتم اخواني اعضاء المنتدى على اثراء المواضيع...
08-08-2009, 12:05 PM
(آخر تعديل لهذه المشاركة: 08-08-2009, 12:09 PM بواسطة STRELiTZIA.)
فكرة رائعة بارك الله فيك يا أستاذ
:الدالة ZwLoadDriver كود : Function [color=Red]ZwLoadDriver[/color];External 'NtDll.Dll' Name 'ZwLoadDriver';1- الهدف من الدالة : تحميل الدريفر للنظام أما عن مود التحميل لا أعلم .. ؟؟. 2- لها براماتر وحيد (هل كتابة الدالة صحيحة ؟؟؟) : كود : Function [color=Red]ZwLoadDriver[/color](DriverServiceName:PUNICODE_STRING):NTSTATUS; stdcall;In_DriverServiceName : اليونيكوند الخاص بتحويل مسار الدريفر من الريجيستري نتحصل عليه بالدالة : RtlInitUnicodeString مثال : Registry > Machine > SystemCurrent > ControlSet > Services > DriverName كود : Var UNICODESTRING: PUNICODE_STRING;
RtlInitUnicodeString(UNICODESTRING,'Machine\System\CurrentControlSet\Services\DriverName.Sys');
ZwLoadDriver(UNICODESTRING);في إنتظار التصحيح .. بالتوفيق ,, ممكن أخطأت في المثال : كود : procedure [color=Red]RtlInitUnicodeString[/color]; external 'ntoskrnl.exe' name 'RtlInitUnicodeString';كود : var UNICODESTRING: UNICODE_STRING;
obj_Attrib: OBJECT_ATTRIBUTES;
RtlInitUnicodeString(UNICODESTRING, 'Machine\System\CurrentControlSet\Services\DriverName.Sys');
InitializeObjectAttributes(obj_Attrib, @UNICODESTRING, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, 0, nil);
ZwLoadDriver (@obj_Attrib);
08-08-2009, 12:56 PM
(آخر تعديل لهذه المشاركة: 08-08-2009, 08:46 PM بواسطة STRELiTZIA.)
إقتباس :الدالة zwloaddriverيعني الحكاية اليوم على الدرافرات :Cup: في انتظار تعاليق الاخوة اولا :crazy:
09-08-2009, 10:44 AM
(آخر تعديل لهذه المشاركة: 09-08-2009, 11:08 AM بواسطة STRELiTZIA.)
السلام عليكم و رحمة الله
إقتباس :ممكن أخطأت في المثال :الدالة تنتظر براميتر من نوع Pointer على المسار الريجستري الذي هو بدوره Unicode. 1- يجب ان يكون الدرايفر مسجل من قبل في النظام لتستطيع الدالة تحميلة و تشغيله. 2- الدالة لا تعمل Unload يجب استدعاء الدالة ZwUnloadDriver لتحرير الدرايفر - تعمل بنفس برامترات دالة التحميل. PHP كود : ZwLoadDriver (@obj_Attrib); لا يوجد عندك Object بل مسار ريجيستري unicode فقط. ![]() المرفق يحتوي على مثال تطبيقي للدالة : طريقة كتابة الدالة، لم اغير هيكل الدالة الأولى لعدم تعقيد الأمور. PHP كود : function _DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;اخي TF6M الطريقة التي كتبت اولا و ظننت انك اخطأت فيها هي الصحيحة :thumbsup: قارن بين الكود الذي وضعت و ستجد الأخطاء التي يجب اصلاحها... طريقة استعمال المرفق : يــــــرجى اتباع المراحل بالترتيب الدقيق. - تشغيل الأداة Dbgview لاتقاط رسائل الكرنل. - تشغيل نسخة من اداة KmdManager و اختيار درايفر ZwDeleteFile - تسجيل فقط الدرايفر ZwDeleteFile. - تشغيل نسخة ثانية من اداة KmdManager و اختيار الدرايفر ZwLoadDriver. - تسجيل و تشغيل الدرايفر ZwLoadDriver. و بالطبع الاطلاع على رسائل الكرنل التي تظهر في DbgView. يعني اننا سنقوم بتشغيل الدرايفر ZwLoadDriver و منه يتم استدعاء دايفر ثاني مسجل في النظام اسمه ZwDeleteFile و هذا الأخير يحاول حدف ملف تجريبي اسمه test.exe موجود في قرص C. بالتوفيق ان شاء الله
09-08-2009, 12:19 PM
السلام عليكم
1- يعن بواسطة الدريفر ZwLoadDriver حملنا الدريفر ZwDeleteFile المسجل مسبقا في الريجيستري . 2- طريقة كتابة الدالة بالدلفي ؟؟ ... يعني صحيحة لكن أين أضيفها هل في System أم في NtDll 3- الدالة ZwCreateFile و توزظيفها هي نفسها CreateFile في الـ User Mode : ملاحظة : لكن إذا أردنا أن نستدعيها من الـ User Mode نستعمل NtCreateFile في مكان ZwCreateFile . المثال : كود : uses
nt_status, ntoskrnl, ntifs, native, winioctl, fcall, macros;
Var
RtnCode: NTSTATUS;
oa: OBJECT_ATTRIBUTES;
iosb: IO_STATUS_BLOCK;
hDirectory: HwnD;
{ function _DriverEntry(pDriverObject:PDRIVER_OBJECT;
pusRegistryPath:PUNICODE_STRING): NTSTATUS; stdcall;}
RtnCode := ZwCreateFile(@hDirectory, SYNCHRONIZE, @oa, @iosb, nil,
FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN_IF,
FILE_DIRECTORY_FILE + FILE_SYNCHRONOUS_IO_NONALERT,
nil, 0);
if RtnCode = STATUS_SUCCESS then
begin
if iosb.Information = FILE_CREATED then
begin
DbgPrint('FileWorks: Directory created'#13#10);
end else if iosb.Information = FILE_OPENED then
begin
DbgPrint('FileWorks: Directory exists and was opened'#13#10);
end;
ZwClose(hDirectory);
end;- بالطبع نتيجة الدالة من NTSTATUS لأن كل رقم مرجع يوافق حالة ما مسجلة مسبقا أو غير مسجلة في الوحدة nt_status كما يمكننا أن نستعمل حاصل دالة IoStatusBlock كالـ IoResult لتحقق من الأخطاء . - صيغة الدالة (****ا أن تكون صحيحة) : كود : Function [color=Red]ZwCreateFile[/color](FileHandle:PHANDLE; DesiredAccess:ACCESS_MASK;ObjectAttributes:POBJECT_ATTRIBUTES;
IoStatusBlock:PIO_STATUS_BLOCK ;AllocationSize:PLARGE_INTEGER ;
FileAttributes,ShareAccess,CreateDisposition,CreateOptions:ULONG ;
EaBuffer:PVOID;EaLength:ULONG):NTSTATUS;StdCall;بالتوفيق ,,
09-08-2009, 09:45 PM
السلام عليكم
PHP كود : function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle;Stdcall;1-شرح هدفها 2-كيفية ادخال ال [COLOR="Red"]Parameters الخاصة بهذه الدالة [/COLOR] ان شاء الله غدا في مثل هذا الوقت ساضع الشرح مع مثال توضيحي
10-08-2009, 12:01 PM
TF6M كتب :السلام عليكم و عليكم السلام و رحمة الله جيد اخي TF6M اخذت المثال الخاص بــ KmdKit4D :thumbsup: نفس الدالة بعد بعض التعديل و التنظيم. PHP كود : function _DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;الدريفر مرفق ايضا.
10-08-2009, 12:25 PM
شكرا بارك الله فيك .
فقط ماذا عن 1,2 .
10-08-2009, 12:43 PM
TF6M كتب :شكرا بارك الله فيك . إقتباس :1- يعن بواسطة الدريفر ZwLoadDriver حملنا الدريفر ZwDeleteFile المسجل مسبقا في الريجيستري .دالة LoadDriver سواء كان استدعائها من الــ User mode او الــ Kernel modeتحمل فقط الدرايفرات المسجلة مسبقا في النظام. نعم في المثال السابق قمنا بتحميل درايفر ZwDeleteFile.sys انطلاقا من الــ kernel mode بواسطة الدرايفر ZwLoadDriver.sys. إقتباس :2- طريقة كتابة الدالة بالدلفي ؟؟ ... يعني صحيحة لكن أين أضيفها هل في System أم في NtDllلا... اذا اردت التعامل مع تصديرات Exports الكرنل ntoskrnl.exe يجب اضافتها في المكتبة الأصلية ntoskrnl.pas الخاصة بــ KmdKit4D. بالتوفيق ان شاء الله
11-08-2009, 01:14 PM
(آخر تعديل لهذه المشاركة: 20-08-2009, 11:36 AM بواسطة STRELiTZIA.)
السلام عليكم
الشرح عام ومبسط دور الدالة هو الحصول على قائمة البرامج النشطة في الذاكرة. بالنسبة البراماتر الاول يحدد ما المراد ارجاعه th32ProcessID البرامترالثاني ياخذ رقم التعريف الخاص ب ال Process PHP كود : Varبالنسبة لدالة AdjustProcessPrivilege فهي تعطينا صلاحيات في النظام لاضهار processes المثال التوضيحي مرفق |
|
|