プロジェクト

全般

プロフィール

Ivsteg » 履歴 » バージョン 1

kanata, 2025/04/13 14:05

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