Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゼロ幅文字に関するエトセトラ

hatobus
June 29, 2019

 ゼロ幅文字に関するエトセトラ

2019 6 29 summer LT in u-aizu

hatobus

June 29, 2019
Tweet

More Decks by hatobus

Other Decks in Technology

Transcript

  1. 自己紹介 - 名前 芳賀 史都 (Haga Fumito) ln -s 芳賀史都

    はとバス - 使用言語 Go, Python, Vue Ojichatコントリビューター - SNS Twitter : @flying_hato_bus Facebook : fumitonn GitHub : hatobus 好き テトリス (Tミノがすき) スマブラ(ヨッシー使い) 後輩に「陰キャじゃん」と煽られる ↑↑↑↑↑↑↑↑
  2. Unicodeとゼロ幅スペース Mr and Mrs Dursley, of number four, P rivet

    Drive, were proud to say that the y were perfectly normal, thank you ver y much. Mr and Mrs Dursley, of number four, Privet Drive, we they were perfectly normal, thank you very much. ゼロ幅スペース 有 ゼロ幅スペース 無 ゼロ幅スペース有の方は一文字ずつゼロ幅スペースが入っている。 このおかげで任意の部分で改行を挟めるようにしており、単語の途中であっても改行ができる。
  3. ゼロ幅文字列の種類 Unicodeとゼロ幅スペース ゼロ幅文字にはめっちゃ種類がある。 U + 0 3 4 F ,

    U + 2 0 0 B , U + 2 0 0 C , U + 2 0 0 D , U + 2 0 0 E , U + 2 0 0 F , U + 2 0 2 8 , U + 2 0 2 9 , U + 2 0 2 A , U + 2 0 2 B , U + 2 0 2 C , U + 2 0 2 D , U + 2 0 2 E , U + 2 0 6 1 , U + 2 0 6 2 すべて違う文字となっているが、文字幅が 0で表面上はなにも無く見える
  4. どういうこと? 作ったもの 斉藤恵那 これは文字 e696 89e8 97a4 e681 b5e9 82a3

    16進数に変換 32122112202132202113221032 12200123113221200222030022 16進数→4進数 - 0 … U+200B - 1 … U+200C - 2 … U+200D - 3 … U+FEFF 上のように数字を置換する 出力は人間には見えない
  5. 作ったもの 作ったもの zwed (ZeroWidth Encoder/Decoder) - https://github.com/hatobus/zwed - ゼロ幅文字を使って文字を暗号、復号処理にかけられるぞ! -

    企業で使われてるぞ!!! zwsfxck (brain fuckのゼロ幅文字版) - https://github.com/hatobus/zwsfxck - ゼロ幅文字でBFが書けるぞ!! - 文章中に入れれば暗号として使えるぞ!!!
  6. 作ったもの Go実装ではどうしたか 斉 藤 恵 那 e69689 e897a4 e681b5 e982a3

    一度で全て変換するのではなく、一文字ずつ変換した また、復号できなくなるので、文字の切れ間にもゼロ幅文字を挿入 → 復号時の文字を判別するのに使用する 斉 藤 恵 那 Z W S Z W S Z W S
  7. 作ったもの (>) ... U+200B (<) ... U+200C (+) ... U+200D

    (-) ... U+200E (.) ... U+200F (,) ... U202A ([) ... U+202B (]) ... U+202C 左のようにオペランドが変更されている。 sedを使って、普通のBFのファイルからzwsfxck用のファイルへ変換可能 sed -e \ "s/+/$(echo -ne '\U200d')/g" \ -e "s/-/$(echo -ne '\U200E')/g" \ -e "s/>/$(echo -ne '\U200B')/g" \ -e "s/</$(echo -ne '\U200C')/g" \ -e "s/\./$(echo -ne '\U200F')/g" \ -e "s/,/$(echo -ne '\U202A')/g" \ -e "s/\[/$(echo -ne '\U202B')/g" \ -e "s/\]/$(echo -ne '\U202C')/g" \ -i zwsfxck.bf