Ivsteg » 履歴 » リビジョン 2
リビジョン 1 (kanata, 2025/04/13 14:05) → リビジョン 2/3 (kanata, 2025/04/13 14:05)
# ivsteg
異体字セレクタ難読化シェル芸
{{rawhtml(<canvas id="map"></canvas><script src="/javascripts/pagemap.min.js"></script><script>pagemap(document.querySelector("#map"));</script>)}}
{{toc}}
# 動機
[AVTOKYO2019](http://ja.avtokyo.org/MediaArchives)で喋ったこの資料を見てね!
{{rawhtml(<blockquote class="embedly-card"><h4><a href="https://docs.google.com/a/avtokyo.org/viewer?a=v&pid=sites&srcid=YXZ0b2t5by5vcmd8ZW58Z3g6N2MyY2YyM2FlMWM2ZTA4NA">異体字セレクタ難読化シェル芸.pdf</a></h4><p></p></blockquote><script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script>)}}
# 原理
UnicodeのIVS(異体字セレクタ)を利用した文字情報のステガノグラフィです。
## IVS(異体字セレクタ)とは
符号を付け加えることで字体を選択するもの
大体40,000個の異体字、範囲はU+E0100〜U+E01EF
{{rawhtml(<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">クソコラを作ってしまった。。 <a href="https://twitter.com/hashtag/%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8?src=hash&ref_src=twsrc%5Etfw">#シェル芸</a> <a href="https://twitter.com/hashtag/%E3%83%AF%E3%82%BF%E3%83%8A%E3%83%99%E9%9B%A3%E8%AA%AD%E5%8C%96%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8?src=hash&ref_src=twsrc%5Etfw">#ワタナベ難読化シェル芸</a><br>リビドーを止められなかった <a href="https://t.co/sCT8eujR96">pic.twitter.com/sCT8eujR96</a></p>— kanata (@kanata201612) <a href="https://twitter.com/kanata201612/status/1076782799921721344?ref_src=twsrc%5Etfw">December 23 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}}
この例では、U+9089の後ろにU+E01?? をくっつけることで"邉"のコードポイントを維持しながら異なる字体を表現できています
>この仕組の利点は、もし、それぞれが違うコードポイントで登録されていたとしたら。。。を考えてみると理解しやすいかと思います
>異体字セレクタを使うことで、様々な字体をもった"ワタナベ"さんであっても、同じ漢字としてシステムにおいて扱いやすくなります
[たいちょー](https://twitter.com/xztaityozx_001)さんが開発したワタナベ難読化シェル芸から着想を得てました
{{rawhtml(<iframe src="//www.slideshare.net/slideshow/embed_code/key/DRdHN6lZdQF2BD" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/xztaityozx/ss-126519906" title="ワタナベ難読化シェル芸" target="_blank">ワタナベ難読化シェル芸</a> </strong> from <strong><a href="https://www.slideshare.net/xztaityozx" target="_blank">xztaityozx</a></strong> </div>)}}
## エンコードの仕様
異体字の存在しない文字であっても、無理やり異体字セレクタ(U+E0100〜U+E01EF)を付与する
```
A B
0x61 → U+E0161 0x62 → U+E0162
```
ASCIIコードをそのままコードポイントに使う
## 確認(違和感ないか調べてみる)
### Browser

### notepad(メモ帳)

### Terminal

### Twitter

全く違和感なく情報を隠して仕込めている
## Instration
ファイルダウンロードして実行権限をつけるだけ
```bash
$ 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
>異体字が検索できる