プロジェクト

全般

プロフィール

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&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>)}}
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
![jikken1.png](jikken1.png)
50
51
### notepad(メモ帳)
52
53
![jikken2.png](jikken2.png)
54
55
### Terminal
56
57
![jikken3.png](jikken3.png)
58
59
### Twitter
60
61
![jikken4.png](jikken4.png)
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
>異体字が検索できる