samedi 22 mars 2008

C4lim3r0.

« YOU FAILED, PLEASE RESTART THE ENGINE ».


Bonjour à tous, je vais aujourd'hui vous parlez d'une feature que microsoft nous met à disposition.

Il s'agit des « minifilters ».

Un minifilter permet de crée un Filter Device Object (FiDO) beacoup plus facilement. En effet cette fois ci c’est driver natif de Windows, fltmgr.sys, qui va se charger de placer un FiDO sur les devices qui nous intéressent. Lors de la création d’un minifilter les devices du driver fltmgr.sys vont se placer sur les différents devices filesystem puis faire passer les requêtes et résultats des IRP de ces devices à notre driver sous une forme plus aisément manipulable.

On peut donc choisir sur quels types d'IRPs opérer, sur quel device nous allons nous attachés. Tous le reste sera gérer et orchestrer par le FilterManager (FltMgr). C'est bien beau … mais trop pour être vrai !

Premièrement le minifilter doit s'installer par le biais d'un fichier .inf, et il est exécuté sous forme de service à cause du FilterManager, pas très furtif tout ca …


L'aventure est tout de même séduisante, une nouvelle feature à expérimenter, nous pourrions l'utilisé afin de cacher un dossier par exemple.Mais cela fais deux semaines que j'ai travaillé en me fixant ce but, et je dois l'avouer j'ai lamentablement échoué dans ma besogne. Je me suis donc rediriger vers un objectif plus simple.


Il s'agit d'empêcher l'accès à un dossier lorsque l'on va double cliquez sur le dossier dans l'explorer par exemple. Je compte donc sur vous pour exploitez ce petit article et allez plus loin dans l'utilisation de ce minifilter.

Passons par dessus, les échecs sont censés faire avancer ..

« Wait and see.. ».

J'ai décidé donc de programmer un file system minifilter.

Je vous expose la technique utilisé :

  • Nous créons le fichier .inf permettant d'installer notre minifilter. (Pour cela je vous laisse vous documentez sur la msdn et cie)

  • Notre driver doit s'enregistrer auprès du FilterManager par le biais de la fonction FltRegisterFilter().

L'on doit donc remplir les structures FLT_REGISTRATION :


typedef struct _FLT_REGISTRATION {

USHORT Size;

USHORT Version;

FLT_REGISTRATION_FLAGS Flags;

CONST FLT_CONTEXT_REGISTRATION *ContextRegistration;

CONST FLT_OPERATION_REGISTRATION *OperationRegistration;

PFLT_FILTER_UNLOAD_CALLBACK FilterUnloadCallback;

PFLT_INSTANCE_SETUP_CALLBACK InstanceSetupCallback;

PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardownCallback;

PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStartCallback;

PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownCompleteCallback;

PFLT_GENERATE_FILE_NAME GenerateFileNameCallback;

PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponentCallback;

PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanupCallback;

#if FLT_MGR_LONGHORN

PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback;

PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback;

#endif // FLT_MGR_LONGHORN

} FLT_REGISTRATION, *PFLT_REGISTRATION;


ainsi que FLT_OPERATION_REGISTRATION :


typedef struct _FLT_OPERATION_REGISTRATION {

UCHAR MajorFunction;

FLT_OPERATION_REGISTRATION_FLAGS Flags;

PFLT_PRE_OPERATION_CALLBACK PreOperation;

PFLT_POST_OPERATION_CALLBACK PostOperation;

PVOID Reserved1;

} FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;


A présent il nous faut élaborer les fonctions handler par la structure FLT_OPERATION_REGISTRATION.

Je vous laisse méditer le code pour cela.


Trip in da Minifilter.


On va tenter de savoir comment fonctionne un peu plus cette feature.


kd> !drvobj \FileSystem\C4lim3r0

Driver object (8152e670) is for:

\FileSystem\C4lim3r0

Driver Extension List: (id , addr)


Device Object list:


kd> !drvobj \FileSystem\FltMgr

Driver object (8179b428) is for:

\FileSystem\FltMgr

Driver Extension List: (id , addr)


