プロジェクト

全般

プロフィール

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&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>)}} 

 この例では、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 

 ![jikken1.png](jikken1.png) 

 ### notepad(メモ帳) 

 ![jikken2.png](jikken2.png) 

 ### Terminal 

 ![jikken3.png](jikken3.png) 

 ### Twitter 

 ![jikken4.png](jikken4.png) 


 全く違和感なく情報を隠して仕込めている 

 ## 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 

 >異体字が検索できる