ivsteg

異体字セレクタ難読化シェル芸

動機

AVTOKYO2019で喋ったこの資料を見てね!

異体字セレクタ難読化シェル芸.pdf

原理

UnicodeのIVS(異体字セレクタ)を利用した文字情報のステガノグラフィです。

IVS(異体字セレクタ)とは

符号を付け加えることで字体を選択するもの
大体40,000個の異体字、範囲はU+E0100〜U+E01EF

この例では、U+9089の後ろにU+E01?? をくっつけることで"邉"のコードポイントを維持しながら異なる字体を表現できています

この仕組の利点は、もし、それぞれが違うコードポイントで登録されていたとしたら。。。を考えてみると理解しやすいかと思います
異体字セレクタを使うことで、様々な字体をもった"ワタナベ"さんであっても、同じ漢字としてシステムにおいて扱いやすくなります

たいちょーさんが開発したワタナベ難読化シェル芸から着想を得てました

エンコードの仕様

異体字の存在しない文字であっても、無理やり異体字セレクタ(U+E0100〜U+E01EF)を付与する

   A                B
  0x61 → U+E0161  0x62 → U+E0162

ASCIIコードをそのままコードポイントに使う

確認(違和感ないか調べてみる)

Browser

jikken1.png

notepad(メモ帳)

jikken2.png

Terminal

jikken3.png

Twitter

jikken4.png

全く違和感なく情報を隠して仕込めている

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

異体字が検索できる

jikken1.png (7.873 KB) kanata, 2019/11/02 08:06

jikken3.png (7.603 KB) kanata, 2019/11/02 08:06

jikken4.png (13.031 KB) kanata, 2019/11/02 08:06

jikken2.png (19.833 KB) kanata, 2019/11/02 08:06

ivsteg (1.794 KB) kanata, 2019/11/02 08:07

クリップボードから画像を追加 (サイズの上限: 100 MB)