Device Object list:

8148ceb0 8148d220 8148d390 8148d4c8

8148d748 8148dcc0 8179aa60 8179af18


kd> !devobj 8148ceb0

Device object (8148ceb0) is for:

\FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000003 Flags 00000010

DevExt 8148cf68 DevObjExt 8148cfd0

ExtensionFlags (0000000000)

AttachedTo (Lower) 817eb0d8 \FileSystem\RAW

Device queue is not busy.


kd> !devobj 8148d220

Device object (8148d220) is for:

\FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000008 Flags 00000010

DevExt 8148d2d8 DevObjExt 8148d340

ExtensionFlags (0000000000)

AttachedTo (Lower) 817eb1f0 \FileSystem\RAW

Device queue is not busy.


kd> !devobj 8148d390

Device object (8148d390) is for:

\FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000008 Flags 00000000

DevExt 8148d448 DevObjExt 8148d478

ExtensionFlags (0000000000)

AttachedTo (Lower) 817307e8 \FileSystem\sr

Device queue is not busy.


kd> !devobj 8148d4c8

Device object (8148d4c8) is for:

\FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000008 Flags 00000000

DevExt 8148d580 DevObjExt 8148d5d8

ExtensionFlags (0000000000)

AttachedTo (Lower) 817619b8 \FileSystem\sr

Device queue is not busy.


kd> !devobj 8148d748

Device object (8148d748) is for:

\FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000003 Flags 00000000

DevExt 8148d800 DevObjExt 8148d858

ExtensionFlags (0000000000)

AttachedTo (Lower) 81600140 \FileSystem\Cdfs

Device queue is not busy.


kd> !devobj 8148dcc0

Device object (8148dcc0) is for:

\FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000014 Flags 00000000

DevExt 8148dd78 DevObjExt 8148dda8

ExtensionFlags (0000000000)

AttachedTo (Lower) 8160c030 \FileSystem\MRxSmb

Device queue is not busy.


kd> !devobj 8179aa60

Device object (8179aa60) is for:

FltMgrMsg \FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000040 Flags 00000040

Dacl e12a0634 DevExt 00000000 DevObjExt 8179ab18

ExtensionFlags (0000000000)

Device queue is not busy.


kd> !devobj 8179af18

Device object (8179af18) is for:

FltMgr \FileSystem\FltMgr DriverObject 8179b428

Current Irp 00000000 RefCount 0 Type 00000008 Flags 00000040

Dacl e12b1d1c DevExt 00000000 DevObjExt 8179afd0

ExtensionFlags (0000000000)

Device queue is not busy.


Le filter manager va donc créer des FiDOs dans le but d'intercepter les IRPs destinées au driver gérant le filesystem (voir dump kd).



En parcourant le log nous voyons bien que des devices sont attachés aux autres filesystem devices.

A présent nous allons poser un breakpoint sur la routine qui gere notre IRP au niveau du driver \FileSystem\Ntfs.

Pour cela nous allons utiliser le kd et là fonction « !drvobj DriverObject [Flag]»

Je cite :


The !drvobj extension displays detailed information about a DRIVER_OBJECT.

[..]

DriverObject

Specifies the driver object. In Windows NT 4.0, this must be the hexadecimal address of the DRIVER_OBJECT structure. In Windows 2000 and later, this can be the hexadecimal address of the DRIVER_OBJECT structure or the name of the driver.


Flags

(Windows 2000 and later) Can be any combination of the following bits. (The default is 0x01.)


Bit 0 (0x1)

Causes the display to include device objects owned by the driver.


Bit 1 (0x2)

Causes the display to include entry points for the driver's dispatch routines.


Bit 2 (0x4)

Lists with detailed information the device objects owned by the driver (requires bit 0).


Nous allons donc énumérez les adresses des « dispatch routines » gérant les différentes IRPs.


kd> !drvobj \FileSystem\Ntfs 2

Driver object (817a3308) is for:

\FileSystem\Ntfs

DriverEntry: f9924184 Ntfs

DriverStartIo: 00000000

DriverUnload: 00000000

AddDevice: 00000000


