3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JSF**kのカラクリ

Last updated at Posted at 2024-05-26

JSF**kとは

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

![]+()

JSF**kの基本

数の生成

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

![] //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の文字列を渡すことで動かすことができるのである。

3
1
2

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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?