Pro Yearly is on sale from $80 to $50! »

horizon

864fdf25e50e2d92ebd5cb13db804bf9?s=47 MSR
October 26, 2019

 horizon

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

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

864fdf25e50e2d92ebd5cb13db804bf9?s=128

MSR

October 26, 2019
Tweet

Transcript

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

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

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

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

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

  6. 例 Usageを利⽤した難読化シェル芸 $ fujiaire --help | cut -b22,26 | sh

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

  8. - (横線)たち - _ ー - ‐ ‑ ‒ –

    — ― ¯ ˉ ˍ̵̶̠ ̱ ̄̅͟͞ Unicodeのおかげで結構存在する 8
  9. これだけ種類があるということは、難読化シェル芸に使えるのでは︖ 9

  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
  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
  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
  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
  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
  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
  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
  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
  18. ざっと調べて64⽂字存在するので... 18

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

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

    _ C → ... 20
  21. シェル芸 エンコード $ echo date | base64 | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu

    vwxyz0123456789+\//-_ ¯ˉ˗̵̶̠ ̱ ̲ ̄̅͟͞ߺᅳ᎗ᐨ ᠆᠊‐‑‒–—―‾⁃౼⁻₋−⎺⎻⎼⎽⏤─━╴╶╸╺▔⚊Ⲻⲻ⸏⸻⸻⸻⼀ーㅡ㆒㇐ ꣻ﹘ﹺﹶ-ーᅳ ̄/' –̄˗ー–ᅳ━= デコード $ echo –̄˗ー–ᅳ━= | base64 | sed 'y/-_ ¯ˉ˗̵̶̠ ̱ ̲ ̄̅͟͞ߺᅳ᎗ᐨ ᠆᠊‐‑‒–—―‾⁃౼⁻₋−⎺⎻⎼⎽⏤─━╴╶╸╺▔⚊ Ⲻⲻ⸏⸻⸻⸻⼀ーㅡ㆒㇐ꣻ﹘ﹺﹶ-ーᅳ ̄/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789+\//' date 21
  22. 問題点 ⼀部⽂字が正常にコピーペーストできない 1. sed: -e expression #1, char 240: 'y'

    コマンドに対する⽂字列の⻑さが異なり ます と表⽰されて実⾏できない 2. エンコードした結果をコピーペーストしてデコードしようとして もできない環境がある フォントによっては横線にならなかったり表⽰されない U+00AD (SOFT HYPHEN) U+FE76 (ARABIC FATHA ISOLATED FORM) など 22
  23. horizonコマンド作りました https://github.com/msr-i386/horizon $ horizon date –̄˗ー–ᅳ━= $ horizon date |

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