জাভাস্ক্রিপ্ট এর অন্তর্নির্মিত স্ট্রিং কি কি?


147

এই প্রশ্নের একটি প্রশ্নের শিরোনামে সংক্ষিপ্ত করা কঠিন

আপডেট আমি একটি জেএসফিডাল তৈরি করেছি যা এই প্রশ্ন থেকে উত্তোলিত অক্ষরের উপর ভিত্তি করে আপনার ইনপুট থেকে একটি আবদ্ধ স্ট্রিং তৈরি করে: আপনি এটি এখানে অ্যাক্সেস করতে পারেন , বা একটি বাক্যটি সহজ হবে?

আমি সম্প্রতি এই প্রোফাইলে একটি আবশ্যক জাভাস্ক্রিপ্টের মজাদার কিছুটা দেখতে পেলাম যা দেখতে এটির মতো দেখাচ্ছে:

javascript:[[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+([]+!!-
[])[1<<1]+[/~/+{}][+!1][-~1<<1]+([]+/-/[(!!1+[])[1>>1]+(!!1
+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+([,][
~1]+[])[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+(/1/+
1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</[1]+[])[1/1.1&1]

বিস্ময়কে নষ্ট করার জন্য দুঃখিত তবে এটি মূল্যায়ন করা হলে এটি ফিরে আসে:

"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10

বিচ্ছিন্ন হয়ে যাওয়ার পরে এটি যেভাবে কাজ করে তা হ'ল ধারাবাহিক বার্তা উত্পন্ন করা এবং সেগুলির মতো চিঠিগুলি বের করে আনা ("আমি" উদাহরণ হিসাবে ব্যবহার করে):

[]+1/!1
returns
"Infinity"
then
[[]+1/!1]
creates this array:
["Infinity"]
then
[[]+1/!1][1^1]
Takes the first (1^1 == 0) element of that array
"Infinity"
finally
[[]+1/!1][1^1][1>>1]
Takes the first (1>>1 == 0) char of that string
"I"

উত্পন্ন অন্যান্য স্ট্রিংগুলির মধ্যে রয়েছে:

({}+[])       -> "[object Object]" (where the space comes from)
([]+!!-[])    -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[])  -> "undefined"

আমি "এন" এবং "[" "এর প্রতিস্থাপন খুঁজতে আগ্রহী ছিলাম এবং এটি নিয়ে এসেছি:

String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))

যা আমি 1 এবং 0 এর ব্যবহারের অনুভূতিতে অনুভব করি তবে মূল কোডটির আরও মার্জিত দিকগুলির একটি লঙ্ঘন করে যা স্ট্রিংগুলির সাথে কিছুই করার নেই বলে মনে হয়। মূল অপ্রচলিত কোডের সাথে সঙ্গতি রেখে কীভাবে "ভি" তৈরি করতে হবে তা সম্পর্কে অন্য কারও ধারণা আছে?

এখানে অনেক অতিরিক্ত তথ্য যা অনেক প্রতিভাধর জাভাস্ক্রিপ্ট প্রগ্রেমাররা এটি গভীরভাবে নিল তার পরে পাওয়া গেল

ফায়ারফক্স এই লাইনের কারণে "আমি তোমাকে একাকী করেছি" ফেরায়:

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+

[1^11<<1] এটি থেকে একটি নির্দিষ্ট চরিত্র ছাঁটাই:

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])

যা এর মূল্যায়ন করে:

"function test() {
    [native code]
}"

যা দেখে মনে হচ্ছে আমাদের "ভি" থাকতে পারে !!!

ক্রোম "আমি আপনাকে ভালোবাসি" ফিরিয়ে দেয়, কারণ একই কোডটি এটি ফেরত দেয়:

"function test() { [native code] }"

প্রশ্নটি "সত্যিকারের প্রোগ্রামিং ইস্যু" এর সাথে প্রশ্নবিদ্ধ সংযোগের জন্য বন্ধ হওয়ার আগে আমি ভেবেছিলাম যে আমি একটি সংক্ষিপ্ত সমাধান যুক্ত করব যা @ সুপ্রিজ , @ কোরি এবং @ আলফা 123 এর উপর ভিত্তি করে তৈরি হয়েছে :

