linux上将sh脚本文件打包成二进制程序文件
shc 是一个将 Shell 脚本编译为二进制可执行文件的工具。它通过将脚本嵌入到 C 代码中并编
译生成二进制文件,从而增加脚本的反编译难度。
shc工具
介绍
shc的命令格式为
shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-ABCDhUHvSr] -f script.sh
shc创建命令行上使用-f指定的脚本的剥离二进制可执行版本。
如果未使用[-o outfile]选项定义outfile,则默认情况下会附加.x扩展名,并且通常会比原始ascii代码大一点。生成的C源代码保存在扩展名为.x.c的文件中或使用适当选项指定的文件中。
如果您使用-e选项提供到期日期,编译后的二进制文件将拒绝在指定日期之后运行。将显示消息请联系您的提供商。可以使用-m选项更改此消息。
可以编译任何类型的外壳脚本,但需要提供有效的 -i、-x 和 -l 选项。
编译后的二进制文件仍然依赖于shell代码第一行中指定的shell(即 #!/bin/sh
),因此shc不会创建完全独立的二进制文件。
shc本身不是一个编译器,比如cc,它编码和加密外壳脚本,并生成具有附加过期功能的C源代码。然后它使用系统编译器编译一个剥离的二进制文件,其行为与原始脚本完全相同。执行后,编译后的二进制文件将使用shell-c选项解密并执行代码。不幸的是,它不会像真正的C程序那样给你任何速度提升。
shc的主要目的是保护您的shell脚本免受修改或检查。如果您希望分发您的脚本但不希望它们易于被其他人阅读,您可以使用它。
选项
-e date:到期日期为dd/mm/yyyy格式[none]
-m message :到期后显示的消息[“Please contact your provider”]
-f script_name:要编译的脚本的文件路径
-i inline_option:shell解释器的内联选项,即:-e
-x command :eXec命令,作为printf格式即:exec(\‘%s\’,@ARGV);
-l last_option:最后一个shell选项,即:–
-o outfile:输出到outfile指定的文件
-r: Relax security。制作一个可再分发的二进制文件,在运行相同操作系统的不同系统上执行。您可以使用此选项发布您的二进制文件供其他人使用
-v:详细编译
-S:为root可调用程序打开setuid[OFF]
-D:打开调试执行调用
-U:使二进制文件不可追踪(使用strace、ptraces、truss等)
-H:Hardening。无需root访问要求的额外安全标志,可防止转储、代码注入、cat /proc/pid/cmdline、ptraces等…此功能是实验性的,可能不适用于所有系统。它需要born shell(sh)脚本
-C:显示许可证并退出
-A:显示摘要并退出
-B:为BusyBox编译
-h:显示帮助并退出
示例
注意,脚本文件中第一行,必须添加 “#!/bin/sh
”,否则会出现 shc: invalid first line in script: xxx 的错误。
编译一个脚本,该脚本可以在启用跟踪选项的情况下在其他系统上运行(没有-U标志):
shc -f myscript.sh -o mybinary
编译一个无法追踪的二进制文件:
shc -Uf myscript.sh -o mybinary
编译一个不需要root访问权限的不可追踪的二进制文件(实验性):
shc -Hf myscript.sh -o mybinary