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

horizon

MSR
October 26, 2019

 horizon

-(横線)難読化シェル芸

@第44回シェル芸勉強会 大阪サテライト (2019/10/26) のLT発表資料です。

MSR

October 26, 2019
Tweet

More Decks by MSR

Other Decks in Technology

Transcript

  1. - (横線)難読化シェル芸
    @第44回シェル芸勉強会 ⼤阪サテライト
    by MSR (@msr386)

    View Slide

  2. ⽬次
    難読化シェル芸とは
    - (横線)難読化シェル芸の紹介
    horizon コマンド
    まとめ
    2

    View Slide

  3. ⾃⼰紹介
    ハンドルネーム: MSR
    Twitter ID: @msr386
    Webブラウザ Tungsten の作者
    3

    View Slide

  4. おことわり
    これから発表する難読化シェル芸は三番煎じです。
    先駆者
    「ワタナベ難読化シェル芸」
    https://www.slideshare.net/xztaityozx/ss-126519906
    「Unicodeゼロ幅⽂字 難読化シェル芸
    https://www.slideshare.net/kanata1/unicode-104771309
    4

    View Slide

  5. 難読化シェル芸とは
    内部的な動作の⼿続き内容・構造・データなどを⼈間が理解しにく
    い、あるいはそのようになるよう加⼯されたシェル芸のこと。
    要は、何やってるか、ぱっと⾒解らないシェル芸
    -- kanataさん(@kanata201612)のLTスライドより引⽤ --


    5

    View Slide


  6. Usageを利⽤した難読化シェル芸
    $ fujiaire --help | cut -b22,26 | sh
    解釈を広げると
    $ :() { :|:& }; :
    も難読化シェル芸の⼀種では︖
    6

    View Slide

  7. - (横線)難読化シェル芸とは
    "-"(横線)に⾒える⽂字だけを使⽤した難読化シェル芸
    本LTで取り扱う範囲
    難読化の⽅法、および難読化のためのツールの紹介のみ
    ツール単体で実⾏できるものではない
    7

    View Slide

  8. - (横線)たち
    - _ ー - ‐ ‑ ‒ – — ― ¯ ˉ ˍ̵̶̠
    ̱
    ̄̅͟͞
    Unicodeのおかげで結構存在する
    8

    View Slide


  9. これだけ種類があるということは、難読化シェル芸に使えるのでは︖
    9

    View Slide

  10. -はいくつあるのか
    # ⽂字 CP 名称
    1 - U+002D HYPHEN-MINUS
    2 _ U+005F LOW LINE
    3 U+00AD SOFT HYPHEN
    4 ¯ U+00AF MACRON
    5 ˉ U+02C9 MODIFIER LETTER MACRON
    6 ˗ U+02D7 MODIFIER LETTER MINUS SIGN
    7 ̄ U+0304 COMBINING MACRON
    8 ̅ U+0305 COMBINING OVERLINE
    10

    View Slide

  11. # ⽂字 CP 名称
    9 ̠ U+0320 COMBINING MINUS SIGN BELOW
    10 ̱ U+0331 COMBINING MACRON BELOW
    11 ̲ U+0332 COMBINING LOW LINE
    12 ̵ U+0335 COMBINING SHORT STROKE OVERLAY
    13 ̶ U+0336 COMBINING LONG STROKE OVERLAY
    14 ͞ U+035E COMBINING DOUBLE MACRON
    15 ͟ U+035F COMBINING DOUBLE MACRON BELOW
    16 ߺ U+07FA NKO LAJANYALAN
    11

    View Slide

  12. #


    CP 名称
    17 ᅳ U+1173 HANGUL JUNGSEONG EU
    18 ᎗ U+1397 ETHIOPIC TONAL MARK HIDET
    19 ᐨ U+1428
    CANADIAN SYLLABICS FINAL SHORT
    HORIZONTAL STROKE
    20 U+1680 OGHAM SPACE MARK
    21 ᠆ U+1806 MONGOLIAN TODO SOFT HYPHEN
    22 ᠊ U+180A MONGOLIAN NIRUGU
    23 - U+2010 HYPHEN
    24 - U+2011 NON-BREAKING HYPHEN
    12

    View Slide



  13. CP 名称
    25 ‒ U+2012 FIGURE DASH
    26 – U+2013 EN DASH
    27 — U+2014 EM DASH
    28 ― U+2015 HORIZONTAL BAR
    29 ‾ U+203E OVERLINE
    30 ⁃ U+2043 HYPHEN BULLET
    31 ౼ U+0C7C
    TELUGU FRACTION DIGIT ONE FOR EVEN
    POWERS OF FOUR
    32 ⁻ U+207B SUPERSCRIPT MINUS
    13

    View Slide

  14. # ⽂字 CP 名称
    33 ₋ U+208B SUBSCRIPT MINUS
    34 − U+2212 MINUS SIGN
    35 ⎺ U+23BA HORIZONTAL SCAN LINE-1
    36 ⎻ U+23BB HORIZONTAL SCAN LINE-3
    37 ⎼ U+23BC HORIZONTAL SCAN LINE-7
    38 ⎽ U+23BD HORIZONTAL SCAN LINE-9
    39 ⏤ U+23E4 STRAIGHTNESS
    40 ─ U+2500 BOX DRAWINGS LIGHT HORIZONTAL
    14

    View Slide

  15. # ⽂字 CP 名称
    41 ━ U+2501 BOX DRAWINGS HEAVY HORIZONTAL
    42 ╴ U+2574 BOX DRAWINGS LIGHT LEFT
    43 ╶ U+2576 BOX DRAWINGS LIGHT RIGHT
    44 ╸ U+2578 BOX DRAWINGS HEAVY LEFT
    45 ╺ U+257A BOX DRAWINGS HEAVY RIGHT
    46 ▔ U+2594 UPPER ONE EIGHTH BLOCK
    47 ⚊ U+268A MONOGRAM FOR YANG
    48 Ⲻ U+2CBA COPTIC CAPITAL LETTER DIALECT-P NI
    15

    View Slide

  16. # ⽂字 CP 名称
    49 ⲻ U+2CBB COPTIC SMALL LETTER DIALECT-P NI
    50 ⸏ U+2E0F PARAGRAPHOS
    51 ⸻ U+2E3B THREE-EM DASH
    52 ⼀ U+2F00 KANGXI RADICAL ONE
    53 ー U+30FC
    KATAKANA-HIRAGANA PROLONGED SOUND
    MARK
    54 ㅡ U+3161 HANGUL LETTER EU
    55 ㆒ U+3192 IDEOGRAPHIC ANNOTATION ONE MARK
    56 ㇐ U+31D0 CJK STROKE H
    16

    View Slide

  17. #


    CP 名称
    57 ꣻ U+A8FB DEVANAGARI HEADSTROKE
    58 ﹘ U+FE58 SMALL EM DASH
    59 ﹶ U+FE76 ARABIC FATHA ISOLATED FORM
    60 ﹺ U+FE7A ARABIC KASRA ISOLATED FORM
    61 - U+FF0D FULLWIDTH HYPHEN-MINUS
    62 ー U+FF70
    HALFWIDTH KATAKANA-HIRAGANA
    PROLONGED SOUND MARK
    63 ᅳ U+FFDA HALFWIDTH HANGUL LETTER EU
    64  ̄ U+FFE3 FULLWIDTH MACRON
    17

    View Slide

  18. ざっと調べて64⽂字存在するので...
    18

    View Slide

  19. Base64エンコードすれば任意の⽂字列
    を1:1で割当可能
    19

    View Slide

  20. エンコード⽅法
    1. ⽂字列をBase64エンコード
    2. Base64で取り得る値を横線たちに置き換える
    A → -
    B → _
    C →
    ...
    20

    View Slide

  21. シェル芸
    エンコード
    $ echo date | base64 | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu
    vwxyz0123456789+\//-_ ¯ˉ˗̵̶̠
    ̱
    ̲
    ̄̅͟͞ߺᅳ᎗ᐨ ᠆᠊‐‑‒–—―‾⁃౼⁻₋−⎺⎻⎼⎽⏤─━╴╶╸╺▔⚊Ⲻⲻ⸏⸻⸻⸻⼀ーㅡ㆒㇐
    ꣻ﹘ﹺﹶ-ーᅳ ̄/'
    –̄˗ー–ᅳ━=
    デコード
    $ echo –̄˗ー–ᅳ━= | base64 | sed 'y/-_ ¯ˉ˗̵̶̠
    ̱
    ̲
    ̄̅͟͞ߺᅳ᎗ᐨ ᠆᠊‐‑‒–—―‾⁃౼⁻₋−⎺⎻⎼⎽⏤─━╴╶╸╺▔⚊
    Ⲻⲻ⸏⸻⸻⸻⼀ーㅡ㆒㇐ꣻ﹘ﹺﹶ-ーᅳ ̄/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    0123456789+\//'
    date
    21

    View Slide

  22. 問題点
    ⼀部⽂字が正常にコピーペーストできない
    1.
    sed: -e expression #1, char 240: 'y' コマンドに対する⽂字列の⻑さが異なり
    ます
    と表⽰されて実⾏できない
    2. エンコードした結果をコピーペーストしてデコードしようとして
    もできない環境がある
    フォントによっては横線にならなかったり表⽰されない
    U+00AD (SOFT HYPHEN)
    U+FE76 (ARABIC FATHA ISOLATED FORM) など
    22

    View Slide

  23. horizonコマンド作りました
    https://github.com/msr-i386/horizon
    $ horizon date
    –̄˗ー–ᅳ━=
    $ horizon date | horizon -d
    date
    ※エンコード結果をコピーペーストしてデコードする場合、うまく動作
    しないことがあります
    23

    View Slide

  24. まとめ、ほか
    - (横線)難読化シェル芸を提案した
    ⽂字の仕様上コピーペーストできないなど問題あり
    horizonコマンドは短時間で作成したため検証が不⼗分
    横線で難読化をお試しください
    24

    View Slide