能力值:
( LV4,RANK:50 )
|
-
-
51 楼
好家伙,,终于找到了,,,,,
|
能力值:
( LV2,RANK:10 )
|
-
-
52 楼
很黄很暴力
|
能力值:
( LV4,RANK:50 )
|
-
-
53 楼
在Win 2k SP1和SP4下GetCsrPid()函数中,找不到对象的类型为21的端口, 有谁解决这个问题了吗?分享下啊!
(在Win2k3、XP下没有问题)
//获取csrss.exe进程
ULONG GetCsrPid()
{
NTSTATUS ntStatus;
HANDLE Process, hObject;
NTSTATUS St;
ULONG CsrId = 0;
OBJECT_ATTRIBUTES obj;
CLIENT_ID cid;
POBJECT_NAME_INFORMATION ObjName;
UNICODE_STRING ApiPortName;
PSYSTEM_HANDLE_INFORMATION_EX Handles;
int i;
RtlInitUnicodeString(&ApiPortName, L"\\Windows\\ApiPort");
Handles = GetInfoTable( SystemHandleInformation );
if( Handles == NULL )
{
DbgPrint("GetCsrPid():GetInfoTable Error.\n");
return 0;
}
ObjName = ExAllocatePool( PagedPool, 0x2000 );
DbgPrint("Number of handles %d\n", Handles->NumberOfHandles);
for( i = 0; i != Handles->NumberOfHandles; i++ )
{ //打开的对象的类型是否为21
if (Handles->Information[i].ObjectTypeNumber == 21) //Port object Win2kSP1下找不到21端口
{
InitializeObjectAttributes( &obj, NULL, OBJ_KERNEL_HANDLE, NULL, NULL );
cid.UniqueProcess = (HANDLE)Handles->Information[i].ProcessId;
cid.UniqueThread = 0;
ntStatus = ZwOpenProcess(&Process, PROCESS_DUP_HANDLE, &obj, &cid);
if( NT_SUCCESS(ntStatus) )
{
ntStatus = ZwDuplicateObject( Process, (HANDLE)Handles->Information[i].Handle,
NtCurrentProcess(), &hObject, 0, 0, DUPLICATE_SAME_ACCESS);
if( NT_SUCCESS(ntStatus) )
{
ntStatus = ZwQueryObject( hObject, ObjectNameInformation, ObjName, 0x2000, NULL);
if( NT_SUCCESS(ntStatus) )
{
if (ObjName->Name.Buffer != NULL)
{
if ( wcsncmp(ApiPortName.Buffer, ObjName->Name.Buffer, 20) == 0 )
{
DbgPrint("****************************************************\n");
DbgPrint("Csrss PID:%d\n", Handles->Information[i].ProcessId);
DbgPrint("Csrss Port - %ws\n", ObjName->Name.Buffer);
DbgPrint("****************************************************\n");
CsrId = Handles->Information[i].ProcessId;
ZwClose( Process );
ZwClose( hObject );
CsrId = Handles->Information[i].ProcessId;
ExFreePool( Handles );
ExFreePool( ObjName );
return CsrId;
}
}
} else
DbgPrint("Error in Query Object\n");
ZwClose(hObject);
} else
DbgPrint("Error on duplicating object\n");
ZwClose(Process);
} else
DbgPrint("Could not open process\n");
}
}
ExFreePool( Handles );
ExFreePool( ObjName );
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
54 楼
一运行...直接蓝屏了...
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
我测试了一下,没有什么问题。我用的是XP2精简版。
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
win2k是19
|
能力值:
( LV2,RANK:10 )
|
-
-
57 楼
膜拜一下楼主
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
弱弱问一下lz在 SSDT HOOK里面经常出现下面的语句
ntStatus = ObReferenceObjectByHandle(
KeyHandle,
FILE_ANY_ACCESS,
NULL,
KernelMode,
&pObject,
NULL);
if( !NT_SUCCESS(ntStatus) )
{
ExFreePool(pUnicodeKeyName);
return ntStatus;
}
ObDereferenceObject( pObject );
//通过object得到name
ntStatus = ObQueryNameString(
pObject,
(POBJECT_NAME_INFORMATION)pUnicodeKeyName,
pUnicodeKeyName->MaximumLength,
&size);
----------------------------------------------
ObReferenceObjectByHandle 完后立马 ObDereferenceObject,这样ObQueryNameString还能查出东西吗
|
能力值:
( LV2,RANK:10 )
|
-
-
59 楼
赞!下载学习!
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
感谢共享,真不错。顶一个!!
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
膜拜完了赶紧收藏
rootkit的一定收藏
谢谢lz
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
不能吧,既然你都已经释放掉了,再引用,可能会引起蓝屏的。
|
能力值:
( LV4,RANK:50 )
|
-
-
63 楼
又被我的杀毒杀....继续路过
|
能力值:
( LV4,RANK:50 )
|
-
-
64 楼
|
能力值:
( LV4,RANK:50 )
|
-
-
65 楼
。。。我的RPWT
|
能力值:
( LV2,RANK:10 )
|
-
-
66 楼
很菜的问一下,怎么卸载你的驱动啊!!
加载后卸不了了啊!!
|
能力值:
( LV2,RANK:10 )
|
-
-
67 楼
非常谢谢楼主~
|
能力值:
( LV3,RANK:20 )
|
-
-
68 楼
看了上传的附件,对我们这些菜鸟对整体的思路很有帮助。谢谢楼主的分享精神!
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
小弟,就先学习了
|
能力值:
( LV3,RANK:30 )
|
-
-
70 楼
#define HOOK_SYSCALL(FuncName, pHookFunc, pOrigFunc ) \
pOrigFunc = (PVOID)InterlockedExchange( \
(PLONG)&MappedSystemCallTable[ SYSCALL_INDEX(FuncName) ], \
(LONG)pHookFunc)
这样影响程序的易读性
|
能力值:
( LV2,RANK:10 )
|
-
-
71 楼
进了TX公司没有?tessafe.sys是你的杰作吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
72 楼
不错,学习楼主!
|
能力值:
( LV2,RANK:10 )
|
-
-
73 楼
虽然看到的时间晚了一点,但是这对于我初学者来说,太有价值了,感谢LZ
|
能力值:
( LV2,RANK:10 )
|
-
-
74 楼
代码写的很工整, 看着舒服 .. !
赞一个 ..
|
能力值:
( LV2,RANK:10 )
|
-
-
75 楼
学习一下
|
|
|