alert([[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+(
[]+!!-[])[1<<1]+[/~/+{}][+!1][-~1<<1]+[([]+/-/[(
!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(
!!1+[])[1^1]])[1+(1^(11+1+1)<<1)],([]+/-/[(!!1+[
])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[
])[1^1]])[1^11<<1],([]+/-/[(!!1+[])[1>>1]+(!!1+[
])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11
+1+1)<<1]][((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<
1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1<<1<<1<<1
)+1<<1]==({}+[])[1^1])*1)+((([]+/-/[(!!1+[])[1>>
1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1
]])[(1^11<<1)-1]==({}+[])[1^1])<<1)]+([,][~1]+[]
)[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+
(/1/+1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</
[1]+[])[1/1.1&1])

কোডটির জটিলতা এবং বার্তাগুলি প্রদান করে এটি এটি প্রায় জাভাস্ক্রিপ্ট ইঞ্জিনের মতো বলছে যে আপনি এটিকে কী বিশেষ বোধ করছেন :)


9
এটি ক্রোম কনসোলে "প্রেম" বলে। i.imgur.com/rVyKMoP.png
bfavareto

2
আপনি যদি কোনও চিঠিপত্র চিঠি থেকে function test() { [native code] }সরিয়ে
ফেলেন

4
অনুক্রমে একটি অ-মান-সংজ্ঞায়িত স্ট্রিং আউটপুট কোডটি ভিত্তিবিন্দু একটি বার্তা প্রিন্ট করতে সময়সীমার কোড ব্যবহার ... আমি এই এক কল করছি উপায় খুব স্থানীয়।

2
@ আইয়ান, সত্য আমার জীবনের যে মানুষগুলিকে আমি ভালোবাসি সেগুলি যদি সত্যই আমার সম্পর্কে চিন্তা করে তবে তারা Chrome ব্যবহার করবে :)
জেসন স্পারসেক

4
এ সম্পর্কে সর্বোত্তম অংশটি হ'ল আমার পাঠ্য সম্পাদক সতর্কবাণীটি দিয়েছেন: "'!' এর বিভ্রান্তিকর ব্যবহার
জ্যাক জনসন

উত্তর:


83

প্রথমত, আমি জেসন এবং সমস্ত অবদানকারীকে সেই মজার স্নিপেটের সাথে খেলার জন্য ধন্যবাদ জানাতে চাই। আমি 14 ফেব্রুয়ারী আমার স্ত্রীর কাছে এটি পাঠানোর জন্য কোডটির টুকরোটি লিখেছি কেবল :) ল্যাপটপে কেবল ক্রোম ইনস্টল থাকা আমার ফায়ারফক্স এবং আইইতে এটি কীভাবে কাজ করে তা পরীক্ষা করার কোনও বিকল্প ছিল না। তদুপরি, আমি সত্যিই এটি আশা করি নাtoString() বিল্ট-ইন পদ্ধতিগুলির উপস্থাপনা অন্যান্য ব্রাউজারগুলিতে আলাদাভাবে দেখাবে।

এখন, আসল সমস্যাটির দিকে এগিয়ে চলুন, আসুন কোডটি অবিকল দেখি। হ্যাঁ, "v"এখানে আসল "সমস্যা" ছিল। আমি এই চিঠিটি পার্সিং [native code]স্ট্রিং ব্যতীত অন্য কোনও উপায় খুঁজে পাই না , যা কোনও অন্তর্নির্মিত পদ্ধতি থেকে নেওয়া যেতে পারে। যেহেতু আমি নিজেকে 1ব্যবহার না করে স্ট্রিং এবং সংখ্যা না থাকাতে নিজেকে সীমাবদ্ধ করে রেখেছি , তাই এমন কিছু পদ্ধতি ব্যবহার করতে হবে যার নামটিতে কেবল অক্ষর রয়েছে।

উপলভ্য অক্ষর শুরু থেকে বিদ্যমান কীওয়ার্ড এবং স্ট্রিং উপস্থাপনা, IE থেকে প্রাপ্ত করা যাবে আমরা ছিল NaN, null, undefined, Infinity, true, false, এবং "[object Object]"। তাদের মধ্যে কিছু সহজেই স্ট্রিংগুলিতে রূপান্তরিত হতে পারে, যেমন 1/!1+[]দেয় "Infinity"

