Board logo

标题: [sbasm] 打电玩之前,简单说下微点杀毒~~ [打印本页]

作者: 点饭的百度空间     时间: 2010-5-6 20:50    标题: [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被人虐~~
作者: 风风雨雨     时间: 2010-5-7 11:58
不用微点杀毒扫描版(在我眼里这个只是一个辅助产品)
我用微点主动防御版。
作者: f8312519     时间: 2010-5-7 23:21
楼主首先要弄懂微点公司的策略
微点杀毒只是为了满足用户的需要而设计出来的.它完全是为了用来辅助微点主防的
如果有了微点主防.一个杀毒辅助还有必要弄这么强的自保吗.既然很多功能微点主防有了.何必弄到杀毒里面来.如果这样不就冲突了么!!
所以我认为微点的做法是对的.不过在介绍方面.微点应该重点还是大力推广微点主防!!
完全可以把微点杀毒免费.然后当达到相当数量的用户后就开始大力推广主防.不管是弹窗呢还是小广告呢.反正就是向用户推荐微点主防!!




欢迎光临 微点交流论坛 (http://bbs.micropoint.com.cn/) bbs.micropoint.com.cn