LoginSignup
7
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-19

結論

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

はじめに

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

7
7
0

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
  3. You can use dark theme
What you can do with signing up
7
7