今天看书,买了好久的好书《Windows核心编程》。看到内核对象,3.3.4 节讲“终端服务器的名字空间”,内容是说:如果存在一个可供内核对象使用的全局名字空间,就意味着它可以供所有的客户程序会话访问。Windows中就有这样的全局名字空间:"Global\" ,将"Global\"置于对象名前面,就可以使命名对象进入全局名字空间。你是否想到什么呢?

为了跨域进程边界来共享内核对象,微点无非就是那么几种办法,开始我以为用的是:可继承句柄或命名对象的方法。后来反了一下微点的主程序:MPStart.exe,发现貌似不是这样,当我看到下面的东西,我很坚定的相信微点用的是上面提到的全局名字空间的方法。哈哈!

代码:
.data:00408060 ; char Name[]   
.data:00408060 Name            db 'Global\MPMon_6934D571-115B-4830-AC5C-02A0D08179C5',0   
  
  
sub_401170 proc near   
push    esi   
push    edi   
xor     edi, edi   
push    offset Name     ; "Global\\MPMon_6934D571-115B-4830-AC5C-02"...   
push    edi             ; bInitialState   
push    edi             ; bManualReset   
push    edi             ; lpEventAttributes   
call    ds:CreateEventA   
mov     esi, eax   
call    ds:GetLastError   
cmp     eax, 0B7h   
jnz     short loc_401196   
--------------------------------------------------------------------------------------------   
  
.data:004080A4 ; char aGlobalRebootev[]   
.data:004080A4 aGlobalRebootev db 'Global\REBOOTEVENT_6934D571-115B-4830-AC5C-02A0D08179C5',0   
  
  
loc_401875:   
push    esi   
push    edi   
xor     edi, edi   
push    offset aGlobalRebootev ; "Global\\REBOOTEVENT_6934D571-115B-4830-A"...   
push    1               ; bInitialState   
lea     edx, [esp+20h+EventAttributes]   
push    edi             ; bManualReset   
push    edx             ; lpEventAttributes   
call    ds:CreateEventA   
mov     esi, eax   
test    esi, esi   
jz      short loc_4018AB  
看到上面的东西,我的坏心眼出来啦!我们是不是可以在微点启动之前,或者微点没有启动的状态下,利用CreateEvent函数先微点一步,创建这个'Global\MPMon_6934D571-115B-4830-AC5C-02A0D08179C5'标识的内核对象,这样我估计微点八成是起不来了。

我写了一个小Demo,测试了一下,发现果然不出我所料,我先把微点关掉,然后运行我的demo:




这时候,你再去启动微点,微点是绝对启动不起来的,除非把我的程序先退出掉,或者释放掉上面创建的那个内核对象。哈哈!

当然了,大家会说,你这是一泡屎,人家微点就不退出,你根本没机会!不一定吧,我要是写一个程序一直监视微点活着没,如果发现微点没在,我就赶紧创建上面那个内核对象,我看微点怎么办,要知道微点总会自动升级的,而且有时候自动升级完成后,会重启,这中间有大概3秒左右时间吧,够我创建一个内核对象了吧!哈哈!顺便说一下,我个人认为今后这样的智能木马才是大势所趋,那些野蛮的木马就是一泡屎!

好了就写到这里,声明下:本Demo没有恶意,只是学习、测试而已!

希望微点重视一下,我个人不推荐使用全局名字空间,而推荐使用可继承句柄的方法来在进程间共享内核对象。

Demo及源码下载:
利用CreateEvent函数不让微点启动.rar