जावास्क्रिप्ट, लाइन की लंबाई 1, 960 956 928 बाइट्स
[
t
,
r
,
u
,
e
,
f
,
a
,
l
,
s
]
=
!
0
+
[
!
1
]
;
[
,
n
,
d
,
,
q
,
i
]
=
t
.
a
+
t
V
=
[
]
[
f
+
i
+
n
+
d
]
;
[
,
,
,
c
,
,
,
o
,
,
_
,
,
,
,
,
y
,
z
]
=
V
+
0
F
=
V
[
E
=
c
+
o
+
n
+
s
+
t
+
r
+
u
+
c
+
t
+
o
+
r
]
P
=
(
1
+
e
+
2
+
3
-
4
+
t
)
[
2
]
f
=
F
(
r
+
e
+
t
+
u
+
r
+
n
+
_
+
a
+
t
+
o
+
(
0
+
{
}
)
[
3
]
)
(
)
(
3
*
4
+
[
]
[
E
]
[
n
+
a
+
(
0
[
E
]
+
0
)
[
9
+
2
]
+
e
]
)
[
1
]
F
(
a
,
a
+
l
+
e
+
r
+
t
+
y
+
a
+
P
+
q
+
P
+
a
+
P
+
q
+
z
)
`
[
t
,
r
,
u
,
e
,
f
,
a
,
l
,
s
]
=
!
0
+
[
!
1
]
;
[
,
n
,
d
,
,
q
,
i
]
=
t
.
a
+
t
V
=
[
]
[
f
+
i
+
n
+
d
]
;
[
,
,
,
c
,
,
,
o
,
,
_
,
,
,
,
,
y
,
z
]
=
V
+
0
F
=
V
[
E
=
c
+
o
+
n
+
s
+
t
+
r
+
u
+
c
+
t
+
o
+
r
]
P
=
(
1
+
e
+
2
+
3
-
4
+
t
)
[
2
]
f
=
F
(
r
+
e
+
t
+
u
+
r
+
n
+
_
+
a
+
t
+
o
+
(
0
+
{
}
)
[
3
]
)
(
)
(
3
*
4
+
[
]
[
E
]
[
n
+
a
+
(
0
[
E
]
+
0
)
[
9
+
2
]
+
e
]
)
[
1
]
F
(
a
,
a
+
l
+
e
+
r
+
t
+
y
+
a
+
P
+
q
+
P
+
a
+
P
+
q
+
z
)
`
अधिक पठनीय संस्करण जो एक क्वीन के रूप में भी होता है (एक्सट्रूज़न को हटाए गए नए समाचार):
[t,r,u,e,f,a,l,s]=!0+[!1];[,n,d,,q,i]=t.a+t
V=[][f+i+n+d];[,,,c,,,o,,_,,,,,y,z]=V+0
F=V[E=c+o+n+s+t+r+u+c+t+o+r]
P=(1+e+2+3-4+t)[2]
f=F(r+e+t+u+r+n+_+a+t+o+(0+{})[3])()(3*4+[][E][n+a+(0[E]+0)[9+2]+e])[1]
F(a,a+l+e+r+t+y+a+P+q+P+a+P+q+z)`
[t,r,u,e,f,a,l,s]=!0+[!1];[,n,d,,q,i]=t.a+t
V=[][f+i+n+d];[,,,c,,,o,,_,,,,,y,z]=V+0
F=V[E=c+o+n+s+t+r+u+c+t+o+r]
P=(1+e+2+3-4+t)[2]
f=F(r+e+t+u+r+n+_+a+t+o+(0+{})[3])()(3*4+[][E][n+a+(0[E]+0)[9+2]+e])[1]
F(a,a+l+e+r+t+y+a+P+q+P+a+P+q+z)`
व्याख्या
वाह। यहाँ एक सवारी के लिए तय है, क्योंकि यह एक विश्वासघाती यात्रा है ...
मैंने एक लंबा समय बिताते हुए यह जानने की कोशिश की कि इस चुनौती को लंबाई 1 के साथ कैसे हल किया जाए - कोई बिल्ट-इन (सीधे, वैसे भी), कीवर्ड या यहां तक कि तीर के कार्य - यह महसूस करने से पहले कि यह JSF *** के साथ आसानी से संभव है , जो कर सकते हैं किसी भी मल्टी बाइट टोकन से परहेज करते हुए किसी भी जावास्क्रिप्ट कोड का मूल्यांकन करें। लेकिन एक जेएसएफ समाधान आसानी से हजारों बाइट्स लंबा होगा, यदि दसियों या सैकड़ों हजारों नहीं। शुक्र है, हम ()[]+!
अपने निपटान में सिर्फ ASCII के लिए ही सीमित नहीं हैं !
मैंने जेएसएफ के आवश्यक बिल्डिंग ब्लॉक्स को शुरू करने का फैसला किया है - जिन पात्रों को "अधिक सुविधाओं को अनलॉक करने" के लिए स्ट्रिंग्स में बनाया जा सकता है, इसलिए बोलने के लिए। हम पात्रों को प्राप्त करने के लिए सीधे तार का उपयोग नहीं कर सकते हैं, क्योंकि इसके लिए लंबाई की रेखाओं की आवश्यकता होगी। 3. इसके बजाय, हम JSF से एक चाल चोरी करते हैं, शाब्दिक से कुछ चार्ट प्राप्त कर रहे हैं जो एकल-बाइट टोकन के साथ बनाए जा सकते हैं:
JSF*** Used here Value Chars unlocked
!![] !0 true true
![] !1 false fals
[][[]] t.a undefined ndi
इनसे हम जावक का विस्तार कर सकते हैं, से शुरू करते हैं [].find
, जो एक फंक्शन ऑब्जेक्ट है। एक स्ट्रिंग को यह परिवर्तित function find() { ...
हमें पहुँच देता है c
, o
, अंतरिक्ष ( _
), और कोष्ठक ( y
और z
)। शायद इससे भी महत्वपूर्ण बात यह है कि अब हमारे पास इसका उपयोग है constructor
, Function
फ़ंक्शन - जो, ध्वनि के रूप में वैचारिक, हमें एक स्ट्रिंग का निर्माण करके, इसे पास करने Function()
और फिर उत्पन्न फ़ंक्शन को कॉल करने की क्षमता प्रदान करता है।
मुझे शायद कार्यक्रम द्वारा उपयोग की गई समग्र विधि का उल्लेख करना चाहिए। 2015 तक, जावास्क्रिप्ट में यह वास्तव में अच्छा फीचर है, जिसे " टैग किए गए टेम्प्लेट्स " कहा जाता है , जो न केवल तार में नई-नई रूपरेखाओं की अनुमति देता है, बल्कि हमें एक स्ट्रिंग शाब्दिक के साथ सीधे (एक तरह से, myFunc`abc`;
लगभग बराबर myFunc(["abc"])
) एक फ़ंक्शन को कॉल करने देता है । यदि हम फ़ंक्शन कॉल को कार्यक्रम में अंतिम चीज़ के रूप में रखते हैं, तो सामान्य संरचना इस तरह दिखाई देगी:
code;func`code;func`
सभी func
को तब अपने तर्क का उत्पादन करना होता है, उसके बाद एक बैकटिक, फिर उसके तर्क और फिर एक दूसरे बैकटिक पर। यह मानते हुए कि हमारे पास एक तर्क है a
और एक बैकटिक में संग्रहीत है f
, हम इसे कोड के साथ पूरा कर सकते हैं alert(a+f+a+f)
। हालांकि, इस समय, हम गायब हैं +
और खुद बैकटिक हैं। +
(संग्रहीत P
) मुश्किल नहीं है; हम जेएसएफ से एक और चाल चोरी करते हैं 1e23
, स्ट्रिंग का निर्माण करते हैं , एक संख्या में परिवर्तित करते हैं, फिर एक स्ट्रिंग में वापस देते हैं "1e+23"
।
बैकटिक प्राप्त करना थोड़ा अधिक जटिल है। सबसे पहले, मैंने प्राप्त करने का प्रयास किया String.fromCharCode
, लेकिन C
लगभग मुश्किल के रूप में निकला। सौभाग्य से, atob
प्राप्त करने के लिए काफी आसान है ( Function("return atob")()
, b
से उत्पन्न होता है 0+{}
, जो देता है [object Object]
) और किसी भी ASCII चार दे सकता है, अगर एक उचित जादू स्ट्रिंग पाया जाता है। एक छोटी स्क्रिप्ट मुझे दिया 12A
विकल्प, आसानी से पाया जा सकता है, जिनमें से एक के रूप में 12Array
(एक छोटा सा उत्पन्न करने के लिए, करने के लिए धन्यवाद [].constructor[n+a+m+e]
, m
में पाया जाता है 0 .constructor+0
: "function Number() { ..."
)।
अंत में, हम सब कुछ एक साथ चिपकाते हैं। हम backtick को वेरिएबल में असाइन करते हैं f
, लेकिन चूंकि हम इसे फंक्शन स्ट्रिंग में सीधे उपयोग नहीं कर सकते हैं, इसलिए हम इसके बजाय वेरिएबल q
को लेटर में सेट करते हैं f
और उसके बजाय इसका उपयोग करते हैं। यह हमारी अंतिम स्ट्रिंग बनाता है a+l+e+r+t+y+a+P+q+P+a+P+q+z
, या "alert(a+f+a+f)"
। इसके बाद हम Function()
परिणाम के लिए हमारे तैयार कोड को खिलाते हैं, और वॉइला, हमारे पास एक जावास्क्रिप्ट क्वीन है जिसमें एक से अधिक चार्ट नहीं हैं!
मेरा सिर इस समय भयानक लग रहा है, इसलिए कृपया मेरे द्वारा बताई गई किसी भी गलती या इस स्पष्टीकरण में छूट गई चीजों के बारे में पूछताछ करें, और कुछ आराम करने के बाद मैं आपके पास वापस आऊंगा ...