আমি অ্যারে [], অবজেক্টস {}, নিয়মিত এক্সপ্রেশন /(?:)/, সংখ্যা 1.1, স্ট্রিংয়ের জন্য বিভিন্ন বিল্ট-ইন পদ্ধতিগুলি বিশ্লেষণ করেছি "1"এবং RegExpঅবজেক্টের বলা একটি সুন্দর পদ্ধতি আবিষ্কার করেছি test()। তার নাম সমস্ত উপলব্ধ অক্ষর থেকে একত্র করা যাবে, যেমন "t"এবং "e"থেকে true, এবং "s"থেকে false। আমি একটি স্ট্রিং তৈরি করেছি "test"এবং রেজেক্স আক্ষরিকের জন্য বর্গক্ষেত্র বন্ধনীর স্বরলিপি ব্যবহার করে এই পদ্ধতিটিকে সম্বোধন করেছি /-/, এই লাইনে সঠিকভাবে চিহ্নিত:

/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]]

যেমনটি আগেই আলোচনা করা হয়েছিল, এই টুকরো কোডটি ক্রোমে মূল্যায়ন করা হয়:

function test() { [native code] }

ফায়ারফক্সে হিসাবে:

function test() {
    [native code]
}

এবং আইই হিসাবে:

 function test() {     [native code] }  

(পরবর্তীকালে কীওয়ার্ডের আগে স্পেসটিতে বিশেষ মনোযোগ দিন function)

সুতরাং, আপনি স্পষ্টভাবে দেখতে পাচ্ছেন যে, আমার কোডটি উপস্থাপিত স্ট্রিং থেকে 24 তম চরিত্রটি পাচ্ছিল, যা ক্রোমে ছিল "v"(যেমন পরিকল্পনা করা হয়েছিল), তবে দুর্ভাগ্যক্রমে ফায়ারফক্স এবং আইই - "n"এবং "["যথাক্রমে।

সমস্ত ব্রাউজারে একই আউটপুট তৈরি করতে, আমি অন্যান্য উত্তরগুলিতে বর্ণিত তুলনায় আলাদা পদ্ধতির ব্যবহার করেছি । এখন পরিবর্তিত সংস্করণটি এর মতো দেখাচ্ছে:

javascript:[[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+([]+!!-
[])[1<<1]+[/~/+{}][+!1][-~1<<1]+/\[[^1]+\]/[([]+![])[1<<1<<
1]+(/|/[(1+{})[1+11>>>1]+[[]+{}][+!1][1]+([]+1/[])[1<<1>>1]
+([1<1]+[])[1+11>>>1+1]+[[!!1]+1][+[]][1-1]+([]+!!/!/)[1|1]
+(/1/[1]+[])[!1%1]+(-{}+{})[-1+1e1-1]+(1+[!!1])[1]+([]+1+{}
)[1<<1]+[!!/!!/+[]][+[]][1&1]]+/=/)[1e1+(1<<1|1)+(([]+/-/[(
!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1
]])[1^1]==+!1)]+(!![]+{})[1|1<<1]+[1+{}+1][!1+!1][(11>>1)+1
]](([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+
(!!1+[])[1^1]]))[1&.1][11>>>1]+([,][~1]+[])[1-~1]+[[]+{}][!
1.1%1][11111.1%11.1*111e11|!1]+(/1/+1/[1<1][1%1])[1^11]+[[]
,[]+{}][1<<1>>>1][1||1]+(/[<+>]/[1&1|1]+[1.1])[1/11.1&1.11]

যাইহোক, পাঠকদের কৌতূহল জানাতে আমি এর জন্য কোনও সমাধান দেব না। আমি সত্যই বিশ্বাস করি যে এটি কীভাবে কার্যকর হয় আপনি সহজেই বুঝতে পারবেন ... এবং কেউ কেউ তাদের প্রিয়কেও ক্রস-ব্রাউজার উপায়ে বিস্মিত করতে পারেন;)

পিএস তবুও অন্য একজন বাধা c

সার্বজনীন উদ্বিগ্ন সরঞ্জাম তৈরি করতে জেসনের ধারণার দ্বারা অনুপ্রাণিত হয়ে আমি আরও একটি লিখেছি। আপনি এটি জেএসবিনে খুঁজে পেতে পারেন : http://jsbin.com/amecoq/2 । এটি সংখ্যা [0-9], ছোট ল্যাটিন অক্ষর [a-z]এবং স্পেস সহ যে কোনও পাঠ্যকে অস্পষ্ট করতে পারে । স্ট্রিংয়ের দৈর্ঘ্য বেশিরভাগ ক্ষেত্রে আপনার র‌্যামের সাথে সীমাবদ্ধ (কমপক্ষে আমার উত্তরটির বডিটি সাফল্যের সাথে আবদ্ধ হয়েছিল)। আউটপুটটি ক্রোম, ফায়ারফক্স এবং আইই দ্বারা সমর্থিত।

ইঙ্গিত: উপরে উপস্থাপিতের তুলনায় সরঞ্জামটি বিভিন্ন আপত্তিজনক পদ্ধতির ব্যবহার করে।


4
"কনস্ট্রাক্টর" ... বাহ যে আশ্চর্যজনক এবং আপনি বৈধ লাইন ব্রেকগুলির সাথে সঠিক আয়তক্ষেত্রটি রেখেছিলেন। আপনি ভাল
জেসন স্পার্সকে

1
আমি একটি ওবফুসেটর তৈরি করেছি যা আপনার স্টাইলের নিয়ম মেনে স্ট্রিং তৈরি করে: jsfiddle.net/w9rFF/8
জেসন স্পারস্ক

@ জেসনস্পারস্কে এটি একটি দুর্দান্ত কৌশল ছিল! মহান কাজ! আমি এতে অবদান রাখার চেষ্টা করব।
ভিজিওএন

26

native codeপ্রশ্ন থেকে বিট কেন ব্যবহার হচ্ছে না ? এটি 'v'ক্রোম এবং ফায়ারফক্স উভয়ই দেয় :

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]>([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11+1+1)<<1]?([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]:([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11+1+1)<<1]

আইই সমর্থন করতে এবং টের্নারি অপারেটর ছাড়াই এটি সম্পাদনা করুন: এটি ক্রোম, আইই এবং এফএফে কাজ করে। একটি অ্যারে তৈরি করে এবং ==ব্রাউজার নির্ধারণ করতে ব্যবহার করে।

[([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1+(1^(11+1+1)<<1)],([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1],([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11+1+1)<<1]][((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1<<1<<1<<1)+1<<1]==({}+[])[1^1])*1)+((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1^11<<1)-1]==({}+[])[1^1])<<1)]

রিডেবল:

[
    //ie
    ([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1+(1^(11+1+1)<<1)],
    //ch
    ([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1],
    //ff
    ([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11+1+1)<<1]
]
[
    //ch?
    ((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1<<1<<1<<1)+1<<1]==({}+[])[1^1])*1)+
    //ff?
    ((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1^11<<1)-1]==({}+[])[1^1])<<1)
]

সেটা মজাদার. মূলত এটি প্রত্যাখ্যান করা হয়েছে যে "নেটিভ কোড" শব্দের স্থান ফায়ারফক্স এবং ক্রোমের মধ্যে অনুমেয় ছিল। এটি সমাধান করে তবে আইই 10 তে কাজ করে না (যেখানে এটি "i" দেয়)। তবুও আমি অবাক হই যে এই বিকল্পটি কিছু নতুন ধারণা দিতে পারে
জেসন স্পারস্কে

ধারণা মাত্র নির্বাচন করতে উভয় nএবং vএবং মাত্র বাছাই যেটা বৃহত্তম হল: str[23]>str[27]?str[23]:str[27]। অন্য কথায়, তৃতীয় অপারেটরটি কৌশল। আইই সমর্থন ([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1+(1^(11+1+1)<<1)]
করতেও

1
আপনার উত্তরটি প্রথম ছিল (মূল কোডটির স্রষ্টার চেয়ে এগিয়ে) তবে আমি অনুভব করেছি যে তাঁর উত্তরটি সবচেয়ে যুক্তিযুক্তভাবে সঠিক উত্তর হিসাবে বিবেচনা করা যেতে পারে। তবুও দুর্দান্ত কাজ (এবং ভালভাবে ভোটের জন্য 13 টি যোগ্য)
জেসন স্পারসকে

1
গৌণ নিটপিক: প্রাথমিক ও মাধ্যমিকের পরে তৃতীয় সর্বাধিক গুরুত্বপূর্ণ অপারেটর একটি তৃতীয় অপারেটর। একটি অপারেটর যা তিনটি অপারেন্ড নেয় সেগুলি তিনটি।
এরিক লিপার্ট

1
@ এরিকলিপার্ট, গাহ, আমি সঠিক শব্দটি ব্যবহার করছি তা নিশ্চিত করার জন্য এমনকি এটি গুগল করেছিলাম, তবুও আমি এখনও ভুলটি দিয়ে শেষ করেছি! ধন্যবাদ, সংশোধন।
Supr

8

এটি যতটা কাছে পেতাম ততই কাছাকাছি, দুর্ভাগ্যক্রমে এটি কল করে এই মূল ওফস্যাকশনটির সম্মেলন লঙ্ঘন করেছে unescape():

unescape((/%/+[])[1]+(/1/[1]+[])[1%1]+(+!1)+(+!1)+(1e1+(11*(1-~1)<<1)))

টিয়ারডাউন:

(/%/+[])[1]          => "%"
(/1/[1]+[])[1%1]     => "u"
(+!1)                => "0"
(+!1)                => "0"
(1e1+(11*(1-~1)<<1)) => "76"
===========================
unescape("%u0076")   => "v"

অন্যান্য ধারণা:

  1. একরকম পেতে unescape("\x76")
  2. কোনওভাবে 118কল না করে রূপান্তর করুনString.fromCharCode()
  3. এতে "অবৈধ" শব্দটি সহ একটি ব্যতিক্রম থেকে পাঠ্যটি পান

আপডেট:

আমি কোড গল্ফ খেলতে শুরু করেছি এবং এটিকে আরও খাটো করে তৈরি করেছি, অংশগুলি আরও বেশি 1এস ইত্যাদির সাথে প্রতিস্থাপন করছি etc.


আমি এটিও পছন্দ করি। আপনার নির্বাচিত একটি "সঠিক" উত্তরটি আমি কিছুটা ছিন্ন করেছি, কারণ আপনার এবং @ alpha123 এর চেহারা উভয়ই চূড়ান্তভাবে এবং চতুরতার সাথে মূল উদ্দেশ্যটি আড়াল করেছে।
জেসন স্পার্সকে

এবং আইই 10 সমর্থন চুক্তিটি সিল করেছে (দুর্দান্ত উত্তরের জন্য আন্তরিক ক্ষমা @ আলফা 123 সহ)
জেসন স্পারস্ক

আপনি যে প্রতিস্থাপন করতে পারে '%'সঙ্গে (/%/+[[]+1/!1])[1]কোনো কোট সরিয়ে ফেলা হয়। রেফারেন্সটি গোপন করতে আমি l=unescape;ছোট হাতের সাহায্যে যুক্তও করেছি । এটি মজাদার হয়েছে :)Lunescape
জেসন স্পারস্কে

