もちろん、bashファイルは本当に難読化することはできず、常に読み取り可能です。そして、私はそれらをいくつかのバイナリパッケージにラップしたくありません。また、ローカル変数の名前を変更しても問題はありません。
しかし、少なくともすべてのインデント、すべての空の行、およびすべての空白を、何も壊さずに削除する、信頼性のある単純なbash難読化ツールまたはミニファイアはありますか?特に、機密文書や機密情報が含まれている可能性のあるスクリプトのコメントやコメントアウトされた部分はどうですか。
" HEREDOCs "はもちろん変更してはならないので、これを行うには単純なgrep/sed-linesが怖いので、少し実際の解析が必要です。
多分これを行うためのツールがあります、それは素晴らしいでしょう!
ここに私がbashスクリプトの縮小化のために作成したツールがあります: https://github.com/precious/bash_minifier –すべてのコメントと可能な限り多くのスペース/タブ/改行を削除しようとします。こちらからもサービスとして利用できます https://bash-minifier.appspot.com/ 。
Bashスクリプトを縮小するには、次のコマンドを実行します。
python minifier.py /path/to/Shell/script.sh
:Pここで何かおかしいです。
スクリプトの名前がOrigin
で、難読化されたスクリプトの名前がobsf
だとします。
ここにOrigin
があります:
#!/bin/sh
echo "fooo"
こちらがobsf
です
$ echo "echo $(base64 Origin)" > obsf
$ cat obsf
echo IyEvYmluL3NoCmVjaG8gImZvb28iCg==
$ chmod +x obsf
今rm Origin
とobsf
を次のように実行します。
$ sh obsf | base64 -d | sh
fooo
へ3:
これは古い質問ですが、Googleで人気があるようです。また、bash minifer/obfuscatorも探していましたが、答えが気に入らなかった。
意味不明なものを追加したり、スクリプトをコンパイルしたりしたくありませんでした。だから私はPerlで私がやりたいことをしたものを書いて、それをGitHubの https://github.com/Aralhach/bashobfus/tree/master に置きました
できる:
失敗するケースもあるかもしれませんが、かなり大きなbashスクリプトでテストしたところ、リストされた変数置換のケースがポップアップしました。また、変数を単一引用符( ')内に残す-これは、AWKスクリプトを印刷するときにポップアップ表示されます-しかし単一引用符の間で置換ステートメントがすでに二重引用符( ")]内にある場合の引用符( ')-これは、MySQLステートメントを出力するときにポップアップします。
これは、すべての大きなユースケースをカバーしたと思いますが、以前は間違っていました。バグを見つけたら、遠慮なく報告してください(または修正してください!:D)。また、短い行を「;」で結合する機能を追加することも考えていました。しかし、私の締め切りに間に合うようにケースが多すぎて分析できませんでした。
皆様のお役に立てれば幸いです。
元のファイルscript.sh
:
#!/usr/bin/env bash
echo "foo"
作成other.sh
$ echo '#!/usr/bin/env bash' > other.sh
$ echo "echo '$(base64 script.sh)' | base64 -d | sh" >> other.sh
$ chmod +x other.sh
結果(cat other.sh
):
#!/usr/bin/env bash
echo 'IyEvdXNyL2Jpbi9lbnYgYmFzaAplY2hvICJmb28iCg==' | base64 -d | sh
試してください:
$ ./other.sh
foo
シェルスクリプトを難読化するツール: http://www.comp.eonworks.com/scripts/obfuscate_Shell_script-20011012.html
ばかげたことはありますが、それはあなた次第です。シェルスクリプトを実行可能ファイルに「コンパイル」する方法もあります。この post's 受け入れられた答えは、それを行うためのツールといくつかのリンクを提供します。
シェルスクリプトの縮小と難読化は、2つの異なるものです。
縮小とは、機能を変更せずにソースコードからすべての不要な文字を削除することにより、スクリプトのサイズを縮小することを意味します。一方、難読化は、不可能ではないにしても、スクリプトを読みにくくすることを意味します。
縮小:
大きなスクリプトを縮小するには、縮小したい実際のスクリプトに対して次のコードを実行します。
#!/bin/sh
Script=${1}
if [ ! -z "${Script}" ] && [ -f ${Script} ] ; then
CurrenTime=$(date | sed -e 's~ ~_~g' -e 's~:~~g')
cp ${Script} ${Script}_${CurrenTime}
#### Remove all empty lines
#### Remove lines that begin with spaces and a comment sign #
#### Remove all comment lines (meaning, lines that begin with a "#")
awk '
(/.*/ || /#!/) && (!/^#$/) &&
(!/^#[[:blank:]]/) && (!/^#[a-z]/) &&
(!/^#[A-Z]/) && (!/^##/) &&
(!/^\t#/) && (!/^[[:space:]]*$/) &&
( /^#.*!/ || !/^[[:space:]]*#/)
' ${Script} | sed 's_^[[:space:]]*__g' > ${Script}.tmp 2>/dev/null
#' ${Script} > ${Script}.tmp 2>/dev/null (comment out the above line and uncomment this line if your HEREDOCS are affected)
ExitCode=$?
if [ ${ExitCode} -eq 0 ] && [ -s ${Script}.tmp ] ; then
echo
echo "SUCCESS: Your newly [ minified ] script can be found here [ ${Script}.tmp ]."
echo "Review the script [ ${Script}.tmp ] and if happy with it, replace your original script with it!"
echo "NOTE: Your original script [ ${Script} ] was backed up as [ ${Script}_${CurrenTime} ]!"
echo
exit 0
else
echo
echo "FAILURE: Unable to [ minify ] the specified script [ ${Script} ]!!!"
echo
exit 2
fi
else
echo
echo "USAGE: ${0} <your-script>"
echo
exit 3
fi
注:ミニファイが変化する傾向があるのは、ミニファイされるスクリプトが大きい場合のみです。数百または数千の行があります。上記のコードを使用して、スクリプトから数メガバイトを取り除くことができました。
難読化:
上記の縮小が完了した後、サイズの縮小が目的の場合は、すぐに停止できます。ただし、縮小後にスクリプトも難読化する場合は、オプションがあります。
スクリプトを難読化する最も簡単な方法は、Opensslなどの暗号化ツールを使用することです。
To encrypt your script using Openssl:
1. cat <your-script> | openssl aes-128-cbc -a -salt -k "specify-a-password" > yourscript.enc
OR
2. openssl aes-128-cbc -a-salt -in <path-to-your-script> -k "yourpassword"
To decrypt a script using Openssl (notice the '-d'):
1. cat yourscript.enc | openssl aes-128-cbc -a -d -salt -k "specify-a-password" > yourscript.dec
OR
2. openssl aes-128-cbc -a -d -salt -in <path-to-your-script> -k "yourpassword" > yourscript.dec
暗号化/難読化: