LoginSignup
7

More than 5 years have passed since last update.

posted at

updated at

shc で shell script をバイナリ化しようとして "shc: invalid first line in script:" と言われた時

結論

シバン(#!)がないからかな?と思ったらやっぱりそうでした

はじめに

shc は shell script をストリップ済のバイナリにコンパイルしてくれるツールです

暗号化ストレージを起動時に復号化する shell とか、起動時にコピーされたSDかチェックするとか中身を読んでほしくないし触ってほしくない shell をカジュアルに難読化するのに便利です

shc が元の shell script から生成した c ファイルを眺めてみると(キレイで読みやすいコードで、読んでて楽しいです)、元の shell を RC4 で暗号化してバイナリで保持し、複合して実行してくれるようです
ファイルへの変更の痕跡のチェックとかいい感じで対タンパーチェックもしてくれているようです

shc のインストール

debian だと

sudo apt-get install shc

でオッケーです。Raspberry Pi の Raspbian もこれでオッケーでした

shc の使い方

man page を見ると例として

shc -v -r -T -f myscript.sh

とかで myscript.sh から myscript.sh.x というバイナリの実行形式をつくってくれるそうです。
因みに -T は「トレーサブル」オプションで、strace とか ptrace とかでトレースできちゃうようなバイナリをつくってくるそうです。いらないので私はつかってません

詳細な説明は文献1 のブログがすごくわかりやすかったです

エラー

で、表題のエラー

シバンがないことが原因かな?とか思いながらググってみたらやっぱり文献2のとおりでしたので、バイナリ化する shell の先頭行に

#!/bin/bash

を追加すると正常にバイナリ化できました

感想

「結論を最初に」ってよく言いますけど、思い切って「はじめに」よりも前に「結論」をもってきてみたんですけど、これ、案外いけてる構成な気がするんですがどうでしょ

futur works

生成された c のコードを例えば Obfuscator-LLVM みたいなオブフスケーターにかけてみたらどうなるかとか

references

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7