能力值:
( LV2,RANK:10 )
2 楼
內核方面完全不懂
,感謝LZ的分享精神!
能力值:
( LV2,RANK:10 )
3 楼
楼主写的很细心。。。。。。。。。
能力值:
( LV2,RANK:10 )
4 楼
楼主好像写了几篇介绍sfilter,win7下ndis filter的文章
能力值:
( LV5,RANK:60 )
5 楼
感谢楼主,写得很精练,都是一些核心代码,
不像那些人,写一堆的代码,但核心代码就那么几句的...
能力值:
( LV5,RANK:60 )
6 楼
最近写驱动,发现ObRegisterCallbacks这个总是函数调用不成功,在网上查了一下,发现使用这个函数对驱动有特殊的要求,必须使用特殊的签名才行!否则这个函数会返回0xC0000022(拒绝访问),逆向此函数可以看到以下是有关是否加签名的判断,
PAGE:00000001404AA75D call MmVerifyCallbackFunction
PAGE:00000001404AA762 cmp eax, ebx
PAGE:00000001404AA764 jz short loc_1404AA7E1
PAGE:00000001404AA766
PAGE:00000001404AA766 loc_1404AA766: ; CODE XREF: ObRegisterCallbacks+11Bj
PAGE:00000001404AA766 mov rcx, [rsi+rbp+18h]
PAGE:00000001404AA76B cmp rcx, rbx
PAGE:00000001404AA76E jz short loc_1404AA779
PAGE:00000001404AA770 call MmVerifyCallbackFunction
PAGE:00000001404AA775 cmp eax, ebx
PAGE:00000001404AA777 jz short loc_1404AA7E1
开发调试时可以将
PAGE:00000001404AA764 jz short loc_1404AA7E1
PAGE:00000001404AA76E jz short loc_1404AA779
这两行改为nop暂时使ObRegisterCallbacks调用成功,方便开发调试和暂时没签名的朋友
ObRegisterCallbacks这个函数是在Vista sp1之后的版本中添加的,可用来监控系统中对进线程句柄的操作,如打开进程、复制线程句柄等。 来自 bbs.pediy.com/showthread.php?t=140891
能力值:
( LV9,RANK:170 )
7 楼
学雄, 我告诉你,绕过MmVerifyCallbackFunction函数其实很容易的。
其实只要定义一个LDR_DATA的结构体。
typedef struct _LDR_DATA // 24 elements, 0xE0 bytes (sizeof)
{
struct _LIST_ENTRY InLoadOrderLinks; // 2 elements, 0x10 bytes (sizeof)
struct _LIST_ENTRY InMemoryOrderLinks; // 2 elements, 0x10 bytes (sizeof)
struct _LIST_ENTRY InInitializationOrderLinks; // 2 elements, 0x10 bytes (sizeof)
VOID* DllBase;
VOID* EntryPoint;
ULONG32 SizeOfImage;
UINT8 _PADDING0_[0x4];
struct _UNICODE_STRING FullDllName; // 3 elements, 0x10 bytes (sizeof)
struct _UNICODE_STRING BaseDllName; // 3 elements, 0x10 bytes (sizeof)
ULONG32 Flags;
UINT16 LoadCount;
UINT16 TlsIndex;
union
{
struct _LIST_ENTRY HashLinks;
struct
{
VOID* SectionPointer;
ULONG32 CheckSum;
UINT8 _PADDING1_[0x4];
};
};
union
{
ULONG32 TimeDateStamp;
VOID* LoadedImports;
};
struct _ACTIVATION_CONTEXT* EntryPointActivationContext;
VOID* PatchInformation;
struct _LIST_ENTRY ForwarderLinks;
struct _LIST_ENTRY ServiceTagLinks;
struct _LIST_ENTRY StaticLinks;
VOID* ContextInformation;
UINT64 OriginalBase;
union _LARGE_INTEGER LoadTime;
}LDR_DATA, *PLDR_DATA;
能力值:
( LV2,RANK:10 )
8 楼
楼主辛苦了,,顶楼主。
能力值:
( LV9,RANK:170 )
9 楼
这个代码可以立刻使用,在Win7X64系统上运行起来。
能力值:
( LV2,RANK:10 )
10 楼
这个方法是不是没有签名也可以?那怎么加载驱动呢???
能力值:
( LV9,RANK:170 )
11 楼
数字证书,签名工具,需要你自己去购买。 这个驱动程序经过正规的签名,是可以直接在64位的Win7系统上运行的。 我在帖子上,只是告诉大家怎么编写进程保护。 至于数字证书、签名工具等,你需要去购买。你如果要看实际运行的效果,可以在虚拟机系统里面,当系统一启动的时候,按F8键,进入DOS选项,然后取消数字签名。
能力值:
( LV12,RANK:210 )
12 楼
sources文件里面加入LINKER_FLAGS=/integritycheck才是王道
能力值:
( LV2,RANK:10 )
13 楼
这个保护不了吧? 任务管理器 结束进程好像是不行 但是一结束任务 就秒杀了
能力值:
( LV4,RANK:40 )
14 楼
谢谢分享,这个函数一直都不会使用
另外问下有否函数是设置ObjectAccess的
我在EAT发现三个可能有关的,msdn没描述
ObSetHandleAttributes
ObSetSecurityDescriptorInfo
ObSetSecurityObjectByPointer
直接对EPROCESS操作,似乎是Read_Only的
能力值:
( LV9,RANK:170 )
15 楼
我这里要告诉大家的是: 如何在 64位的Windows系统上保护进程,使得进程不被Windows自带的任务管理器给结束掉。
至于绕过那些专业的进程管理工具,比如:PC Hunter、Win64AST等这些64位的工具, 那还需要继续讨论和研究。
360安全卫士在Win7 x64系统下,使用的也是 ObRegisterCallbacks内核函数。
我只是告诉你方法,至于更深入细至的,比如软件之间的对抗,恶意竞争,某款软件结束其它软件的进程,这里不做讨论。
能力值:
( LV2,RANK:10 )
16 楼
没意思……在64位win8下无法保护窗体……连任务管理器的结束任务也防不了……
能力值:
( LV9,RANK:170 )
17 楼
帮自己顶一下帖子。能够让更多人看见并学习。
能力值:
( LV2,RANK:10 )
18 楼
mark ObRegisterCallbacks
微软这么做是对的,CallBack 要比hook优雅的多
能力值:
( LV9,RANK:260 )
19 楼
这个的话,可以参考msdn给的示例代码:http://code.msdn.microsoft.com/windowshardware/ObCallback-Sample-67a47841
能力值:
( LV2,RANK:10 )
20 楼
国标 到此一游
能力值:
( LV2,RANK:10 )
21 楼
MARK一下。。。
能力值:
( LV5,RANK:70 )
22 楼
能否ByPass PatchGuard ?
能力值:
( LV2,RANK:10 )
23 楼
LZ这个应该只是实现进程保护,不是ByPass PatchGuard。
PatchGuard在不断升级,ByPass PatchGuard应该有不同的方法。
建议你在GOOGLE搜索PatchGuard+系统名,比如PatchGuard WIN7、PatchGuard WIN8,应该能找到相关的资料。
能力值:
( LV2,RANK:10 )
24 楼
非常感谢楼主解决了我心中的关于64位下ssdt的疑问. 另外非常想问楼主有没有方法在win7 64位机中去隐藏进程?
能力值:
( LV2,RANK:10 )
25 楼
隐藏进程X死PG再说...