パスワードを忘れた? アカウント作成
13482835 story
プログラミング

5文字の記号だけで任意のJavaScriptコードを実装する手法、実現の可能性 40

ストーリー by hylom
4文字なら2ビットに収まるのに 部門より

ECMAScript(JavaScript)の新規格として提案されているものの1つに「Pipeline operator」がある。これは「|>」という演算子を利用して()を使わずに関数に引数を与える仕組みなのだが、これを利用することで「[」「]」「+」「|」「>」の5文字だけで任意のJavaScriptコードを記述できるという(5文字で書くJavaScript/ Shibuya.XSS techtalk #10)。

今までも「[」「]」「(」「)」「!」「+」の6文字で任意のJavaScriptコードを記述するという手法「JSFuck」があった。今回紹介されている手法はこれの応用で、|>演算子を利用することで使用する文字を5文字にまで減らしたというもの。手法としてはECMAScriptの組み込み型や組み込み関数などから「[」「]」「+」「>」の4文字を使って文字を取り出し、それを結合することで任意の文字列を作り、|>演算子でそれを呼び出す、という流れになっている。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by hakikuma (47737) on 2017年12月18日 16時18分 (#3331622)
    恐ろしい難読化ができますね。
    解読する方からしたら、ECMAScriptというより悪魔スクリプトだな。
    • by Anonymous Coward

      フィルター通せば…。

    • by Anonymous Coward

      普通に逆アセンブルできるんじゃね?
      #できなければブラウザもクラッシュするじゃん。

      • by Anonymous Coward

        # JavaじゃなくJavaScriptね。

        逆アセンブルではなく逆コンパイルに近い処理だから、ソースを復元できるとは限らないですよ。

        • by Anonymous Coward on 2017年12月19日 16時02分 (#3332251)

          こいつらは基本的にFunction型に文字列突っ込んで関数作る≒evalしてるってのに近いんで、
          ネイティブのevalやFunctionコンストラクタを監視しとけば実行されるJSコードを拾えます。

          iotaとかjot [livedoor.jp]辺りに変換してしまえばeval系とは異なる挙動にできるので、
          本気での逆アセンブル&逆コンパイルを要求できるようになる気がします。
          # バイナリコードって言うけど意味の単位をマジで2進数にするやつがあるかっ!?w

          iotaやjotのコードに対して実行結果を変えずに変換するような処理が出来れば物凄い難読化強度が出せそうだけど関数型がよく分からんのでパス。

          親コメント
  • by Anonymous Coward on 2017年12月18日 16時44分 (#3331647)

    Whitespace:5文字も必要とはまだまだだね

    • by Anonymous Coward

      理屈の上では2文字で十分なので、Whitespace もまだまだ

      • by Anonymous Coward

        理屈だけで良いなら一文字…。

        • by Anonymous Coward

          無理だろ、とツッコミかけたけど、いわゆる一進法か。

          プログラムを単一の数値に→ファイルサイズでその数値を表す

          単一の数値にするのは、例えば、バイト列を巨大な256進整数値と見なすだけ。

          • by Anonymous Coward

            プログラムのソースである以上読み込む順序が必要なので、普通に使える
            ファイルシステム上では、単一文字では255ファイル程度までしか作れない。
            ディレクトリを掘っても良いとすれば、もっと多くのファイルを使えるけど
            パス区切り文字はどうすんの?

            とか考えると、一文字で良いというのは昔流行った超圧縮技術みたいな
            詐欺案件だと思う。

            # ファイル名の文字セットは限定しないとか言う軟弱な言語は認めない

            • by Anonymous Coward

              理屈の話をしているのに「255」とかいう制限が出てくることに違和感。
              しかも「詐欺案件」とか、誰も騙そうとしていないのに。

            • by Anonymous Coward

              標準入力からのみ受け付けでいいじゃん。

            • by Anonymous Coward

              長さと種類の話がごっちゃになってるようにみえるけど。
              #3331706と#3331786が言ってるのは後者。あなたのは何言ってるかよく分からんけど前者のように見える。

        • by Anonymous Coward

          バイト数を進数変換するのは有ったけど、意味を構成する単位が2文字を超えてるんで邪道だと思う。
          2種類の文字の組み合わせで単語を作ってブレインファックとかもあるけどコレも邪道だと思う。

          ちゃんと意味単位が1文字で、2種類の文字で書ける言語はある [livedoor.jp]。

  • by Anonymous Coward on 2017年12月18日 17時04分 (#3331657)

    どんな複雑なスクリプトでも5文字で書けるのかと期待したら違ったのね。
    「5種類の」と「5文字の」は違うんだけどなあ。

    • by Anonymous Coward

      5 letters と 5 characters の違いですか。
      日本語ではあまり意識して使い分けないですからねぇ。

    • by Anonymous Coward

      これもジョーク言語(ジョーク仕様?)に分類されるのでしょうか

      # Tiny言語にもjokeっぽいのありますねぇ

    • by Anonymous Coward

      そこは誤読しないと思うんだ。
      でないと全てのデータは5文字に圧縮可能って事に。

      • by Anonymous Coward

        「1文字」を多倍長整数のように無限に拡張する想定かもしれない

        • by Anonymous Coward

          表示上は一文字とかならできなくもなさそう。
          よくあるส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้こういうのならできるんじゃない?

          • by Anonymous Coward

            ディスプレイが壊れたかと思った。心臓に悪い

        • by Anonymous Coward

          「1文字」が何ビットか定義されていないってことか。
          C言語のバイトサイズと同じ理屈だ。
          ということは、「どんなC言語プログラムでも1バイトで書ける」ってのも真なんだ。

      • by Anonymous Coward

        いや、タイトルだけ見たら俺もそういう意味に読めたよ。その時点で思ったのはどんな屁理屈で5文字と言い張ってるのかってこと。
        実際意味するところは違っていた訳だけど、とは言え実物を見るまではそっちはそっちで不可能だろうと直観したのが本心。

      • by Anonymous Coward

        過去にメール送れそう

      • by Anonymous Coward

        志村っー、タイトル

    • by Anonymous Coward

      5つの絵文字でやるのかと思った。

  • by Anonymous Coward on 2017年12月18日 18時30分 (#3331717)

    4種類の塩基の配列を読み解いて蛋白質を合成していく感じがした

    • by Anonymous Coward

      むしろチューリングマシンでは。
      1/0とかON/OFFとか、なんでもいい。

  • by Anonymous Coward on 2017年12月18日 20時32分 (#3331775)

    暴力言語だよね、これ

  • by Anonymous Coward on 2017年12月18日 21時00分 (#3331792)

    0と1で基本的に何でもできるんじゃないの?

    • by Anonymous Coward

      17歳へのツッコミとか

      • by Anonymous Coward on 2017年12月19日 0時46分 (#3331890)

        どんな年数も17歳で表現可能なんですね。わかります

        # 娘さんにも適用するべきなのかなあ

        親コメント
        • by Anonymous Coward

          8進数の17は10進で15歳。10進数14歳以下は何進数でも17歳にならないんじゃないか?
          「1」「7」の2種類の数字しか使わない2進数だとしても、0歳は17歳と表現できない。

          • by Anonymous Coward

            進数が小さいと表現できない数があるってことか!?
            ということ待てよ。10進数の世界で生活してる俺らの知らない値が世の中には・・・

            • by Anonymous Coward

              無限進数の一文字を二進化して表せば現状存在する全てのデジタルデータのビットパターンが存在する筈だからね。
              って事で、5文字のうちの他の4文字は、ヘッダと識別子とエラー修正コードとフッタに違いない。

              • by Anonymous Coward

                無限進数ならその手のも1文字に含めろよw

    • by Anonymous Coward

      くまみこ> OIOIぐらい簡単だもんっ(震え声)

typodupeerror

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...