01-02-2010, 07:11 PM
01-02-2010, 08:09 PM
لم أسمع منه منذ مدة كبيرة ، أكيد مطحون في الدنيا ...
20-02-2010, 10:12 PM
السلام عليكم
واجهت مشكلة أثناء تحميل ZwCreateFileHook هذا كود الدريفر من موقع :rtfm: KMD
السؤال هنا أن صاحب الموضوع و المشاركين نجحو في تشغيله دون Bsod
على عكسي :frusty: لدا أعدة مراجعه الموضوع, هل من الممكن :
الداكرة المخصصة لـ SSDT داكرة للقراءة فقط , و نحن نريد التغير في مسار الإستدعاء :crazy:؟؟.
واجهت مشكلة أثناء تحميل ZwCreateFileHook هذا كود الدريفر من موقع :rtfm: KMD
PHP كود :
unit ZwCreateFileHook;
interface
uses
nt_status, ntoskrnl, native, winioctl,fcall, macros;
function _DriverEntry(pDriverObject: PDRIVER_OBJECT;
pusRegistryPath: PUNICODE_STRING): NTSTATUS; stdcall;
implementation
type
TfnZwCreateFile = function(FileHandle: PHANDLE; DesiredAccess: ACCESS_MASK;
ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK;
AllocationSize: PLARGE_INTEGER; FileAttributes: ULONG; ShareAccess: ULONG;
CreateDisposition: ULONG; CreateOptions: ULONG; EaBuffer: PVOID;
EaLength: ULONG): NTSTATUS; stdcall;
var
m_UserTime : LARGE_INTEGER;
m_KernelTime : LARGE_INTEGER;
o_ZwCreateFile : TfnZwCreateFile;
g_pmdlSystemCall: PMDL;
MappedSystemCallTable: Pointer;
lpKeServiceDescriptorTable: PServiceDescriptorEntry;
function GetImportFunAddr(lpImportAddr: Pointer): Pointer; stdcall;
begin
Result := PPointer(PPointer(Cardinal(lpImportAddr) + 2)^)^;
end;
function SystemServiceName(AFunc: Pointer): PLONG; stdcall;
begin
Result := PLONG(Cardinal(lpKeServiceDescriptorTable^.ServiceTableBase) + (SizeOf(ULONG)
* PULONG(ULONG(AFunc) + 1)^));
end;
function NewZwCreateFile(FileHandle: PHANDLE; DesiredAccess: ACCESS_MASK;
ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIO_STATUS_BLOCK;
AllocationSize: PLARGE_INTEGER; FileAttributes: ULONG; ShareAccess: ULONG;
CreateDisposition: ULONG; CreateOptions: ULONG; EaBuffer: PVOID;
EaLength: ULONG): NTSTATUS; stdcall;
begin
DbgPrint('NewZwCreateFile enter ...');
Result := o_ZwCreateFile(FileHandle, DesiredAccess, ObjectAttributes,
IoStatusBlock, AllocationSize, FileAttributes, ShareAccess,
CreateDisposition, CreateOptions, EaBuffer, EaLength);
DbgPrint('NewZw Leave.');
end;
procedure OnUnload(pDriverObject: PDRIVER_OBJECT); stdcall;
begin
DbgPrint('ROOTKIT: OnUnload called'#13#10);
InterlockedExchange(SystemServiceName(GetImportFunAddr(@ZwCreateFile)),
LONG(@o_ZwCreateFile));
if g_pmdlSystemCall <> nil then
begin
MmUnmapLockedPages(MappedSystemCallTable, g_pmdlSystemCall);
IoFreeMdl(g_pmdlSystemCall);
end;
end;
function _DriverEntry(pDriverObject: PDRIVER_OBJECT;
pusRegistryPath: PUNICODE_STRING): NTSTATUS;stdcall;
begin
lpKeServiceDescriptorTable := GetImportFunAddr(@KeServiceDescriptorTable);
pDriverObject^.DriverUnload := @OnUnload;
DbgPrint('ROOTKIT: load called'#13#10);
m_UserTime.QuadPart := 0;
m_KernelTime.QuadPart := 0;
o_ZwCreateFile :=
TfnZwCreateFile(SystemServiceName(GetImportFunAddr(@ZwCreateFile)));
g_pmdlSystemCall := MmCreateMdl(nil, lpKeServiceDescriptorTable^.ServiceTableBase,
lpKeServiceDescriptorTable^.NumberOfServices * 4);
if g_pmdlSystemCall = nil then
begin
Result := STATUS_UNSUCCESSFUL;
Exit;
end;
MmBuildMdlForNonPagedPool(g_pmdlSystemCall);
g_pmdlSystemCall^.MdlFlags := g_pmdlSystemCall^.MdlFlags or MDL_MAPPED_TO_SYSTEM_VA;
MappedSystemCallTable := MmMapLockedPages(g_pmdlSystemCall, KernelMode);
o_ZwCreateFile :=
TfnZwCreateFile(InterlockedExchange(SystemServiceName(GetImportFunAddr(@ZwCreateFile)),
LONG(@NewZwCreateFile)));
Result := STATUS_SUCCESS;
end;
end.
على عكسي :frusty: لدا أعدة مراجعه الموضوع, هل من الممكن :
الداكرة المخصصة لـ SSDT داكرة للقراءة فقط , و نحن نريد التغير في مسار الإستدعاء :crazy:؟؟.
21-02-2010, 10:31 AM
و عليكم السلام و رحمة الله
العمليات:
- انتاج الدرايفر - ناجحة.
- تسجيل، تحميل، الغاء التحميل و الغاء التسجيل - ناجحة.
- Hook لدالة ZwCreateFile - ناجحة
![[صورة: 87208626.jpg]](http://img46.imageshack.us/img46/7968/87208626.jpg)
![[صورة: 80603985.jpg]](http://img25.imageshack.us/img25/2226/80603985.jpg)
![[صورة: 60224788.jpg]](http://img52.imageshack.us/img52/9370/60224788.jpg)
حمل آخر اصدار للــ Kit من الموقع الرسمي ثم حاول من جديد، انتبه فقط لمسارات MakeFile التي يجب ان توجهك الى الــ Kit الجديدة و ليس مسار الــ Kit التي عندك...
كيفية التعامل مع المرفق:
المرفق يحتوي على : ملف مصدري -الذي وضعته في مشاركتك-، الدرايفر المنتج عندي و ملف Object هذا الأخير له دور آخر...
1- حاول تسجيل و تحميل الدرايفر المرفق.
2- ضع ملف Object بجانب الملف المصدري و قم بعمل درايفر جديد في جهازك، عملية الانتاج ستأخذ ملف Object المرفق لبناء الدرايفر دون استعمال الذي في جهازك.
جرب هذه العمليات قبل ان تستعمل الــ Kit الموجودة في الموقع الرسمي، و اخبرني...
إقتباس :السؤال هنا أن صاحب الموضوع و المشاركين نجحو في تشغيله دون bsodاخذت السورس الذي و ضعته اخي TF6M و انتج عندي درايفر يعمل بدون مشاكل. تمت التجربة على Xp SP2 و SP3.
العمليات:
- انتاج الدرايفر - ناجحة.
- تسجيل، تحميل، الغاء التحميل و الغاء التسجيل - ناجحة.
- Hook لدالة ZwCreateFile - ناجحة
![[صورة: 87208626.jpg]](http://img46.imageshack.us/img46/7968/87208626.jpg)
![[صورة: 80603985.jpg]](http://img25.imageshack.us/img25/2226/80603985.jpg)
![[صورة: 60224788.jpg]](http://img52.imageshack.us/img52/9370/60224788.jpg)
إقتباس :على عكسياظن ان المشكل سببه الــ Kit التي تستعمل في انتاج الدرايفر !
حمل آخر اصدار للــ Kit من الموقع الرسمي ثم حاول من جديد، انتبه فقط لمسارات MakeFile التي يجب ان توجهك الى الــ Kit الجديدة و ليس مسار الــ Kit التي عندك...
كيفية التعامل مع المرفق:
المرفق يحتوي على : ملف مصدري -الذي وضعته في مشاركتك-، الدرايفر المنتج عندي و ملف Object هذا الأخير له دور آخر...
1- حاول تسجيل و تحميل الدرايفر المرفق.
2- ضع ملف Object بجانب الملف المصدري و قم بعمل درايفر جديد في جهازك، عملية الانتاج ستأخذ ملف Object المرفق لبناء الدرايفر دون استعمال الذي في جهازك.
جرب هذه العمليات قبل ان تستعمل الــ Kit الموجودة في الموقع الرسمي، و اخبرني...
إقتباس :الداكرة المخصصة لـ SSDT داكرة للقراءة فقط , و نحن نريد التغير في مسار الإستدعاء ؟؟بخصوص هذا التعجب سنجيب عليه ان شاء الله في آخر مراحل اكتمال المشروع، الآن يجب ان ننتهي من معالجة الأخطاء الأولية الخاصة بكتابة الأوامر و غيرها...
21-02-2010, 11:11 PM
بارك الله فيك أستاد
سأجرب و أظع النتيجة !! .
سؤال تاني خارج عن الموضوع لكن أحتاجه :
هنا أقع في Bsod لمادا لأني لم أعرف كيف أظيف '\??\' للمسار الممر من الـ UserMode
هل من طريقة لدمج '\??\' مع المسار آليا .
سأجرب و أظع النتيجة !! .
سؤال تاني خارج عن الموضوع لكن أحتاجه :
PHP كود :
unit ZwDeleteFileFromRing3;
interface
uses nt_status, ntoskrnl, macros;
function _DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;
implementation
var
DeviceName, SymbolicLinkName: UNICODE_STRING;
//********************************************************************************//
Function Example_IsStringTerminated(pString:PAnsiChar; uiLength: ULONG):Boolean; stdCall;
var
bStringIsTerminated:Boolean;
uiIndex:ULONG;
begin
bStringIsTerminated:= False;
uiIndex := 0; { here, uiIndex must be initialized! }
while(uiIndex < uiLength) and (bStringIsTerminated = False) do
begin
if pString[uiIndex] = #0 then
bStringIsTerminated := True
else
Inc(uiIndex);
end;
Result:= bStringIsTerminated;
end;
function MmGetSystemAddressForMdlSafe(MDL: PMDL; PRIORITY: DWORD): PVOID;
begin
if ((MDL^.MdlFlags and (MDL_MAPPED_TO_SYSTEM_VA or MDL_SOURCE_IS_NONPAGED_POOL)) <> 0) then
Result := MDL^.MappedSystemVa
else
Result := MmMapLockedPagesSpecifyCache(MDL, KernelMode, MmCached, nil, 0, PRIORITY);
end;
//********************************************************************************//
procedure DriverUnload(DriverObject: PDriverObject); stdcall;
begin
IoDeleteSymbolicLink(@SymbolicLinkName);
IoDeleteDevice(DriverObject^.DeviceObject);
DbgPrint('Driver :: Unloaded');
end;
function CreateCloseDispatch(const DeviceObject : PDEVICE_OBJECT;
const Irp : PIRP) : NTSTATUS; stdcall;
begin
DbgPrint('DirectIO: CreateDispatch'#13#10);
Irp^.IoStatus.Status:= STATUS_SUCCESS;
Irp^.IoStatus.Information:= 0;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
Result:=STATUS_SUCCESS;
end;
Procedure DeleteFileReq (pWDB: pwidechar);
Var
UNICODESTRING: UNICODE_STRING;
obj: OBJECT_ATTRIBUTES;
Rslt: NTSTATUS;
Begin
RtlInitUnicodeString(UNICODESTRING,pWDB);
InitializeObjectAttributes(obj, @UNICODESTRING, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, 0, nil);
Rslt := ZwDeleteFile(@obj);
if Rslt = STATUS_SUCCESS then
begin
DbgPrint('File deleted sucessfully - Result:0x%.8X', Rslt);
end else
begin
DbgPrint('Fail to delete file - Result:0x%.8X', Rslt);
DbgPrint('Object name :%wZ', obj.ObjectName);
end;
End;
function WriteDispatch(DeviceObject: PDEVICE_OBJECT;Irp: PIRP):NTSTATUS;stdcall;
var
pIoStackIrp :PIO_STACK_LOCATION ;
pWriteDataBuffer: PAnsiChar ;
begin
DbgPrint('DirectIO: WriteDispatch'#13#10);
pWriteDataBuffer := nil;
pIoStackIrp := IoGetCurrentIrpStackLocation(Irp);
if pIoStackIrp <> nil then
begin
if Irp^.MdlAddress <> nil then
pWriteDataBuffer:= MmGetSystemAddressForMdlSafe(Irp^.MdlAddress, NormalPagePriority)
else
pWriteDataBuffer := Irp^.UserBuffer;
if pWriteDataBuffer <> nil then
if Example_IsStringTerminated(pWriteDataBuffer,
pIoStackIrp^.Parameters.Write.Length) then
Begin
DbgPrint('File Req To Deleted ? : %s'#13#10, pWriteDataBuffer);
DeleteFileReq (PwideChar('\??\' + pWriteDataBuffer));
End;
end;
Irp^.IoStatus.Status:= STATUS_SUCCESS;
Irp^.IoStatus.Information:= 0;
IoCompleteRequest(IRP,IO_NO_INCREMENT);
Result:=STATUS_SUCCESS;
end;
function _DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;
var
pDeviceObject: TDeviceObject;
begin
DbgPrint('Driver :: Loaded'#13#10);
RtlInitUnicodeString(DeviceName, '\Device\ZwDeleteFileFromRing3');
RtlInitUnicodeString(SymbolicLinkName, '\??\DirectIO');
Result:=IoCreateDevice(DriverObject, 0, @DeviceName,
FILE_DEVICE_UNKNOWN,0, False, pDeviceObject);
if Result = STATUS_SUCCESS then
begin
if (IoCreateSymbolicLink(@SymbolicLinkName, @DeviceName) = STATUS_SUCCESS) then
begin
DriverObject^.MajorFunction[IRP_MJ_CREATE] := @CreateCloseDispatch;
DriverObject^.MajorFunction[IRP_MJ_CLOSE] := @CreateCloseDispatch;
DriverObject^.MajorFunction[IRP_MJ_WRITE] := @WriteDispatch;
DriverObject^.DriverUnload := @DriverUnload;
end else
begin
DbgPrint('IoCreateSymbolicLink fail!'#13#10);
IoDeleteDevice(@pDeviceObject);
end;
end else
DbgPrint('IoCreateDevice Fail!'#13#10);
result := STATUS_SUCCESS;
end;
end.
هنا أقع في Bsod لمادا لأني لم أعرف كيف أظيف '\??\' للمسار الممر من الـ UserMode
هل من طريقة لدمج '\??\' مع المسار آليا .
22-02-2010, 01:29 PM
STRELITZIA تم حل المشكلة , ببساطة جربته في Real M
عادي لكن عند تحميله في الـ Virtual Machine أتحصل على Bsod .
عادي لكن عند تحميله في الـ Virtual Machine أتحصل على Bsod .
22-02-2010, 03:35 PM
إقتباس :RtlInitUnicodeString(DeviceName, 'DeviceZwDeleteFileFromRing3');اخي TF6M في المشاركة رقم 25 هل تاكدت من كتابة الأوامر ام هي مشكلة في النسخ و اللصق في المشاركة ؟
RtlInitUnicodeString(SymbolicLinkName, '??DirectIO');
كاتبة المسارات خاطئة...
إقتباس :DbgPrint('IoCreateDevice Fail!#13#10);هنا ايضا تنقصك نقطة لتحديد النص...
إقتباس :STRELITZIA تم حل المشكلة , ببساطة جربته في Real Mعلى الــ VMWare لا مشكل..
عادي لكن عند تحميله في الـ Virtual Machine أتحصل على Bsod .
اذا كنت تستعمل Virtual PC فالقي به في سله المحذوفات...
22-02-2010, 04:25 PM
1- لا قمت بكتابتها .. المشكل كما قلت لك لم أعرف كيف أظيف '\??\' للمسار الممر من الـ UserMode
فهو دريفر بسيط يقوم بحدف الملف الدي نحدده من الـ Kernel ؟؟ .
2- أنا أستعمل VMWare لم أنجح في تحميل الدريفر فيه نفس الدريفرالدي قمت أنت بإرفاقه.
فهو دريفر بسيط يقوم بحدف الملف الدي نحدده من الـ Kernel ؟؟ .
2- أنا أستعمل VMWare لم أنجح في تحميل الدريفر فيه نفس الدريفرالدي قمت أنت بإرفاقه.
22-02-2010, 04:55 PM
إقتباس : لا قمت بكتابتهاانا لا اقصد انك الم تكتبها انت، الذي اقصده هو حين تضع كود -نسخ و لصق- في المشاركة بصيغة php تحذف بعض الرموز... مثل هنا:
كود :
RtlInitUnicodeString(DeviceName, 'DeviceZwDeleteFileFromRing3');
RtlInitUnicodeString(SymbolicLinkName, '??DirectIO');
RtlInitUnicodeString(DeviceName, 'Device[color=red]\[/color]ZwDeleteFileFromRing3');
RtlInitUnicodeString(SymbolicLinkName, '[color=Red]\[/color]??[color=red]\[/color]DirectIO');ارفق نسخة من المشروع مع ملفات الدوال التي تستدعيها لنستطيع التجربة...
22-02-2010, 05:09 PM
إقتباس :اظن ان المشكل سببه الــ Kit التي تستعمل في انتاج الدرايفر !هذا الحل الذي اقترحته عليك في المشاركة السابقة...
حمل آخر اصدار للــ Kit من الموقع الرسمي ثم حاول من جديد، انتبه فقط لمسارات MakeFile التي يجب ان توجهك الى الــ Kit الجديدة و ليس مسار الــ Kit التي عندك...
إقتباس :تم حل المشكلة , ببساطة جربته في Real Mو هذا هو ردك هنا...
عادي لكن عند تحميله في الـ Virtual Machine أتحصل على Bsod .
إقتباس :mickeylan Thank you for your interest !و هذا ردك لنفس السؤال الذي طرحته في منتدى صاحب الــ Kit.
i fixed the problem , it just"Kmdkit" UpDate , Because I used old Version !
ايهما الصحيح ؟؟؟؟؟