@JasonSperske: এমনকি খাটো:(/%/+[])[1]
Cᴏʀʏ

1
অথবা আপনি আপনার পরিবর্তনশীলটির নাম রাখতে পারেন $1;
সি

4

এন / ভি তৈরি করে এমন অংশটি এখানে:

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]

ফায়ারফক্সে, ([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])মূল্যায়ন করে

"function test() {
    [native code]
}"

ক্রোমে থাকা অবস্থায়

"function test() { [native code] }"

1^11<<1 সমান 23. সুতরাং ফায়ারফক্সের অতিরিক্ত হোয়াইটস্পেসের কারণে, এটি 'ভি' তে পৌঁছানোর পক্ষে যথেষ্ট নয় এবং পরিবর্তে এটি 'এন'।

এবং এই কারণেই আপনার ফাংশন # টু স্ট্রিং আচরণের উপর নির্ভর করা উচিত নয়। ;)

সম্পাদনা: অবশেষে আমি যুক্তিসঙ্গতভাবে অপ্রকাশিত ক্রস ব্রাউজার সংস্করণটি পেয়েছি:

[[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+([]+!!-[])[1<<1]+[/~/+{}][+!1][-~1<<1]+([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1^11<<1)+(parseInt("010")<10?(1+1+1+1):0)]+([,][~1]+[])[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+(/1/+1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</[1]+[])[1/1.1&1]

এটি এর সাথে এন / ভি বিভাগটি প্রতিস্থাপন করে:

([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1^11<<1)+(parseInt("010")<10?(1+1+1+1):0)]

যা পার্সইন্টে পার্থক্য ব্যবহার করে (স্পষ্টত ফায়ারফক্স অ্যাক্টাল হিসাবে 0 দিয়ে শুরু হওয়া সংখ্যাকে পার্স করে, ক্রোম না করে) ফায়ারফক্সের ক্ষেত্রে 4 যোগ করার জন্য, এইভাবে উভয় ক্ষেত্রে 'নেটিভ' থেকে 'ভি' পেয়ে যায় (আমি আর 'ভি' খুঁজে পাই না) ': পি)।
পার্সিয়ান্টটি কিছুটা জায়গা থেকে দূরে দেখায়, তবে আমি এখনকার পক্ষে সবচেয়ে ভাল করতে পারি।


1
প্রশ্নটি হলDoes anyone else have an idea of how to generate a "v" that is in keeping with the original obfuscated code?
ইয়ান

ধন্যবাদ। এখন আমি এটি করার জন্য ক্রস ব্রাউজারের উপায়টি বের করার চেষ্টা করছি ... 'ভি' একটি আশ্চর্যজনকভাবে অস্বাভাবিক চিঠি ....
পিটার সি

@ ইয়ান - ঠিক আছে তবে সম্ভবত ([1 ^ 11 << 1) + 1 + 1 + 1 + 1] এটি করবে?
enhzflep

@ জনডভোরাক - এই মুহুর্তে আমার কাছে এফএফ নেই। এটি কী মূল্যায়ন করে? আমি যদি জিজ্ঞাসা করার মতো অহঙ্কারী হতে পারি তবে তা।
enhzflep

@ এহজফ্লেপ দুঃখিত, আমার অর্থ ছিল "অন্যদিকে এটি ক্রোমে কাজ করবে না"
জন ডিভোরাক

4

জন্য সাধারণ ব্যবহার-মামলা, যদি চরিত্র বা ছোট হাতের অক্ষর একটি বড় উদ্বেগের বিষয় নয়, আমি একটু ঠকাই আনত হতে পারে।

"গ" ফাংশন তৈরি করুন যা একটি সংখ্যা 0 .. 25 কে একটি অক্ষরে পরিণত করে।

c=function(v){for(var i in window){for(var ci in i){if(parseInt(i[ci],(10+11+11)+(1<<1)+(1<<1))==(v+10)){return i[ci]}}}};

পারফরম্যান্স কারণে, আপনি চান অক্ষর প্রাক ক্যাশে।

l=[];for(var i=0; i<(11+11)+(1<<1)+(1<<1);i++){l[i]=c(i);}

Chrome কনসোলে, ফলস্বরূপ অ্যারেটি দেখতে এমন দেখাচ্ছে:

> l;
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "K", "l", "m", "n", "o", "p", "q", "r", "S", "t", "u", "v", "w", "x", "y", "Z"]

সুতরাং ... আপনার ভি হতে পারেl[10+10+1]

বিকল্পভাবে, এর মতো একটি সাধারণ সমাধান:

p=(function(){10%11}+[])[1+11+(1<<1)]; // "%"
u=(function(){club=1}+[])[1+11+(1<<1)]; // "u"
vc=p+u+(0+[])+(0+[])+((111>>1)+11+10+[]); // "%u0076"
unescape(vc);

বা, এই নির্দিষ্ট সমস্যার জন্য, সম্ভবত ঠিক:

(function(){v=1}+[])[10+(1<<1)]; // "v"

3

এটি ক্রোমে অ্যাভ দেয়:

Object.getOwnPropertyNames(Object)[17][3];

এবং এটি ফায়ারফক্সে করে:

Object.getOwnPropertyNames(Object)[9][3]

তারা দুজনেই এটিকে বাইরে টেনে নিয়ে যায় Object.prototype.preventExtensions() , সুতরাং আপনি সম্ভবত সেই পদ্ধতিটি উল্লেখ করার জন্য একটি ক্রস ব্রাউজারের উপায় খুঁজে পেতে পারেন। (এটি অবজেক্টের একমাত্র 17-চরিত্রের নাম star প্রারম্ভিকদের প্রোটোটাইপ))

এটির একটি আরও-আপত্তিজনক সংস্করণ নির্দ্বিধায় নির্দ্বিধায় তৈরি করুন এবং নিজের জন্য সমস্ত কৃতিত্ব গ্রহণ করুন, আমি সময়ের বাইরে আছি;)


2

Chrome এ প্রকাশের ([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])মূল্যায়ণ "function test() { [native code] }", [1^11<<1]23 মূল্যায়ণ (bitwise অপারেটরদের পরিবর্তনশীল 32 বিট কাটছাঁট করা হবে কারণ)


প্রশ্নটি হলDoes anyone else have an idea of how to generate a "v" that is in keeping with the original obfuscated code?
ইয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.