用vbs在 HTA 内对脚本进行编码的方法

问:
您好,脚本专家!如何在 HTA 内对脚本进行编码?
-- LL
答:
您好,LL。您知道,刚看到这个问题时,我们就在想:“这有什么大不了的?难道不能像在 HTML 文件中那样在 HTML 应用程序 (HTA) 中对脚本进行编码吗?”令我们大为吃惊的是,好像不能在 HTA 中对脚本进行编码;每次试图这样做时,都会返回像下面这样的错误消息:
Scripting encoder object ("Scripting.Encoder") failed on C:\Scripts\test.hta
老实说,我们从未找到在 HTA 中对脚本进行编码的方法。不过没关系,因为我们的确想出了一个解决此问题的鬼点子。我们一会儿就为您展示。
但是,在做之前,我们需要花点儿时间解释对脚本编码是什么意思。Microsoft 有一个实用程序,名为 Script Encoder(脚本编码器),可将您的脚本代码“打乱”。例如,假设您有一个类似下面的脚本:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer &  "\root\cimv2")
   Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    Msgbox objOperatingSystem.Caption & " " &   objOperatingSystem.Version
Next
假设出于某些原因,您希望人们无法阅读脚本代码。这是个问题:毕竟,任何人只要有权运行脚本,就同样有权在记事本中打开此脚本,并且想看什么就看什么。不过,同一个脚本经“脚本编码器”处理后,会成为下面显示的样子:
#@~^8AEAAA==@#@&@#@&@#@&,PP,?!8PV+OrU.n.kkW@#@&,PP,~~PkYMZG:2;D+.P{~JcJ@#@&,PP~~,P~P,~U+O,W(Ltq
UnD7k^+,'~!Yr(%+1Y`rArxsosYd)wwrP'PkOD;Wh2!Y+.~LP~J'.KWO'mb:\yJ*@#@&@#@&~P,P~~,PP,~?YP1Gsra+MlOkULUXdYh/,'~G(
L\(U+.\b^R3X+1pEDH~{@#@&~P,P~~,PP,~P,PPvEj+^+1Y~e~W
MWhPqrx2 m6a+DCObxL?HdD+hr#@#@&@#@&P,~P,P~P,P~oKDPACm4PW(%6wDmYr
xLjH/O+s~kP^G^rwn.mYrxTjH/O:k@#@&,P,~P,P~P,P~~,PHkL4K6PK8%ra+M
lOkULUXdYhR;l2ObWx~',J~J,',{@#@&P,PP,P,~P,P~P,P~~,PW(%ra+DmOrxT?H/O+h 
j+./bGx@#@&~~,PP~~,P~PgnXY@#@&P,PPAx9~?!4@#@&QYQAAA==^#~@
脚本仍可正常运行,只是任何人再想查看代码并剽窃您的工作成果就有点困难了。(您说对了:尽管如此,但它确实要比您好,脚本专家!中提到的大多数笑话更有意义)
现在,要记住的重要一点是,我们只将脚本编码(或打乱),而绝对没有加密。这意味着什么?这意味着编码器会对多数人隐藏您的脚本;但是,一个掌握编码知识或拥有从 Internet 下载的实用程序的真正铁杆黑客,却能破解此代码。这尤其意味着永远不要在脚本中“隐藏”管理员密码,也不要以为“脚本编码器”能保证密码不被窥探。它不会像您想的那样,因为它是编码器而不是加密器,这绝对是有区别的。
那么,在 HTA 中对脚本编码的问题又怎么样呢?好吧,我们假设您有一个类似下面所示的 HTA(我们同样假设您已经下载并安装了“脚本编码器”):
<head>
<title>Operating System Version</title>
<HTA:APPLICATION 
     APPLICATIONNAME="Operating System Version"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
>
</head>
<script language="VBScript">
    Sub GetOSVersion
       strComputer = "."
           Set objWMIService = GetObject("winmgmts:\\" & strComputer &  "\root\cimv2")
           Set colOperatingSystems = objWMIService.ExecQuery _
               ("Select * from Win32_OperatingSystem")
           For Each objOperatingSystem in colOperatingSystems
               Msgbox objOperatingSystem.Caption & " " & _
                   objOperatingSystem.Version
           Next
    End Sub
</script>
<body>
<input type="button" value="Operating System" name="run_button"  onClick="GetOSVersion">
</body>
如果要对此 HTA 的 VBScript 部分编码,首先要使用 '**Start Encode** 标记在要编码部分的开始处进行标记。换言之,<Script> 标记需要像下面这样,使 '**Start Encode** 恰好位于 VBScript 代码的第一行之前:
<script language="VBScript">
'**Start Encode**
    Sub GetOSVersion
       strComputer = "."
           Set objWMIService = GetObject("winmgmts:\\" & strComputer &  "\root\cimv2")
           Set colOperatingSystems = objWMIService.ExecQuery _
               ("Select * from Win32_OperatingSystem")
           For Each objOperatingSystem in colOperatingSystems
               Msgbox objOperatingSystem.Caption & " " & _
                   objOperatingSystem.Version
           Next
    End Sub
</script>
从理论上来讲,这样便能通过运行 Screnc.exe 并传递两个参数(现有 HTA 文件 (Test.hta) 的名称和要指定给编码文件 (Encoded.hta) 的名称)来对脚本编码:
C:\Scripts>screnc test.hta encoded.hta
不幸的是,这样做行不通。
为什么?噢,我们实在是不能确定。不过,我们知道怎样会真正行得通。我们只需将现有文件的扩展名 .hta 更改为 .htm。换言之,我们只需将 Test.htm 文件重新命名。“脚本编码器”无法处理 HTA 文件,但是处理 HTML 文件就没有问题了。现在,我们可以使用类似下面的语法启动“脚本编码器”:
C:\Scripts>screnc test.htm encoded.hta
这样做确实可行吗?别告诉我们您对脚本专家表示怀疑!编码后的 .hta 将类似下面这样:
<head>
<title>Operating System Version</title>
<HTA:APPLICATION 
     APPLICATIONNAME="Operating System Version"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
>
</head>
<script language="VBScript.Encode">
'**Start Encode**#@~^8AEAAA==@#@&@#@&@#@&,PP,?!8PV+OrU.n.kkW@#@&,PP,~~PkYMZG:2;D+.P{~JcJ@#@&,PP~~,P~P,~U+O,W(Ltq
UnD7k^+,'~!Yr(%+1Y`rArxsosYd)wwrP'PkOD;Wh2!Y+.~LP~J'.KWO'mb:\yJ*@#@&@#@&~P,P~~,PP,~?YP1Gsra+MlOkULUXdYh/,'~G(
L\(U+.\b^R3X+1pEDH~{@#@&~P,P~~,PP,~P,PPvEj+^+1Y~e~W
MWhPqrx2 m6a+DCObxL?HdD+hr#@#@&@#@&P,~P,P~P,P~oKDPACm4PW(%6wDmYr
xLjH/O+s~kP^G^rwn.mYrxTjH/O:k@#@&,P,~P,P~P,P~~,PHkL4K6PK8%ra+M
lOkULUXdYhR;l2ObWx~',J~J,',{@#@&P,PP,P,~P,P~P,P~~,PW(%ra+DmOrxT?H/O+h 
j+./bGx@#@&~~,PP~~,P~PgnXY@#@&P,PPAx9~?!4@#@&QYQAAA==^#~@</script>
<body>
<input type="button" value="Operating System" name="run_button"  onClick="GetOSVersion">
</body>
它仍是个有效的 HTA;单击按钮会返回本地机器上安装的操作系统的名称和版本。但是,对于任何试图查看代码的人,它看上去纯粹就是一些杂乱信息。(不用说,脚本专家比任何人都更了解这些杂乱信息!)

(0)

相关推荐

  • 用vbs在 HTA 内对脚本进行编码的方法

    问: 您好,脚本专家!如何在 HTA 内对脚本进行编码? -- LL 答: 您好,LL.您知道,刚看到这个问题时,我们就在想:"这有什么大不了的?难道不能像在 HTML 文件中那样在 HTML 应用程序 (HTA) 中对脚本进行编码吗?"令我们大为吃惊的是,好像不能在 HTA 中对脚本进行编码:每次试图这样做时,都会返回像下面这样的错误消息: Scripting encoder object ("Scripting.Encoder") failed on C:\Sc

  • Python3内置json模块编码解码方法详解

    目录 JSON简介 dumps编码 编码字典 编码列表 编码字符串 格式化输出JSON 转换关系对照表 loads解码 总结 JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,在接口数据开发和传输中非常常用. Python3中我们利用内置模块json解码和编码JSON对象.jso

  • iisvdir.vbs iis虚拟目录管理脚本使用介绍

    IIS管理器也是通过调用iisvdir.vbs来实现虚拟目录的创建和删除的.我们可以通过命令行的方式来执行iisvdir.vbs脚本 1)创建虚拟目录: cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /create [virtualRoot] Alias PhysicalPath 2)删除虚拟目录: 1cscript c:\windows\system32\iisvdir.vbs [/s

  • 在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析

    当我用defunkt/jquery-pjax载入Yii2的ActiveForm时发生一个错误,正常情况下是 ActiveForm的两个js应该先载入,而实际情况是 typeError:JQuery(...).yiiActiveForm is not a function. 在github的issues对这个问题已经讨论并得到了解决. Pjax首先通过html()执行内联的<script>,然后才通过executeScriptTags()执行带着src的<script>,所以导致找不

  • 在 HTA 中暂停脚本的方法

    问: 您好,脚本专家!如何在 HTA 中暂停脚本? -- TJ 答: 您好,TJ.您知道,从古至今,人们已经花费了巨大的时间和精力来探索生命的意义.脚本专家却从未参与其中.为什么?好吧,先不说懒,我们知道那无关紧要:就算您的确找到了生命的意义,也没人在乎它.没人想知道我们存在的理由:相反,他们 - 同您一样 - 只想知道到底如何才能暂停一个嵌入在 HTML 应用程序 (HTA) 中的脚本.那才是脚本专家为之献身的事业.  现在,如果您不熟悉 HTA,您首先想到的可能是"使用 Wscript.Sl

  • vbs查询局域网内电脑的软件和硬件列表清单

    下面的代码在windows下容易报毒大家可以放心使用 '========================================================================== ' ' Date:2009/3/19 ' Name: 查询软件和硬件列表清单 ' Author:Smileruner ' www.overmcse.com ' 不支持Win2000及WinNT ' ' 3/19,添加了网卡过滤. '===============================

  • windows脚本调试howto的方法

    如果你经常用vbs或者js写些windows脚本并且只知道用打印变量的方式来调试你的程序的话 那么你可以先去吐一下血,然后看完本文. 任何类型的windows脚本都是可以用脚本调试器来调试的,脚本调试器有几种,最简单的是 微软提供的脚本调试器,在windows2000里可以以windows组建的形式安装,xp里你可以到ms 官方网站下载.好一点的调试器,是vs带的,早在vs6的interdav就已经很好的支持了对脚本 的调试,vs.net2003和vs.net2005更不用说了,调试起脚本来非常

  • JavaScript脚本库编写的方法

    JavaScript就是所谓的客户端脚本语言,是一种在互联网浏览器(浏览器也称为Web客户端,因为它连接到Web服务器上,以下载页面)内部运行的计算机编程语言.JavaScript的工作方式很有趣.普通网页内都会插入一些JavaScript代码.当浏览器加载该页面时,浏览器的内置解释器将读取并运行它在该页面中找到的JavaScript代码. 做Web开发已经四年,或多或少积累了一些JavaScript脚本.比如,限制input只允许输入数字的脚本:敲回车自动转到下一个控件,相当于Tab键的作用一

  • asp.net实现取消页面表单内文本输入框Enter响应的方法

    本文实例讲述了asp.net实现取消页面表单内文本输入框Enter响应的方法.分享给大家供大家参考,具体如下: 很早以前开发asp.net项目的时候遇到的:在一个服务器TextBox控件上按下 Enter键,页面回发刷新一遍.后来google一下,发现这是asp.net2.0为表单处理专门设置的"Enter key"功能,关于asp.net ajax表单的enter key,你可以查看这一篇<ASP.NET基于Ajax的Enter键提交问题>.前面给出链接的两篇都是叫我们怎

  • php站内搜索关键词变亮的实现方法

    本文实例讲述了php站内搜索关键词变亮的实现方法.分享给大家供大家参考.具体分析如下: 我们这个做法是把搜索结果出来,与搜索关键词相同的替换成高亮的字, 我们会用到str_replace(你找的关键字,<带有高亮的html标签>你找的关键字,$str); 就这么容易了,好了下面我们来看一个实例吧. 先创建一个数据库:create database 'searchKey'; 再创建表,SQL建库代码如下: 复制代码 代码如下: CREATE TABLE `fangke_cc`.`search`

随机推荐