執筆者: 終に鮭
最終更新: 2023/02/28
まずはこれらのツイートを見てほしい。
echo 'class ${public static void main(String[]a)throws Exception{var b=new int[810000];https://t.co/hd3ce1Xpzc(new https://t.co/vgGGZeOChL.File("/media/0")).getRGB(0,0,900,900,b,0,900);for(int i:b)if((i&255)!=0)System.out.write(i);}}'>$.java
— 社畜ちゃん (@Shachiku_nyan) February 23, 2023
java $.*>_.java
java _.* #シェル芸 pic.twitter.com/aCxDjD9ZS1
次は◉のターンめう~
— シェル芸bot (@minyoruminyon) February 23, 2023
12345678
A
B
C
D 〇◉
E ◉〇
F
G
H https://t.co/TZGGgxwtH7
5F6F6E4F5G6G7G8H3D5H8G3E2E6D6H7H7D4G7E3F2G7F8F8E4H4C5C3C5B2C1C6B7A8C8D7C2D6C7B3G3H2H8B4B5A8A6A1H3A4A1B1A3B2B1E2F1G1F1D2A #シェル芸 https://t.co/mYeyPWMN9Y
— 社畜ちゃん (@Shachiku_nyan) February 23, 2023
〇の勝ちめう!
— シェル芸bot (@minyoruminyon) February 23, 2023
12345678
A◉〇〇〇〇〇〇〇
B◉〇〇〇〇〇〇〇
C◉〇〇〇〇〇〇〇
D〇〇〇〇〇〇〇〇
E〇〇〇〇〇〇〇〇
F〇〇〇〇〇〇〇〇
G〇〇〇〇〇〇〇〇
H〇〇〇〇〇〇〇〇 https://t.co/1Ux236CqEU
シェル芸bot(@minyoruminyon)とは、それがフォローしているユーザが #シェル芸 等のハッシュタグをつけてシェルコマンドをツイートしたとき、引用RTでその出力をつぶやくbot [注1] 。
つまり、上記のツイートはシェル芸botにjavaコマンドを実行させてオセロをしているということになる。しかしオセロのソースコードは含まれていないように見えるが……?
シェル芸botには、ツイートに添付された画像を /media
ディレクトリ下にあるものとして実行する機能がある。1枚ならその画像は /media/0
。
つまり最初のツイートは、画像を読み込んで java.awt.image.BufferedImage.getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) によって埋め込まれたバイナリを取り出しているということになる。
記事タイトルが物々しかったが、「Deflate圧縮されたバイナリ」とは、ただ単に「バイナリを埋め込んだPNG画像」のこと。
ちなみにDeflateはおなじみZIPやgzipにも使われる可逆圧縮アルゴリズム。
ちなみに元ツイートを書いた人によると、埋め込まれているのはJavaのソースらしい [2]。手元で実行してみたらわかる。
今どうなっているかは知らないが、どうも数年前時点でのTwitterの画像の仕様はこうらしい [3](読み間違いがあれば申し訳ない)。
つまり、900x900のPNG-32を使えば約3MBもの情報を使うことができる。4枚使えば4倍(要検証)。
……4096x4096のPNG-8でも16MBの情報を使えるのでは?などと思ったが多分JPEGに変換されるんだろう。知らんけど。
あとはプロトコルを交換しておけばメモ帳アプリのスクショをツイートするよりも大量の情報を一気に投稿できる(誰にわかるねん)。
失敗しとるやないかい!
Lorem ipsumが出る予定だったのに
/media/0: PNG image data, 15 x 10, 8-bit colormap, non-interlaced https://t.co/V6BDW0Wr5q
— シェル芸bot (@minyoruminyon) February 28, 2023
ツイート1: 本当なら 8-bit/color RGB になってもらう予定だったが、256色以下だったので colormap に変換されてしまった例
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a%bcdefghijklllllllll https://t.co/MTbx2B4GR7
— シェル芸bot (@minyoruminyon) February 28, 2023
ツイート2: WebPに変換される(多分?)とかいう知らない仕様によってASCIIコード表から順番に持ってきたみたいな謎文字列が出ている例
[1] 社畜ちゃん(@Shachiku_nyan)「echo 'class ${public static void …」 https://twitter.com/Shachiku_nyan/status/1628601778345500674 (2023年2月27日アクセス)
[2] 社畜ちゃん(@Shachiku_nyan)「@AAAR_Salmon javaのソースそのまま押し込めてますw」 https://twitter.com/Shachiku_nyan/status/1628699291454963712 (2023年2月28日アクセス)
[3] NolanOBrien「Upcoming changes to PNG image support」 https://twittercommunity.com/t/upcoming-changes-to-png-image-support/118695 (2023年2月28日アクセス)
[注1] ふるつき「今の所判明しているシェル芸botの仕様」 https://furutsuki.hatenablog.com/entry/2018/07/13/221806 (2023年2月28日アクセス)
この人が書いた記事