Dispatch routines:

[00] IRP_MJ_CREATE f98c4c01 Ntfs+0x25c01

[01] IRP_MJ_CREATE_NAMED_PIPE 805025e4 nt!IopInvalidDeviceRequest

[02] IRP_MJ_CLOSE f98c40ea Ntfs+0x250ea

[03] IRP_MJ_READ f98a1f3b Ntfs+0x2f3b

[04] IRP_MJ_WRITE f98a0b57 Ntfs+0x1b57

[05] IRP_MJ_QUERY_INFORMATION f98c52b9 Ntfs+0x262b9

[06] IRP_MJ_SET_INFORMATION f98a2618 Ntfs+0x3618

[07] IRP_MJ_QUERY_EA f98c52b9 Ntfs+0x262b9

[08] IRP_MJ_SET_EA f98c52b9 Ntfs+0x262b9

[09] IRP_MJ_FLUSH_BUFFERS f98deec8 Ntfs+0x3fec8

[0a] IRP_MJ_QUERY_VOLUME_INFORMATION f98c5404 Ntfs+0x26404

[0b] IRP_MJ_SET_VOLUME_INFORMATION f98c5404 Ntfs+0x26404

[0c] IRP_MJ_DIRECTORY_CONTROL f98c6fbd Ntfs+0x27fbd

[0d] IRP_MJ_FILE_SYSTEM_CONTROL f98c9758 Ntfs+0x2a758

[0e] IRP_MJ_DEVICE_CONTROL f98c5404 Ntfs+0x26404

[0f] IRP_MJ_INTERNAL_DEVICE_CONTROL 805025e4 nt!IopInvalidDeviceRequest

[10] IRP_MJ_SHUTDOWN f98b35af Ntfs+0x145af

[11] IRP_MJ_LOCK_CONTROL f9918aa3 Ntfs+0x79aa3

[12] IRP_MJ_CLEANUP f98c4ab8 Ntfs+0x25ab8

[13] IRP_MJ_CREATE_MAILSLOT 805025e4 nt!IopInvalidDeviceRequest

[14] IRP_MJ_QUERY_SECURITY f98c5404 Ntfs+0x26404

[15] IRP_MJ_SET_SECURITY f98c5404 Ntfs+0x26404

[16] IRP_MJ_POWER 805025e4 nt!IopInvalidDeviceRequest

[17] IRP_MJ_SYSTEM_CONTROL 805025e4 nt!IopInvalidDeviceRequest

[18] IRP_MJ_DEVICE_CHANGE 805025e4 nt!IopInvalidDeviceRequest

[19] IRP_MJ_QUERY_QUOTA f98c52b9 Ntfs+0x262b9

[1a] IRP_MJ_SET_QUOTA f98c52b9 Ntfs+0x262b9

[1b] IRP_MJ_PNP f98e17f0 Ntfs+0x427f0


Fast I/O routines:

FastIoCheckIfPossible f98d8eda Ntfs+0x39eda

FastIoRead f98bfb57 Ntfs+0x20b57

FastIoWrite f98de448 Ntfs+0x3f448

FastIoQueryBasicInfo f98c548e Ntfs+0x2648e

FastIoQueryStandardInfo f98c3f7e Ntfs+0x24f7e

FastIoLock f98df0f2 Ntfs+0x400f2

FastIoUnlockSingle f98df1f8 Ntfs+0x401f8

FastIoUnlockAll f99186ae Ntfs+0x796ae

FastIoUnlockAllByKey f99187f3 Ntfs+0x797f3

AcquireFileForNtCreateSection f98bf83a Ntfs+0x2083a

ReleaseFileForNtCreateSection f98bf881 Ntfs+0x20881

FastIoQueryNetworkOpenInfo f9906e1d Ntfs+0x67e1d

AcquireForModWrite f98cba10 Ntfs+0x2ca10

MdlRead f9906f31 Ntfs+0x67f31

MdlReadComplete 8052bb18 nt!FsRtlMdlReadCompleteDev

PrepareMdlWrite f99072ab Ntfs+0x682ab

MdlWriteComplete 80611143 nt!FsRtlMdlWriteCompleteDev

FastIoQueryOpen f98c3db8 Ntfs+0x24db8

AcquireForCcFlush f98bf6e2 Ntfs+0x206e2

ReleaseForCcFlush f98bf708 Ntfs+0x20708


Puis poser un breakpoint afin de pouvoir regarder un peu les IRPs du type IRP_MJ_DIRECTORY_CONTROL, celle que l'on contrôle au seins de notre minifilter.


kd> bp f98c6fbd


On pose un breakpoint sur la routine de notre driver qui va corrompre le IO_STATUS_BLOCK de l'irp.


kd> bp C4lim3r0!ApresDirectoryControl


On relance la vm.

kd> g


Normalement une fois query le dossier, on devrait breakpoint sur le driver Ntfs afin de visionner le status de l'irp, et ensuite notre minifilter devrait « intercepter » celle-ci et là nous tracerons afin d'arriver jusqu'au moment où l'on va modifier le status, nous afficherons ensuite le statut.


Breakpoint 0 hit

Ntfs+0x27fbd:

f98c6fbd 684c010000 push 14Ch


Op nous y voilà, nous affichons la call stack avec kv, pour pouvoir retrouver un pointeur sur une structure IRP, n'oublions pas que le prototype d'une dispatch routine est de cette forme :


NTSTATUS DispatchRoutines(PDEVICE_OBJECT pDeviceObject,PIRP pIrp)


Nous pouvons donc retrouver ce pointeur en dernier argument pusher sur la stack.

kd> kv

ChildEBP RetAddr Args to Child

WARNING: Stack unwind information not available. Following frames may be wrong.

f7d10c7c 804e3d77 81794880 815ad818 815ad818 Ntfs+0x27fbd

f7d10cf8 8056a9ab f7d10d64 0148de30 80574dad nt!IopfCallDriver+0x31 (FPO: [0,0,0])

f7d10cb0 f995906b f7d10cd0 8150d490 00000000 nt!IopSynchronousServiceTail+0x60 (FPO: [Non-Fpo])

f7d10ce8 804e3d77 8150d490 815ad818 807112d0 fltMgr!FltGetIrpName+0x12ad

f7d10cf8 8056a9ab f7d10d64 0148de30 80574dad nt!IopfCallDriver+0x31 (FPO: [0,0,0])

f7d10d0c 80574e0a 8150d490 815ad818 815117a8 nt!IopSynchronousServiceTail+0x60 (FPO: [Non-Fpo])

f7d10d30 804df06b 00000230 00000000 00000000 nt!NtQueryDirectoryFile+0x5d (FPO: [Non-Fpo])

f7d10d30 7c91eb94 00000230 00000000 00000000 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f7d10d64)

0148e108 7c9f8afd 0148e3b0 00000000 023e5cb4 0x7c91eb94

0148e12c 7c9f8a97 0148e3b0 023e5cb4 023e5aa4 0x7c9f8afd

0148e380 7c9fa996 000400e8 00000000 0148e3b0 0x7c9f8a97

0148e5d0 7c9fa870 023f6380 023f6368 0148e5f8 0x7c9fa996

0148e5e0 7c9fab6d 023f6578 000400e8 000000e0 0x7c9fa870

0148e5f8 7c9ff03d 023f6588 000400e8 000000e0 0x7c9fab6d

0148e62c 7c9ffa3e 000400e8 0012687c 00126860 0x7c9ff03d

0148e680 7e22d8f1 00000006 00000000 00126860 0x7c9ffa3e

0148e72c 7e22ade9 0011d8f8 00126860 023e54f0 0x7e22d8f1

0148e754 75f18518 001264d4 023e54f0 001864d0 0x7e22ade9

0148e770 75f2c7ca 0011d8fc 023e54f0 001864d0 0x75f18518

0148e790 7e22b0b3 0011d8fc 023e54f0 001864d0 0x75f2c7ca


Nous avons notre pointeur utilisons la commande !irp.

kd> !irp 815ad818 1

Irp is active with 9 stacks 8 is current (= 0x815ad984)

