天天看點

JS奇淫技巧:一行指派語句,能玩出多少花樣?

JS奇淫技巧:一行指派語句,能玩出多少花樣?

今天,來做個測試,看看一行簡單的JS指派語句,有多少種寫法。

測試語句,僅三行:

var a=1;

a=2;

console.log(a);

針對第二行a=2指派,看能變多少花樣。

JS奇淫技巧:一行指派語句,能玩出多少花樣?

第一種變化、寫入到自執行函數中:

var a=1;

(function(){

a=2;

})();

console.log(a);

JS奇淫技巧:一行指派語句,能玩出多少花樣?

第二種變化、用eval執行:

var a=1;

eval(a=2);

console.log(a);

JS奇淫技巧:一行指派語句,能玩出多少花樣?

這兩種,都比較初級,小白等級的程式員也能輕松看懂。

接下來,提升一些難度。

第三種變化、變形的eval執行:

對eval中的指派語句,進行一些變化。

var a=1;

var b=["a","=",2];

eval(b[0]+b[1]+b[2]);

console.log(a);

JS奇淫技巧:一行指派語句,能玩出多少花樣?

但eval,似乎也就能玩到這個水準。下面再展示些難度更高的。

第四種變化、利用構造函數:

var a=1;

[].constructor.constructor(a=2);

console.log(a);

或:

var a=1;

[].constructor.constructor(a=2)();

console.log(a);

JS奇淫技巧:一行指派語句,能玩出多少花樣?

第五種變化、構造函數再更新:

var a=1;

var b=["a","=",2];

[].constructor.constructor(b[0]+b[1]+b[2])();

console.log(a);

如同eval執行内容變化一樣,對構造執行代碼也用數組内容拼接的方式進行變形:

JS奇淫技巧:一行指派語句,能玩出多少花樣?

第六種變化、構造函數變形:

将構造字元也放入數組中:

var a=1;

var b=["a","=",2,"constructor"];

[][b[3]][b[3]](b[0]+b[1]+b[2])();

console.log(a);

JS奇淫技巧:一行指派語句,能玩出多少花樣?

第七種變化、混淆加密:

将上面的JS代碼用JShaman進行混淆加密:

JS奇淫技巧:一行指派語句,能玩出多少花樣?

得麼混淆加密的JS代碼,這時數值也被加密:

/*Obfuscated by JShaman.com*/

var a=0x2c0f8^0x2c0f9;

var b=['a','=',0xe3b2c^0xe3b2e,'constructor'];

[][b[0xa8ddf^0xa8ddc]][b[0xb3a35^0xb3a36]](b[0x3333f^0x3333f]+b[0x84d18^0x84d19]+b[0x50958^0x5095a])();

console['log'](a);

JS奇淫技巧:一行指派語句,能玩出多少花樣?

玩這些花樣有什麼用處嗎?

當然是有的,最後得到的代碼,完全看不出是在執行a=2,指派操作被隐藏了: