用vbs在 HTA 內(nèi)對(duì)腳本進(jìn)行編碼的方法
更新時(shí)間:2007年03月24日 00:00:00 作者:
問(wèn):
您好,腳本專家!如何在 HTA 內(nèi)對(duì)腳本進(jìn)行編碼?
-- LL
答:
您好,LL。您知道,剛看到這個(gè)問(wèn)題時(shí),我們就在想:“這有什么大不了的?難道不能像在 HTML 文件中那樣在 HTML 應(yīng)用程序 (HTA) 中對(duì)腳本進(jìn)行編碼嗎?”令我們大為吃驚的是,好像不能在 HTA 中對(duì)腳本進(jìn)行編碼;每次試圖這樣做時(shí),都會(huì)返回像下面這樣的錯(cuò)誤消息:
Scripting encoder object ("Scripting.Encoder") failed on C:\Scripts\test.hta
老實(shí)說(shuō),我們從未找到在 HTA 中對(duì)腳本進(jìn)行編碼的方法。不過(guò)沒(méi)關(guān)系,因?yàn)槲覀兊拇_想出了一個(gè)解決此問(wèn)題的鬼點(diǎn)子。我們一會(huì)兒就為您展示。
但是,在做之前,我們需要花點(diǎn)兒時(shí)間解釋對(duì)腳本編碼是什么意思。Microsoft 有一個(gè)實(shí)用程序,名為 Script Encoder(腳本編碼器),可將您的腳本代碼“打亂”。例如,假設(shè)您有一個(gè)類似下面的腳本:
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
假設(shè)出于某些原因,您希望人們無(wú)法閱讀腳本代碼。這是個(gè)問(wèn)題:畢竟,任何人只要有權(quán)運(yùn)行腳本,就同樣有權(quán)在記事本中打開此腳本,并且想看什么就看什么。不過(guò),同一個(gè)腳本經(jīng)“腳本編碼器”處理后,會(huì)成為下面顯示的樣子:
#@~^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==^#~@
腳本仍可正常運(yùn)行,只是任何人再想查看代碼并剽竊您的工作成果就有點(diǎn)困難了。(您說(shuō)對(duì)了:盡管如此,但它確實(shí)要比您好,腳本專家!中提到的大多數(shù)笑話更有意義)
現(xiàn)在,要記住的重要一點(diǎn)是,我們只將腳本編碼(或打亂),而絕對(duì)沒(méi)有加密。這意味著什么?這意味著編碼器會(huì)對(duì)多數(shù)人隱藏您的腳本;但是,一個(gè)掌握編碼知識(shí)或擁有從 Internet 下載的實(shí)用程序的真正鐵桿黑客,卻能破解此代碼。這尤其意味著永遠(yuǎn)不要在腳本中“隱藏”管理員密碼,也不要以為“腳本編碼器”能保證密碼不被窺探。它不會(huì)像您想的那樣,因?yàn)樗蔷幋a器而不是加密器,這絕對(duì)是有區(qū)別的。
那么,在 HTA 中對(duì)腳本編碼的問(wèn)題又怎么樣呢?好吧,我們假設(shè)您有一個(gè)類似下面所示的 HTA(我們同樣假設(shè)您已經(jīng)下載并安裝了“腳本編碼器”):
<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>
如果要對(duì)此 HTA 的 VBScript 部分編碼,首先要使用 '**Start Encode** 標(biāo)記在要編碼部分的開始處進(jìn)行標(biāo)記。換言之,<Script> 標(biāo)記需要像下面這樣,使 '**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>
從理論上來(lái)講,這樣便能通過(guò)運(yùn)行 Screnc.exe 并傳遞兩個(gè)參數(shù)(現(xiàn)有 HTA 文件 (Test.hta) 的名稱和要指定給編碼文件 (Encoded.hta) 的名稱)來(lái)對(duì)腳本編碼:
C:\Scripts>screnc test.hta encoded.hta
不幸的是,這樣做行不通。
為什么?噢,我們實(shí)在是不能確定。不過(guò),我們知道怎樣會(huì)真正行得通。我們只需將現(xiàn)有文件的擴(kuò)展名 .hta 更改為 .htm。換言之,我們只需將 Test.htm 文件重新命名。“腳本編碼器”無(wú)法處理 HTA 文件,但是處理 HTML 文件就沒(méi)有問(wèn)題了?,F(xiàn)在,我們可以使用類似下面的語(yǔ)法啟動(dòng)“腳本編碼器”:
C:\Scripts>screnc test.htm encoded.hta
這樣做確實(shí)可行嗎?別告訴我們您對(duì)腳本專家表示懷疑!編碼后的 .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>
它仍是個(gè)有效的 HTA;單擊按鈕會(huì)返回本地機(jī)器上安裝的操作系統(tǒng)的名稱和版本。但是,對(duì)于任何試圖查看代碼的人,它看上去純粹就是一些雜亂信息。(不用說(shuō),腳本專家比任何人都更了解這些雜亂信息?。?
您好,腳本專家!如何在 HTA 內(nèi)對(duì)腳本進(jìn)行編碼?
-- LL
答:
您好,LL。您知道,剛看到這個(gè)問(wèn)題時(shí),我們就在想:“這有什么大不了的?難道不能像在 HTML 文件中那樣在 HTML 應(yīng)用程序 (HTA) 中對(duì)腳本進(jìn)行編碼嗎?”令我們大為吃驚的是,好像不能在 HTA 中對(duì)腳本進(jìn)行編碼;每次試圖這樣做時(shí),都會(huì)返回像下面這樣的錯(cuò)誤消息:
Scripting encoder object ("Scripting.Encoder") failed on C:\Scripts\test.hta
老實(shí)說(shuō),我們從未找到在 HTA 中對(duì)腳本進(jìn)行編碼的方法。不過(guò)沒(méi)關(guān)系,因?yàn)槲覀兊拇_想出了一個(gè)解決此問(wèn)題的鬼點(diǎn)子。我們一會(huì)兒就為您展示。
但是,在做之前,我們需要花點(diǎn)兒時(shí)間解釋對(duì)腳本編碼是什么意思。Microsoft 有一個(gè)實(shí)用程序,名為 Script Encoder(腳本編碼器),可將您的腳本代碼“打亂”。例如,假設(shè)您有一個(gè)類似下面的腳本:
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
假設(shè)出于某些原因,您希望人們無(wú)法閱讀腳本代碼。這是個(gè)問(wèn)題:畢竟,任何人只要有權(quán)運(yùn)行腳本,就同樣有權(quán)在記事本中打開此腳本,并且想看什么就看什么。不過(guò),同一個(gè)腳本經(jīng)“腳本編碼器”處理后,會(huì)成為下面顯示的樣子:
#@~^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==^#~@
腳本仍可正常運(yùn)行,只是任何人再想查看代碼并剽竊您的工作成果就有點(diǎn)困難了。(您說(shuō)對(duì)了:盡管如此,但它確實(shí)要比您好,腳本專家!中提到的大多數(shù)笑話更有意義)
現(xiàn)在,要記住的重要一點(diǎn)是,我們只將腳本編碼(或打亂),而絕對(duì)沒(méi)有加密。這意味著什么?這意味著編碼器會(huì)對(duì)多數(shù)人隱藏您的腳本;但是,一個(gè)掌握編碼知識(shí)或擁有從 Internet 下載的實(shí)用程序的真正鐵桿黑客,卻能破解此代碼。這尤其意味著永遠(yuǎn)不要在腳本中“隱藏”管理員密碼,也不要以為“腳本編碼器”能保證密碼不被窺探。它不會(huì)像您想的那樣,因?yàn)樗蔷幋a器而不是加密器,這絕對(duì)是有區(qū)別的。
那么,在 HTA 中對(duì)腳本編碼的問(wèn)題又怎么樣呢?好吧,我們假設(shè)您有一個(gè)類似下面所示的 HTA(我們同樣假設(shè)您已經(jīng)下載并安裝了“腳本編碼器”):
<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>
如果要對(duì)此 HTA 的 VBScript 部分編碼,首先要使用 '**Start Encode** 標(biāo)記在要編碼部分的開始處進(jìn)行標(biāo)記。換言之,<Script> 標(biāo)記需要像下面這樣,使 '**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>
從理論上來(lái)講,這樣便能通過(guò)運(yùn)行 Screnc.exe 并傳遞兩個(gè)參數(shù)(現(xiàn)有 HTA 文件 (Test.hta) 的名稱和要指定給編碼文件 (Encoded.hta) 的名稱)來(lái)對(duì)腳本編碼:
C:\Scripts>screnc test.hta encoded.hta
不幸的是,這樣做行不通。
為什么?噢,我們實(shí)在是不能確定。不過(guò),我們知道怎樣會(huì)真正行得通。我們只需將現(xiàn)有文件的擴(kuò)展名 .hta 更改為 .htm。換言之,我們只需將 Test.htm 文件重新命名。“腳本編碼器”無(wú)法處理 HTA 文件,但是處理 HTML 文件就沒(méi)有問(wèn)題了?,F(xiàn)在,我們可以使用類似下面的語(yǔ)法啟動(dòng)“腳本編碼器”:
C:\Scripts>screnc test.htm encoded.hta
這樣做確實(shí)可行嗎?別告訴我們您對(duì)腳本專家表示懷疑!編碼后的 .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>
它仍是個(gè)有效的 HTA;單擊按鈕會(huì)返回本地機(jī)器上安裝的操作系統(tǒng)的名稱和版本。但是,對(duì)于任何試圖查看代碼的人,它看上去純粹就是一些雜亂信息。(不用說(shuō),腳本專家比任何人都更了解這些雜亂信息?。?
相關(guān)文章
HTANoid 用hta編寫的一個(gè)經(jīng)典的游戲
這個(gè)是外國(guó)人用hta寫的一些比較經(jīng)典的小游戲,喜歡hta的朋友看看2013-08-08NCC Tools(never code counter tools) V1.0.1發(fā)布代碼-代碼統(tǒng)計(jì)工具
NCC Tools(never code counter tools) V1.0.1發(fā)布代碼-代碼統(tǒng)計(jì)工具...2006-07-07用hta實(shí)現(xiàn)的遠(yuǎn)程桌面連接腳本
用hta實(shí)現(xiàn)的遠(yuǎn)程桌面連接效果的腳本,需要事先在hta中填好ip,端口等信息,當(dāng)然你也可以自己修改下,可以輸入ip端口的2013-08-08exe轉(zhuǎn)換16進(jìn)制的html保存的hta實(shí)現(xiàn)代碼
用下面這個(gè)hta文件來(lái)轉(zhuǎn)exe變成16進(jìn)制的html保存了。這樣也會(huì)方便一點(diǎn)。2009-07-07創(chuàng)建一個(gè)在標(biāo)題欄中沒(méi)有“關(guān)閉”按鈕的 HTA
創(chuàng)建一個(gè)在標(biāo)題欄中沒(méi)有“關(guān)閉”按鈕的 HTA...2007-03-03