यहां एक और मैन्युअल रूप से deobfuscated संस्करण है, जो अभिव्यक्ति से बाहर सभी आरंभ को अपने बयानों में बदल रहा है:
z='p="<"+"pre>"/* ,.oq#+ ,._, */;for(y in n="zw24l6k\
4e3t4jnt4qj24xh2 x/* =<,m#F^ A W###q. */42kty24wrt413n243n\
9h243pdxt41csb yz/* #K q##H######Am */43iyb6k43pk7243nm\
r24".split(4)){/* dP cpq#q##########b, */for(a in t=pars\
eInt(n[y],36)+/* p##@###YG=[#######y */(e=x=r=[]))for\
(r=!r,i=0;t[a/* d#qg `*PWo##q#######D */]>i;i+=.05)wi\
th(Math)x-= /* aem1k.com Q###KWR#### W[ */.05,0>cos(o=\
new Date/1e3/* .Q#########Md#.###OP A@ , */+x/PI)&&(e[~\
~(32*sin(o)*/* , (W#####Xx######.P^ T % */sin(.5+y/7))\
+60] =-~ r);/* #y `^TqW####P###BP */for(x=0;122>\
x;)p+=" *#"/* b. OQ####x#K */[e[x++]+e[x++\
]]||(S=("eval"/* l `X#####D , */+"(z=\'"+z.spl\
it(B = "\\\\")./* G####B" # */join(B+B).split\
(Q="\'").join(B+Q/* VQBP` */)+Q+")//m1k")[x/2\
+61*y-1]).fontcolor/* TP */(/\\w/.test(S)&&"#\
03B");document.body.innerHTML=p+=B+"\\n"}setTimeout(z)';
p = "<" + "pre>";
n = ["zw2", "l6k", "e3t", "jnt", "qj2", "xh2 x/* =<,m#F^ A W###q. */", "2kty2", "wrt", "13n2", "3n9h2", "3pdxt", "1csb yz/* #K q##H######Am */", "3iyb6k", "3pk72", "3nmr2", ""]
for (y in n) {
e = [];
x = 0;
r = true;
t = parseInt(n[y], 36) + "";
for (a in t) {
r = !r
for (i = 0; i < t[a]; i += 0.05) {
x -= 0.05;
o = new Date / 1e3 + x / Math.PI
if (Math.cos(o) < 0)
e[~~(32 * Math.sin(o) * Math.sin(0.5 + y / 7)) + 60] = -~r;
}
for (x = 0; x < 122;) {
S = "eval" + "(z='" + z.split(B = "\\").join(B + B).split(Q = "'").join(B + Q) + Q + ")//m1k"
p += " *#"[e[x++] + e[x++]] || S[x/2+61*y-1]).fontcolor(/\w/.test(S[x/2+61*y-1]) && "#03B");
}
p += B + "\n";
document.body.innerHTML = p;
}
setTimeout(z)
यहाँ होता है:
zकोड के सभी युक्त एक बहुस्तरीय स्ट्रिंग है। यह evalएड है।
- कोड के अंत में,
zपास किया जाता है setTimeout। यह requestAnimationFrameऔर की तरह काम करता हैeval एक साथ एक साथ, इसका मूल्यांकन उच्चतम संभव दर पर एक अंतराल में करता है।
- कोड ही प्रारंभ करता है
p, स्ट्रिंग बफर जिस पर HTML जोड़ा जाएगा, और n, बेस -36-एन्कोडेड संख्याओं की एक सरणी (द्वारा एक स्ट्रिंग में शामिल हो गया "4", टिप्पणियां अप्रासंगिक कचरा है जिसे माना नहीं जाता है parseInt)।
- प्रत्येक संख्या
nएक पंक्ति ( n.length == 16) को एनकोड करती है । यह अब प्रगणित है ।
- चर का एक गुच्छा आरम्भिक है, कुछ को
eसरणी शाब्दिक के रूप में प्रच्छन्न किया गया है, लेकिन उनका उपयोग किए जाने पर संख्या ( x) या बूलियन ( r) या स्ट्रिंग्स ( t) में डाला जाता है।
- संख्या में प्रत्येक अंक
tको उलट दिया जाता है, बूलियन को rप्रत्येक मोड़ पर लाया जाता है। विभिन्न कोणों के लिए x, और वर्तमान समय पर निर्भर करता है new Date / 1000(ताकि यह एक एनीमेशन देता है), सरणी eकुछ बिटवाइज़ ऑपरेटरों का उपयोग करके भरी 1जाती rहै - जब वह गलत है और उस समय सही है 2जब एस r।
- तब एक लूप छवि के 61 कॉलमों को
x=0दोहराता है, जो दोहरे चरणों में 122 से एकल अक्षरों को जोड़ता है p।
Bबैकस्लैश होने के नाते, बैकस्लैश और एपोस्ट्रोफ़्स से बचकर S, कोड को स्ट्रिंग से बनाया जाता zहै ताकि स्रोत में जो देखा जाए उसका सटीक प्रतिनिधित्व मिल सके।
- एनिमेटेड छवि बनाने के लिए प्रत्येक दो लगातार संख्याओं
eको जोड़ा जाता है और एक चरित्र तक पहुंचने के लिए उपयोग किया जाता है " *#"। यदि सूचकांकों में से एक को परिभाषित नहीं किया गया है, तो NaNसूचकांक एक अपरिभाषित चरित्र का समाधान करता है और इसके बजाय Sस्ट्रिंग से संबंधित वर्ण लिया जाता है (सूत्र की जांच करें x/2+61*y-1)। यदि वह वर्ण शब्द वर्ण होना चाहिए , तो उसे स्ट्रिंग पद्धति का उपयोग करके अलग-अलग रंग दिया जाता हैfontcolor ।
- प्रत्येक पंक्ति के बाद, अनुगामी बैकस्पेस और एक लाइनब्रेक को जोड़ा जाता है
p, और HTML स्ट्रिंग को दस्तावेज़ निकाय को सौंपा जाता है।
एक ही उदाहरण को न्यूनतम उदाहरण के लिए कैसे लिखा जा सकता है?
यहाँ एक अन्य उदाहरण है:
setInterval(z='s=("setInterval(z=\'"+\
z.replace(/[\\\\\']/g,"\\\\$&")+"\')"\
).match(/.{1,37}/g).join("\\\\\\n");d\
ocument.body.innerHTML=\"<\\pre>"+s.s\
lice(0, 175)+String( + new Date()).fo\
ntcolor("red")+s.slice(188)')
( jsfiddle.net पर डेमो )
इसमें इस तरह के एनीमेशन के लिए आवश्यक सभी प्रासंगिक चीजें हैं:
setInterval तथा Date एनीमेशन के लिए
अपने स्वयं के कोड का एक पुनर्निर्माण ( quine -like ), यहाँ में:
s = ( "setInterval(z='" // the outer invokation
+ z.replace(/[\\\']/g,"\\$&") // the escaped version
+ "\')" ) // the end of the assignment
.match(/.{1,37}/g).join("\\\n"); // chunked into lines
के माध्यम से उत्पादन document.body.innerHTMLऔर एक <pre>तत्व
- एनिमेटेड स्ट्रिंग के साथ कोड के कुछ हिस्सों को बदलना