阅读:1486回复:15
请教Win9x下如何Hook进程创建&销毁的信息和过程!
请各位大大不惜赐教~~
|
|
沙发#
发布于:2005-01-10 09:03
试试用PsSetCreateProcessNotifyRoutine生成一个通知事件,利用它的回调函数来通知进程的生成和销毁。
|
|
|
板凳#
发布于:2005-01-10 13:16
试试用PsSetCreateProcessNotifyRoutine生成一个通知事件,利用它的回调函数来通知进程的生成和销毁。 9x下也支持这个函数吗,你测试过了吗? |
|
|
地板#
发布于:2005-01-10 13:35
[quote]试试用PsSetCreateProcessNotifyRoutine生成一个通知事件,利用它的回调函数来通知进程的生成和销毁。 9x下也支持这个函数吗,你测试过了吗? [/quote] 我在NT/2K上用的是这个。 刚才专门查了一下,好像Ps类函数(Process Structure Routines)是专门用于NT/2K平台的,都是由NTOSKRNL输出的,所以9x下应该是行不通的。 哪位有什么其他的方法可以实现? |
|
|
地下室#
发布于:2005-01-10 13:57
nt/2k好办,主要是9x,别的思路是有的,总觉得不太好用着别扭,想看看有啥正规点的做法没.
[编辑 - 1/10/05 by mylovebaby] |
|
5楼#
发布于:2005-01-10 16:42
hook API,但不是正规方法
|
|
|
6楼#
发布于:2005-01-10 22:52
大大,ring3的办法就不用了,俺主要想了解一下9x底层的过程.
怎么资料这么少咯. |
|
7楼#
发布于:2005-01-11 11:05
[quote][quote]试试用PsSetCreateProcessNotifyRoutine生成一个通知事件,利用它的回调函数来通知进程的生成和销毁。 9x下也支持这个函数吗,你测试过了吗? [/quote] 我在NT/2K上用的是这个。 刚才专门查了一下,好像Ps类函数(Process Structure Routines)是专门用于NT/2K平台的,都是由NTOSKRNL输出的,所以9x下应该是行不通的。 哪位有什么其他的方法可以实现? [/quote] nt4 你测试了吗?(我过2天就要测试,先问问!) :D |
|
|
8楼#
发布于:2005-01-11 12:52
晕咯,就没兄弟能说一下吗
|
|
9楼#
发布于:2005-01-11 13:37
晕咯,就没兄弟能说一下吗 看看这个帖子吧,希望对你有用。 http://www.driverdevelop.com/forum/viewthread.php?tid=4899 |
|
|
10楼#
发布于:2005-01-11 23:24
9x有通知,是个IO控制,Create_Process与Destroy_Process消息,但只有PID,不知哪位兄弟有办法通过PID得到进程路径???,目前还没找到,哪们兄弟找个可要共享呀!!
|
|
11楼#
发布于:2005-01-12 08:02
我看到谁来了?
[编辑 - 1/12/05 by aasa2] |
|
|
12楼#
发布于:2005-01-12 09:40
[quote]晕咯,就没兄弟能说一下吗 看看这个帖子吧,希望对你有用。 http://www.driverdevelop.com/forum/viewthread.php?tid=4899 [/quote] 是不是可以在应用层可以获取?交互一下 |
|
|
13楼#
发布于:2005-01-12 09:46
楼上,这是VXD消息。
|
|
14楼#
发布于:2005-01-12 10:52
DWORD GetProcess(HANDLE prochandle, PCHAR ProcessName )
{ HANDLE CurProc; PVOID ring3proc; char *name; ULONG i; // // Get the ring0 process pointer. // //CurProc = (HANDLE)VWIN32_GetCurrentProcessHandle(); // // Now, map the ring3 PCB // ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(), (DWORD) (*(PDWORD) ((char *) prochandle+ 0x38)) | 0x7, 0 ); if( ring3proc == (PVOID) -1 ) { strcpy( ProcessName, "???"); } else { // copy out the process name (max 8 characters) // name = ((char *)ring3proc) + 0xF2; if( name[0] >= 'A' && name[0] < 'z' ) { strcpy( ProcessName, name ); ProcessName[8] = 0; } else { strcpy( ProcessName, "???" ); } } return 0; } VOID OnCreateProcess(DWORD ProcessToken) { char name[16]; GetProcess(ProcessToken^0x7E711D15,name); } |
|
15楼#
发布于:2005-01-13 09:58
难道就没人试试上面的代码,楼主又不着急了,这可是我试验过的代码
|
|