5文字の記号だけで任意のJavaScriptコードを実装する手法、実現の可能性 40
ストーリー by hylom
4文字なら2ビットに収まるのに 部門より
4文字なら2ビットに収まるのに 部門より
ECMAScript(JavaScript)の新規格として提案されているものの1つに「Pipeline operator」がある。これは「|>」という演算子を利用して()を使わずに関数に引数を与える仕組みなのだが、これを利用することで「[」「]」「+」「|」「>」の5文字だけで任意のJavaScriptコードを記述できるという(5文字で書くJavaScript/ Shibuya.XSS techtalk #10)。
今までも「[」「]」「(」「)」「!」「+」の6文字で任意のJavaScriptコードを記述するという手法「JSFuck」があった。今回紹介されている手法はこれの応用で、|>演算子を利用することで使用する文字を5文字にまで減らしたというもの。手法としてはECMAScriptの組み込み型や組み込み関数などから「[」「]」「+」「>」の4文字を使って文字を取り出し、それを結合することで任意の文字列を作り、|>演算子でそれを呼び出す、という流れになっている。
デーモン (スコア:2)
解読する方からしたら、ECMAScriptというより悪魔スクリプトだな。
Re: (スコア:0)
フィルター通せば…。
javap (スコア:0)
普通に逆アセンブルできるんじゃね?
#できなければブラウザもクラッシュするじゃん。
Re: (スコア:0)
# JavaじゃなくJavaScriptね。
逆アセンブルではなく逆コンパイルに近い処理だから、ソースを復元できるとは限らないですよ。
Re:javap (スコア:1)
こいつらは基本的にFunction型に文字列突っ込んで関数作る≒evalしてるってのに近いんで、
ネイティブのevalやFunctionコンストラクタを監視しとけば実行されるJSコードを拾えます。
iotaとかjot [livedoor.jp]辺りに変換してしまえばeval系とは異なる挙動にできるので、
本気での逆アセンブル&逆コンパイルを要求できるようになる気がします。
# バイナリコードって言うけど意味の単位をマジで2進数にするやつがあるかっ!?w
iotaやjotのコードに対して実行結果を変えずに変換するような処理が出来れば物凄い難読化強度が出せそうだけど関数型がよく分からんのでパス。
ふつ~3文字 (スコア:1)
Whitespace:5文字も必要とはまだまだだね
Re: (スコア:0)
理屈の上では2文字で十分なので、Whitespace もまだまだ
Re: (スコア:0)
理屈だけで良いなら一文字…。
Re: (スコア:0)
無理だろ、とツッコミかけたけど、いわゆる一進法か。
プログラムを単一の数値に→ファイルサイズでその数値を表す
単一の数値にするのは、例えば、バイト列を巨大な256進整数値と見なすだけ。
Re: (スコア:0)
プログラムのソースである以上読み込む順序が必要なので、普通に使える
ファイルシステム上では、単一文字では255ファイル程度までしか作れない。
ディレクトリを掘っても良いとすれば、もっと多くのファイルを使えるけど
パス区切り文字はどうすんの?
とか考えると、一文字で良いというのは昔流行った超圧縮技術みたいな
詐欺案件だと思う。
# ファイル名の文字セットは限定しないとか言う軟弱な言語は認めない
Re: (スコア:0)
理屈の話をしているのに「255」とかいう制限が出てくることに違和感。
しかも「詐欺案件」とか、誰も騙そうとしていないのに。
Re: (スコア:0)
標準入力からのみ受け付けでいいじゃん。
Re: (スコア:0)
長さと種類の話がごっちゃになってるようにみえるけど。
#3331706と#3331786が言ってるのは後者。あなたのは何言ってるかよく分からんけど前者のように見える。
Re: (スコア:0)
バイト数を進数変換するのは有ったけど、意味を構成する単位が2文字を超えてるんで邪道だと思う。
2種類の文字の組み合わせで単語を作ってブレインファックとかもあるけどコレも邪道だと思う。
ちゃんと意味単位が1文字で、2種類の文字で書ける言語はある [livedoor.jp]。
THComp (スコア:1)
どんな複雑なスクリプトでも5文字で書けるのかと期待したら違ったのね。
「5種類の」と「5文字の」は違うんだけどなあ。
Re: (スコア:0)
5 letters と 5 characters の違いですか。
日本語ではあまり意識して使い分けないですからねぇ。
Re: (スコア:0)
これもジョーク言語(ジョーク仕様?)に分類されるのでしょうか
# Tiny言語にもjokeっぽいのありますねぇ
Re: (スコア:0)
そこは誤読しないと思うんだ。
でないと全てのデータは5文字に圧縮可能って事に。
Re: (スコア:0)
「1文字」を多倍長整数のように無限に拡張する想定かもしれない
Re: (スコア:0)
表示上は一文字とかならできなくもなさそう。
よくあるส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้こういうのならできるんじゃない?
Re: (スコア:0)
ディスプレイが壊れたかと思った。心臓に悪い
Re: (スコア:0)
「1文字」が何ビットか定義されていないってことか。
C言語のバイトサイズと同じ理屈だ。
ということは、「どんなC言語プログラムでも1バイトで書ける」ってのも真なんだ。
Re: (スコア:0)
いや、タイトルだけ見たら俺もそういう意味に読めたよ。その時点で思ったのはどんな屁理屈で5文字と言い張ってるのかってこと。
実際意味するところは違っていた訳だけど、とは言え実物を見るまではそっちはそっちで不可能だろうと直観したのが本心。
Re: (スコア:0)
過去にメール送れそう
Re: (スコア:0)
志村っー、タイトル
Re: (スコア:0)
5つの絵文字でやるのかと思った。
DNA (スコア:0)
4種類の塩基の配列を読み解いて蛋白質を合成していく感じがした
Re: (スコア:0)
むしろチューリングマシンでは。
1/0とかON/OFFとか、なんでもいい。
いよいよスクリプトとは呼びづらくなってきた (スコア:0)
暴力言語だよね、これ
Re:いよいよスクリプトとは呼びづらくなってきた (スコア:1)
./ ← このサイトなんだか名前がこわい
Re:いよいよスクリプトとは呼びづらくなってきた (スコア:1)
/.er: スラッシュドッター は気取ってる感じだけど、間違えて
./er: ドットスラッシャー と書くとはなんか必殺技っぽい。
でも、今は「すらだー」か…なんとなく気がぬけてしまう…
Re: (スコア:0)
パイプライン演算子は他言語にあるし、そうでもないんじゃない。
フレームワークの多さと寿命の短さは暴力的だけども。
部分適用使えるのかな
01010101 (スコア:0)
0と1で基本的に何でもできるんじゃないの?
Re: (スコア:0)
17歳へのツッコミとか
Re:01010101 (スコア:1)
どんな年数も17歳で表現可能なんですね。わかります
# 娘さんにも適用するべきなのかなあ
Re: (スコア:0)
8進数の17は10進で15歳。10進数14歳以下は何進数でも17歳にならないんじゃないか?
「1」「7」の2種類の数字しか使わない2進数だとしても、0歳は17歳と表現できない。
Re: (スコア:0)
進数が小さいと表現できない数があるってことか!?
ということ待てよ。10進数の世界で生活してる俺らの知らない値が世の中には・・・
Re: (スコア:0)
無限進数の一文字を二進化して表せば現状存在する全てのデジタルデータのビットパターンが存在する筈だからね。
って事で、5文字のうちの他の4文字は、ヘッダと識別子とエラー修正コードとフッタに違いない。
Re: (スコア:0)
無限進数ならその手のも1文字に含めろよw
Re: (スコア:0)
くまみこ> OIOIぐらい簡単だもんっ(震え声)