No Mdl: No System Buffer: Thread 81593020: Irp stack trace.

Flags = 00000800

ThreadListEntry.Flink = 81593230

ThreadListEntry.Blink = 81593230

IoStatus.Status = 00000000

IoStatus.Information = 00000000

RequestorMode = 00000001

Cancel = 00

CancelIrql = 0

ApcEnvironment = 00

UserIosb = 0148de6c

UserEvent = 00000000

Overlay.AsynchronousParameters.UserApcRoutine = 00000000

Overlay.AsynchronousParameters.UserApcContext = 00000000

Overlay.AllocationSize = 00000000 - 00000000

CancelRoutine = 00000000

UserBuffer = 0148de9c

&Tail.Overlay.DeviceQueueEntry = 815ad858

Tail.Overlay.Thread = 81593020

Tail.Overlay.AuxiliaryBuffer = 814db890

Tail.Overlay.ListEntry.Flink = 00000000

Tail.Overlay.ListEntry.Blink = 00000000

Tail.Overlay.CurrentStackLocation = 815ad984

Tail.Overlay.OriginalFileObject = 815117a8

Tail.Apc = 00000000

Tail.CompletionKey = 00000000

cmd flg cl Device File Completion-Context

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

[ 0, 0] 0 0 00000000 00000000 00000000-00000000


Args: 00000000 00000000 00000000 00000000

>[ c, 1] 2 e0 81793020 815117a8 f99587de-815b9578 Success Error Cancel

\FileSystem\Ntfs fltMgr!FltGetIrpName

Args: 00000268 814db890 00000003 00000000

[ c, 1] 2 1 8150d490 815117a8 00000000-00000000 pending

\FileSystem\FltMgr

Args: 00000268 814db890 00000003 00000000



Nous avons bien un STATUS_SUCCESS dans le IoStatus.status.

On relance le kd pour breakpoint sur notre driver.


kd> g

Breakpoint 1 hit

C4lim3r0!ApresDirectoryControl:

fa161490 8bff mov edi,edi

kd> p

C4lim3r0!ApresDirectoryControl+0x8:

