linux上将sh脚本文件打包成二进制程序文件

发布于:2025-03-08 ⋅ 阅读:(155) ⋅ 点赞:(0)

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