ivsteg¶
異体字セレクタ難読化シェル芸
動機¶
AVTOKYO2019で喋ったこの資料を見てね!
異体字セレクタ難読化シェル芸.pdf¶
原理¶
UnicodeのIVS(異体字セレクタ)を利用した文字情報のステガノグラフィです。
IVS(異体字セレクタ)とは¶
符号を付け加えることで字体を選択するもの
大体40,000個の異体字、範囲はU+E0100〜U+E01EF
クソコラを作ってしまった。。 #シェル芸 #ワタナベ難読化シェル芸
— kanata (@kanata201612) December 23 2018
リビドーを止められなかった pic.twitter.com/sCT8eujR96
この例では、U+9089の後ろにU+E01?? をくっつけることで"邉"のコードポイントを維持しながら異なる字体を表現できています
この仕組の利点は、もし、それぞれが違うコードポイントで登録されていたとしたら。。。を考えてみると理解しやすいかと思います
異体字セレクタを使うことで、様々な字体をもった"ワタナベ"さんであっても、同じ漢字としてシステムにおいて扱いやすくなります
たいちょーさんが開発したワタナベ難読化シェル芸から着想を得てました
エンコードの仕様¶
異体字の存在しない文字であっても、無理やり異体字セレクタ(U+E0100〜U+E01EF)を付与する
A B 0x61 → U+E0161 0x62 → U+E0162
ASCIIコードをそのままコードポイントに使う
確認(違和感ないか調べてみる)¶
Browser¶
notepad(メモ帳)¶
Terminal¶
Twitter¶
全く違和感なく情報を隠して仕込めている
Instration¶
ファイルダウンロードして実行権限をつけるだけ
$ wget https://raintrees.net/attachments/download/698/ivsteg
$ chmod u+x ./ivsteg
動作環境¶
ただのシェルスクリプトなので、だいたいの環境(Linux,Mac,Unix)で動くのでは
以下で、動作確認しました。
- CentOS Linux release 7.2.1511 x86_64
Usage¶
Encode - Hide $2 in $1 ($1 に $2 をエンコードしてぶっ込む)¶
$ ./ivsteg -e うんこです unko う󠅵ん󠅮こ󠅫で󠅯す
文字数を数えるTwitterは、この情報を数えない気がする(調べてないけど)。ちょっとお得かと。
Decode¶
$ ./ivsteg -d う󠅵ん󠅮こ󠅫で󠅯す unko
使えるシュチュエーション¶
このシェル芸を実行したのは誰だ!¶
$ ./ivsteg -d 誰󠅭で󠅥す󠄡か? me!
Hide the Easter egg(裏手順を隠しておく)¶
$ ./ivsteg -d ア󠅲プ󠅭リ󠄠を󠄭停󠅲止󠅦し󠄠ま󠄮す󠄯 rm -rf ./
Put a pray(呪いを込めておく)¶
$ ./ivsteg -d 就󠅋活󠅁生󠅅「󠅒御󠅉社󠅔ァ󠅁!󠅉」 面接官「弊社ァ!」 就活生「御社オラ御社ァ!」 KAERITAI
Job hunting in Japan.
We can use some SNS¶
Twitterでも使える(他のSNSもいける)
$ ./ivsteg -d で󠅃も󠅈お󠅅高󠅅い󠅅ん󠅁で󠅐しょ? CHEEEAP
Obfuscated bash one-liner(難読化シェル芸)¶
A fake date command.(echoと見せかけたdateの実行)
$ ./ivsteg -d "e󠅤c󠅡h󠅴o󠅥 unko"|bash 2019年 1月 2日 水曜日 14:26:00 JST
Misc¶
異体字セレクタセレクタ
https://747.github.io/vsselector/
文字情報基盤データベース
https://mojikiban.ipa.go.jp/search/home
異体字が検索できる