জাভাস্ক্রিপ্ট, লাইনের দৈর্ঘ্য 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 *** , যা করতে পারেন কোনও মাল্টি-বাইট টোকেন এড়িয়ে গিয়ে যে কোনও জাভাস্ক্রিপ্ট কোড মূল্যায়ন করুন। তবে জেএসএফের একটি সমাধান দশ হাজার বা কয়েক হাজার না হলেও সহজেই হাজার হাজার বাইট দীর্ঘ হয় long ধন্যবাদ, আমরা কেবল আমাদের কাছেই ()[]+!
ASCII এর মধ্যে সীমাবদ্ধ নই !
আমি জেএসএফ-এর প্রয়োজনীয় বিল্ডিং ব্লকগুলি গল্ফ করে শুরু করার সিদ্ধান্ত নিয়েছি — এমন চরিত্রগুলি যাতে "আরও বৈশিষ্ট্যগুলি আনলক করতে", তাই বলার জন্য স্ট্রিংয়ে তৈরি করা যায়। অক্ষরগুলি পেতে আমরা সরাসরি স্ট্রিং ব্যবহার করতে পারি না, কারণ এটির দৈর্ঘ্যের 3 লাইনের প্রয়োজন হবে So সুতরাং পরিবর্তে, আমরা জেএসএফ থেকে একটি কৌশল চুরি করি, একক-বাইট টোকেন দিয়ে তৈরি করা যেতে পারে এমন আক্ষরিক থেকে কয়েকটি অক্ষর পেয়ে:
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()
এবং তারপরে তৈরি ফাংশনটি কল করে কোড সম্পাদন করার ক্ষমতা দেয় ।
আমার সম্ভবত প্রোগ্রামটি দ্বারা ব্যবহৃত সামগ্রিক পদ্ধতিটি উল্লেখ করা উচিত। ২০১৫ সালের হিসাবে, জাভাস্ক্রিপ্টটিতে " ট্যাগড টেমপ্লেটস " নামে অভিহিত এই দুর্দান্ত বৈশিষ্ট্যটি রয়েছে যা কেবল স্ট্রিংগুলিতে অনস্কেপড নিউলাইনগুলিকেই অনুমতি দেয় না, তবে সরাসরি স্ট্রিং লিটারাল সহ একটি ফাংশনকে সরাসরি আমাদের কল করতে দেয় (একভাবে; 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]
) এবং যদি কোনও যথাযথ যাদু স্ট্রিং পাওয়া যায় তবে যে কোনও এএসসিআইআই চর দিতে পারে। একটি ছোট স্ক্রিপ্ট আমাকে দিয়েছে 12A
বিকল্প, সুবিধামত খুঁজে পাওয়া যেতে পারে যা এক হিসাবে 12Array
(ক খাটো বিট জেনারেট করতে, ধন্যবাদ [].constructor[n+a+m+e]
; m
পাওয়া যায় 0 .constructor+0
: "function Number() { ..."
)।
অবশেষে, আমরা সবকিছু একসাথে আটকে থাকি। আমরা পরিবর্তনশীল ব্যাকটিক বরাদ্দ f
, কিন্তু যেহেতু আমরা এটা ফাংশন স্ট্রিং সরাসরি ব্যবহার করতে পারবেন না, আমরা পরিবর্তে পরিবর্তনশীল সেট q
চিঠির f
এবং ব্যবহারের পরিবর্তে। এটি আমাদের চূড়ান্ত স্ট্রিং তৈরি করে a+l+e+r+t+y+a+P+q+P+a+P+q+z
, বা "alert(a+f+a+f)"
। তারপরে আমরা এটিকে Function()
ফিড করি, ফলস্বরূপ আমাদের সমাপ্ত কোডটি ফিড করি, এবং ভয়েলা, আমাদের কাছে প্রতি লাইনে এক চরের বেশি জাভাস্ক্রিপ্ট কুইন নেই!
আমার মাথাটি এই মুহুর্তে ভয়াবহ বোধ করছে, সুতরাং দয়া করে আমি যে কোনও ভুল করেছি বা এই ব্যাখ্যাটিতে আমি যে জিনিসগুলি মিস করেছি সেগুলি সম্পর্কে অনুসন্ধান করুন এবং কিছুক্ষণ বিশ্রাম নেওয়ার পরে আমি আপনার কাছে ফিরে আসব ...