Ivsteg » 履歴 » バージョン 3
kanata, 2025/04/13 14:06
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 | 3 | kanata | $ wget https://raintrees.net/attachments/download/228/ivsteg |
72 | 1 | kanata | $ 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 | >異体字が検索できる |