LoginSignup
0
0

JSF**kのカラクリ

Posted at

JSF**kとは

JSF**kとはJSFuckのことであり、Javascriptで以下の文字だけでプログラミングするJavascriptの縛りのようなものです。

![]+()

JSF**kの基本

数の生成

まず、空の配列をNOTするとtrueになります。

![] //falseになる

そして、boolean同士を足すと数字になります。このときtrueは1、falseは0のようになります。

!![]+!![] //2になる

あと、最初に+でもいけます。

+!![] //1になる

文字の生成

文字列を生成するには、以下の性質が必要です。

true + [] //"true"になる
false + []//"false"になる

そう、なんらかのオブジェクトに配列を足すと文字列になるのです。

コードの実行

コード実行のカラクリ

これである程度コードは作れますがこれでは何もできません。
が、なんとこのようにして文字列をJavascriptコードとして実行できます。

[]["at"]["constructor"]("任意のJSコード")()

"at""constructor"を作ろう

しかし、"at""constructor"のs,t,r,uはtrueとfalseから生成できますがc,o,nはありません。どうしたものか。
なんと、最初の文字生成は関数にも使えます。[]["at"]は関数なので、このようにしましょう。

[][(![]+[])[+!![]]+(!![]+[])[+![]]]+[]
//"function at() { [native code] }"になる

これでconstructorは作れます!

([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+ //c
([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+ //o
([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]+ //n
(![]+[])[!![]+!![]+!![]]+ //s
(!![]+[])[+![]]+ //t
(!![]+[])[+!![]]+ //r
(!![]+[])[!![]+!![]]+ //u
([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+ //c
(!![]+[])[+![]]+ //t
([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+ //o
(!![]+[])[+!![]] //r

では[]["at"]["constructor"]を書いてみましょう!

[][(![]+[])[+!![]]+(!![]+[])[+![]]][([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+![]]+(!![]+[])[+!![]]+(!![]+[])[!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+(!![]+[])[+![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+!![]]]

ではalert()でも実行しますか。

[][(![]+[])[+!![]]+(!![]+[])[+![]]][([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+![]]+(!![]+[])[+!![]]+(!![]+[])[!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+(!![]+[])[+![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+!![]]] //[]["at"]["constructor"]
(
(![]+[])[+!![]]+ //a
(![]+[])[!![]+!![]]+ //l
(![]+[])[!![]+!![]+!![]+!![]]+ //e
(!![]+[])[+!![]]+ //r
(!![]+[])[+![]]+ //t
([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[+((+!![]+[])+(+!![]))]+ //(
([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[+((+!![]+[])+(!![]+!![]))] //)
)()

ではコメントを消して一行に

[][(![]+[])[+!![]]+(!![]+[])[+![]]][([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!![]+!![]+!![]]+(!![]+[])[+![]]+(!![]+[])[+!![]]+(!![]+[])[!![]+!![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]]+(!![]+[])[+![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+!![]]]((![]+[])[+!![]]+(![]+[])[!![]+!![]]+(![]+[])[!![]+!![]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+![]]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[+((+!![]+[])+(+!![]))]+([][(![]+[])[+!![]]+(!![]+[])[+![]]]+[])[+((+!![]+[])+(!![]+!![]))])()

終わりに

JSF**は、文字列をJSとして実行する関数にJSの文字列を渡すことで動かすことができるのである。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0