fa161498 68b01516fa push offset C4lim3r0! ?? ::FNODOBFM::`string' (fa1615b0)

kd> p

C4lim3r0!ApresDirectoryControl+0x17:

fa1614a7 8d4dfc lea ecx,[ebp-4]

kd> p

C4lim3r0!ApresDirectoryControl+0x29:

fa1614b9 8b45f4 mov eax,dword ptr [ebp-0Ch]

kd> p

C4lim3r0!ApresDirectoryControl+0x41:

fa1614d1 8b45fc mov eax,dword ptr [ebp-4]

kd> p
FileName : '\Device\HarddiskVolume1\C4lim3r0__.'C4lim3r0!ApresDirectoryControl+0x55:
fa1614e5 8b4d08 mov ecx,dword ptr [ebp+8]
kd> p
C4lim3r0!ApresDirectoryControl+0x5f:
fa1614ef 8b5508 mov edx,dword ptr [ebp+8]
kd> p
C4lim3r0!ApresDirectoryControl+0x69:
fa1614f9 33c0 xor eax,eax

On trace avec F10 pour arriver après la modification du status, on matte la callstack pour retrouver un pointeur sur une structure PFLT_CALLBACK_DATA.


typedef struct _FLT_CALLBACK_DATA {
FLT_CALLBACK_DATA_FLAGS Flags;
PETHREAD CONST Thread;
PFLT_IO_PARAMETER_BLOCK CONST Iopb;
IO_STATUS_BLOCK IoStatus;
struct _FLT_TAG_DATA_BUFFER *TagData;
union {
struct {
LIST_ENTRY QueueLinks;
PVOID QueueContext[2];
};
PVOID FilterContext[4];
};
KPROCESSOR_MODE RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;

typedef struct _IO_STATUS_BLOCK {
union {
NTSTATUS Status;
PVOID Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

Let's go


kd> kv
ChildEBP RetAddr Args to Child
f7d107d8 f9955ef3 815b95d4 f7d107fc 00000000 C4lim3r0!ApresDirectoryControl+0x41 (FPO: [Non-Fpo]) (CONV: stdcall) [c:\k3rn3l\c4lim3r0.c @ 79]
WARNING: Stack unwind information not available. Following frames may be wrong.
f7d10840 f9958338 005b9578 815ad987 815b9578 fltMgr!FltRequestOperationStatusCallback+0x5bd
f7d10854 f9958867 815b9578 815ad818 f7d10894 fltMgr!FltGetIrpName+0x57a
f7d10864 804e42cc 8150d490 815ad818 815b9578 fltMgr!FltGetIrpName+0xaa9
f7d10894 f989f6bb 00000000 e117ceb8 f7d10ab8 nt!IopfCompleteRequest+0xa2 (FPO: [Non-Fpo])
f7d108a4 f98c8187 f7d10b08 815ad818 00000000 Ntfs+0x6bb
f7d10ab8 f98c70e8 f7d10b08 815ad818 81793100 Ntfs+0x29187
f7d10aec f98c7053 f7d10b08 e117cd20 00000000 Ntfs+0x280e8
f7d10c64 804e3d77 81793020 815ad818 817a3728 Ntfs+0x28053
f7d10cf8 8056a9ab f7d10d64 0148de30 80574dad nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f7d10c7c 804e3d77 81794880 815ad818 815ad818 nt!IopSynchronousServiceTail+0x60 (FPO: [Non-Fpo])
f7d10cf8 8056a9ab f7d10d64 0148de30 80574dad nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f7d10cb0 f995906b f7d10cd0 8150d490 00000000 nt!IopSynchronousServiceTail+0x60 (FPO: [Non-Fpo])
f7d10ce8 804e3d77 8150d490 815ad818 807112d0 fltMgr!FltGetIrpName+0x12ad
f7d10cf8 8056a9ab f7d10d64 0148de30 80574dad nt!IopfCallDriver+0x31 (FPO: [0,0,0])
f7d10d0c 80574e0a 8150d490 815ad818 815117a8 nt!IopSynchronousServiceTail+0x60 (FPO: [Non-Fpo])
f7d10d30 804df06b 00000230 00000000 00000000 nt!NtQueryDirectoryFile+0x5d (FPO: [Non-Fpo])
f7d10d30 7c91eb94 00000230 00000000 00000000 nt!KiFastCallEntry+0xf8 (FPO: [0,0] TrapFrame @ f7d10d64)
0148e108 7c9f8afd 0148e3b0 00000000 023e5cb4 0x7c91eb94
0148e12c 7c9f8a97 0148e3b0 023e5cb4 023e5aa4 0x7c9f8afd

Nous avons notre pointeur nous allons afficher afficher la mémoire avec la commande dd.


kd> dd 815b95d4
815b95d4 00080001 81593020 815b9644 c0000055
815b95e4 00000000 00000000 00000000 00000000
815b95f4 00000000 00000000 00000001 00000800
815b9604 0002010c 815117a8 8158fe78 00000268
815b9614 814db890 00000003 00000000 0148de9c
815b9624 00000000 00000000 815b9578 8158ffbc
815b9634 815b9944 8151fea4 815b9940 00000000
815b9644 00000800 0002010c 815117a8 8158fe78
kd> bc 0
kd> bc 1
kd> bl

Compte tenu du prototype de la fonction nous pouvons constater que notre IoStatus.status est a présent « c0000055 » il a bien été modifié.



Enfin bon voilà !

C'est finis pour aujourd'hui en espérant que les logs du kd vous permettrons de faire des petites recherches c'est plutot sympathique je trouve.


Voici les liens pour les sources du minifilter :

-C4lim3r0's inf file.

-C4lim3r0.c.

Voilà bonne après midi à vous, cya.


PS: Je viens d'ajouter le site de la communauté Spirit Of Hack (SOH) dans la blogrollz, n'hésiter pas a faire un tour :).

PS2: Voici l'arrivée du repository de Geo dans la blogrollz.

En tous les cas merci à vous et bonne continuation.

Aucun commentaire: