Ivsteg » 履歴 » バージョン 2
kanata, 2025/04/13 14:05
| 1 | 1 | kanata | # ivsteg |
|---|---|---|---|
| 2 | |||
| 3 | 異体字セレクタ難読化シェル芸 |
||
| 4 | |||
| 5 | {{toc}} |
||
| 6 | |||
| 7 | # 動機 |
||
| 8 | |||
| 9 | [AVTOKYO2019](http://ja.avtokyo.org/MediaArchives)で喋ったこの資料を見てね! |
||
| 10 | |||
| 11 | {{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>)}} |
||
| 12 | |||
| 13 | # 原理 |
||
| 14 | |||
| 15 | UnicodeのIVS(異体字セレクタ)を利用した文字情報のステガノグラフィです。 |
||
| 16 | |||
| 17 | ## IVS(異体字セレクタ)とは |
||
| 18 | |||
| 19 | 符号を付け加えることで字体を選択するもの |
||
| 20 | 大体40,000個の異体字、範囲はU+E0100〜U+E01EF |
||
| 21 | |||
| 22 | {{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>)}} |
||
| 23 | |||
| 24 | この例では、U+9089の後ろにU+E01?? をくっつけることで"邉"のコードポイントを維持しながら異なる字体を表現できています |
||
| 25 | |||
| 26 | >この仕組の利点は、もし、それぞれが違うコードポイントで登録されていたとしたら。。。を考えてみると理解しやすいかと思います |
||
| 27 | >異体字セレクタを使うことで、様々な字体をもった"ワタナベ"さんであっても、同じ漢字としてシステムにおいて扱いやすくなります |
||
| 28 | |||
| 29 | |||
| 30 | [たいちょー](https://twitter.com/xztaityozx_001)さんが開発したワタナベ難読化シェル芸から着想を得てました |
||
| 31 | |||
| 32 | {{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>)}} |
||
| 33 | |||
| 34 | ## エンコードの仕様 |
||
| 35 | |||
| 36 | 異体字の存在しない文字であっても、無理やり異体字セレクタ(U+E0100〜U+E01EF)を付与する |
||
| 37 | |||
| 38 | ``` |
||
| 39 | A B |
||
| 40 | 0x61 → U+E0161 0x62 → U+E0162 |
||
| 41 | ``` |
||
| 42 | |||
| 43 | ASCIIコードをそのままコードポイントに使う |
||
| 44 | |||
| 45 | ## 確認(違和感ないか調べてみる) |
||
| 46 | |||
| 47 | ### Browser |
||
| 48 | |||
| 49 |  |
||
| 50 | |||
| 51 | ### notepad(メモ帳) |
||
| 52 | |||
| 53 |  |
||
| 54 | |||
| 55 | ### Terminal |
||
| 56 | |||
| 57 |  |
||
| 58 | |||
| 59 | |||
| 60 | |||
| 61 |  |
||
| 62 | |||
| 63 | |||
| 64 | 全く違和感なく情報を隠して仕込めている |
||
| 65 | |||
| 66 | ## Instration |
||
| 67 | |||
| 68 | ファイルダウンロードして実行権限をつけるだけ |
||
| 69 | |||
| 70 | ```bash |
||
| 71 | $ wget https://raintrees.net/attachments/download/698/ivsteg |
||
| 72 | $ chmod u+x ./ivsteg |
||
| 73 | ``` |
||
| 74 | |||
| 75 | ### 動作環境 |
||
| 76 | |||
| 77 | ただのシェルスクリプトなので、だいたいの環境(Linux,Mac,Unix)で動くのでは |
||
| 78 | |||
| 79 | 以下で、動作確認しました。 |
||
| 80 | |||
| 81 | * CentOS Linux release 7.2.1511 x86_64 |
||
| 82 | |||
| 83 | ## Usage |
||
| 84 | |||
| 85 | ### Encode - Hide $2 in $1 ($1 に $2 をエンコードしてぶっ込む) |
||
| 86 | |||
| 87 | ``` |
||
| 88 | $ ./ivsteg -e うんこです unko |
||
| 89 | う󠅵ん󠅮こ󠅫で󠅯す |
||
| 90 | ``` |
||
| 91 | |||
| 92 | 文字数を数えるTwitterは、この情報を数えない気がする(調べてないけど)。ちょっとお得かと。 |
||
| 93 | |||
| 94 | ### Decode |
||
| 95 | |||
| 96 | ``` |
||
| 97 | $ ./ivsteg -d う󠅵ん󠅮こ󠅫で󠅯す |
||
| 98 | unko |
||
| 99 | ``` |
||
| 100 | |||
| 101 | # 使えるシュチュエーション |
||
| 102 | |||
| 103 | ## このシェル芸を実行したのは誰だ! |
||
| 104 | |||
| 105 | ``` |
||
| 106 | $ ./ivsteg -d 誰󠅭で󠅥す󠄡か? |
||
| 107 | me! |
||
| 108 | ``` |
||
| 109 | |||
| 110 | ## Hide the Easter egg(裏手順を隠しておく) |
||
| 111 | |||
| 112 | ``` |
||
| 113 | $ ./ivsteg -d ア󠅲プ󠅭リ󠄠を󠄭停󠅲止󠅦し󠄠ま󠄮す󠄯 |
||
| 114 | rm -rf ./ |
||
| 115 | ``` |
||
| 116 | |||
| 117 | ## Put a pray(呪いを込めておく) |
||
| 118 | |||
| 119 | ``` |
||
| 120 | $ ./ivsteg -d 就󠅋活󠅁生󠅅「󠅒御󠅉社󠅔ァ󠅁!󠅉」 面接官「弊社ァ!」 就活生「御社オラ御社ァ!」 |
||
| 121 | KAERITAI |
||
| 122 | ``` |
||
| 123 | |||
| 124 | Job hunting in Japan. |
||
| 125 | |||
| 126 | ## We can use some SNS |
||
| 127 | |||
| 128 | Twitterでも使える(他のSNSもいける) |
||
| 129 | |||
| 130 | ``` |
||
| 131 | $ ./ivsteg -d で󠅃も󠅈お󠅅高󠅅い󠅅ん󠅁で󠅐しょ? |
||
| 132 | CHEEEAP |
||
| 133 | ``` |
||
| 134 | |||
| 135 | ## Obfuscated bash one-liner(難読化シェル芸) |
||
| 136 | |||
| 137 | A fake date command.(echoと見せかけたdateの実行) |
||
| 138 | |||
| 139 | ``` |
||
| 140 | $ ./ivsteg -d "e󠅤c󠅡h󠅴o󠅥 unko"|bash |
||
| 141 | 2019年 1月 2日 水曜日 14:26:00 JST |
||
| 142 | ``` |
||
| 143 | |||
| 144 | # Misc |
||
| 145 | |||
| 146 | 異体字セレクタセレクタ |
||
| 147 | https://747.github.io/vsselector/ |
||
| 148 | |||
| 149 | 文字情報基盤データベース |
||
| 150 | https://mojikiban.ipa.go.jp/search/home |
||
| 151 | |||
| 152 | >異体字が検索できる |