Unicode ゼロ幅スペースを利用して情報を隠して仕込む

情報隠蔽ツールを作った。 ゼロ幅スペースというUnicodeの闇。
kanata25日前に追加

ゼロ幅スペースというUnicodeの闇

ZeroWidthSpace

動機 : 先日こういう話題があった

ゼロ幅文字にエンコードした隠し情報で、文書をリークしたメンバーを特定

とある会員制掲示板からの文書の流出に困った運営者が、 ユニコードの見えない文字「ゼロ幅文字(Zero-Width characters)」を使って流出させたユーザーを特定した、という話 が出ていました。 ...

  • 要約
    • 競技ビデオゲームのチームが、プライベートの掲示板を利用
    • 外部の掲示板にコピペしているやつがいた
    • 見た目がわからない文字を仕込んで犯人を特定

原理 : Unicodeゼロ幅スペースを仕込んだ

ゼロ幅スペース(Wikipedia)

コンピュータの組版に用いられる非表示文字で、文書処理システムに対して語の切れ目を示すのに用いる

めっちゃ種類ある

U+034F , U+200B , U+200C , U+200D , U+200E , U+200F , U+2028 , U+2029 , U+202A , U+202B , U+202C , U+202D , U+202E , U+2061 , U+2062 , U+2063 , U+FEFF

いろんな事に(難読化シェル芸)に使えるんじゃ・・・!

元ネタに習って4種類を使う ⇒ 4進数で表現できる!

CodePoint 名称 デコード時
U+200B ゼロ幅空白 0
U+200C ゼロ幅非接合子(筆記体の時の制御) 1
U+200D ゼロ幅接合子(筆記体の時の制御) 2
U+FEFF ゼロ幅のノーブレークスペース 3

ゼロ幅スペースにエンコード

  1. 文字を16進数に変換(xxd)
  2. 16進数を4進数に変換(bc)
  3. 0 1 2 3 をゼロ幅スペースに置換(sed)
ZWS1=$'\u200b'
ZWS2=$'\u200c'
ZWS3=$'\u200d'
ZWS4=$'\ufeff'

echo "unko" |xxd -p|tr a-z A-Z \
  |sed 's/^/obase=4; ibase=16; &/g'|bc \
  |sed s/0/$ZWS1/g |sed s/1/$ZWS2/g \
  |sed s/2/$ZWS3/g |sed s/3/$ZWS4/g 

仕込んだゼロ幅スペースのデコード

  1. ゼロ幅スペースを 0 1 2 3 に置換(sed)
  2. 16進数に変換(bc)
  3. バイナリに変換(xxd)
ZWS1=$'\u200b'
ZWS2=$'\u200c'
ZWS3=$'\u200d'
ZWS4=$'\ufeff'

echo '‌‌‌‌‍‍‌‍‍‌‍​​‍‍' \
  |sed s/$ZWS1/0/g |sed s/$ZWS2/1/g \
  |sed s/$ZWS3/2/g |sed s/$ZWS4/3/g \
  |sed 's/^/obase=16; ibase=4; &/g'|bc|xxd -ps -r

※ echo '' の''にはゼロ幅スペース入ってる

ツール作った

Instration

ファイルダウンロードして実行権限をつけるだけ

$ wget https://raintrees.net/attachments/download/472/EncodeZeroWidthSpace.sh
$ chmod u+x ./EncodeZeroWidthSpace.sh
$ wget https://raintrees.net/attachments/download/473/DecodeZeroWidthSpace.sh
$ chmod u+x ./DecodeZeroWidthSpace.sh

動作環境

ただのシェルスクリプトなので、だいたいの環境(Linux,Mac,Unix)で動くのでは

以下で、動作確認しました。

  • CentOS Linux release 7.2.1511 x86_64

Usage

エンコード

./EncodeZeroWidthSpace.sh '💩'
'​​‍‌‍‌​‍‍‍‍‌​​‍‍'

デコード

./DecodeZeroWidthSpace.sh 'T​​‍‌‍‌​‍‍‍‍‌​​‍‍his is a pen'
'💩'

使えるシュチュエーション

このシェル芸を実行したのは誰だ!

./DecodeZeroWidthSpace.sh 'echo un‍‌‍‍‌‍​​‌‍​‍​​‌‍‍‌‍​‍​​‌‍‌‍‌​​‍‍ko'
'私です'

裏手順を隠しておく

./DecodeZeroWidthSpace.sh 'stop.sh #アプリ停止、yを入力‌​​‌‍‍‌‍‍‌‌‍​‌‍​​‍​​‌‍​‌‍'
'pkill apli'

呪いを込めておく

./DecodeZeroWidthSpace.sh 'Start.sh #アプリ起動‍‌‌‍‍​‍​​‍​‍​​‍‍​‍‍‍​‍​‍'
'帰りたい'

暗号的やり取り

実はTwitterはゼロ幅スペースが使えます
他のSNSでも使えそう(未確認)

./DecodeZeroWidthSpace.sh '草‍‌‍​‍‌‍‍‌‍‌‌‍‍​‍​‍‍​‍​​‌‍‍​​‍​‍​​‌‍‌‍‍'
'特売だぞ'

難読化シェル芸

echoと見せかけたdateの実行

 ./DecodeZeroWidthSpace.sh 'echo unko‌‍‌​‌‍​‌‌‌​‌‍‌‌​​‍‍'|bash
201851日 火曜日 16:42:55 JST


コメント

クリップボードから画像を追加 (サイズの上限: 100 MB)