玩玩微点之一:利用CreateEvent函数不让微点启动
今天看书,买了好久的好书——《Windows核心编程》。看到内核对象,3.3.4 节讲“终端服务器的名字空间”,内容是说:如果存在一个可供内核对象使用的全局名字空间,就意味着它可以供所有的客户程序会话访问。Windows中就有这样的全局名字空间:"Global/" ,将"Global/"置于对象名前面,就可以使命名对象进入全局名字空间。——你是否想到什么呢?
为了跨域进程边界来共享内核对象,微点无非就是那么几种办法,开始我以为用的是:可继承句柄或命名对象的方法。后来反了一下微点的主程序:MPStart.exe,发现貌似不是这样,当我看到下面的东西,我很坚定的相信微点用的是上面提到的全局名字空间的方法。哈哈!
看到上面的东西,我的坏心眼出来啦!我们是不是可以在微点启动之前,或者微点没有启动的状态下,利用CreateEvent函数先微点一步,创建这个'Global/MPMon_6934D571-115B-4830-AC5C-02A0D08179C5'标识的内核对象,这样我估计微点八成是起不来了。
我写了一个小Demo,测试了一下,发现果然不出我所料,我先把微点关掉,然后运行我的demo:
这时候,你再去启动微点,微点是绝对启动不起来的,除非把我的程序先退出掉,或者释放掉上面创建的那个内核对象。哈哈!
当然了,大家会说,你这是一泡屎,人家微点就不退出,你根本没机会!——不一定吧,我要是写一个程序一直监视微点活着没,如果发现微点没在,我就赶紧创建上面那个内核对象,我看微点怎么办,要知道微点总会自动升级的,而且有时候自动升级完成后,会重启,这中间有大概3秒左右时间吧,够我创建一个内核对象了吧!哈哈!顺便说一下,我个人认为今后这样的智能木马才是大势所趋,那些野蛮的木马就是一泡屎!
好了就写到这里,声明下:本Demo没有恶意,只是学习、测试而已!
希望微点重视一下,我个人不推荐使用全局名字空间,而推荐使用可继承句柄的方法来在进程间共享内核对象。
Demo及源码下载:
利用CreateEvent函数不让微点启动.rar
利用CreateEvent函数不让微点启动.rar
为了跨域进程边界来共享内核对象,微点无非就是那么几种办法,开始我以为用的是:可继承句柄或命名对象的方法。后来反了一下微点的主程序:MPStart.exe,发现貌似不是这样,当我看到下面的东西,我很坚定的相信微点用的是上面提到的全局名字空间的方法。哈哈!
Copy code
.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
利用CreateEvent函数不让微点启动.rar