在许多情况下,我们需要保护我们的shell脚本源码不被别人轻易查看。这时,使用shc工具将shell脚本编译成二进制文件是一个有效的方法。本文将详细介绍如何在线和离线条件下安装shc,并将其用于编译你的脚本。

什么是SHC?

shc是一个由C语言编写的Shell脚本加密程序,它可以将你的脚本编译成二进制可执行文件,从而隐藏源码。

安装SHC-在线安装

如果你的机器能够连接到互联网,以下是在不同操作系统上安装shc的步骤:

Ubuntu:

sudo apt-get install shc

macOS:

brew install shc

CentOS:

yum install shc

Proxmox VE(PVE)

apt update 
apt install shc
apt install gcc -y

安装SHC-离线安装

如果你的机器无法连接到互联网,那么你可以在有网络的环境中下载 shc 源码包,然后离线安装。

1.在有网络的环境中下载 shc 源码包下载链接:https://github.com/neurobin/shc/archive/refs/tags/4.0.3.tar.gz

2.复制该文件到目标机器可以通过USB存储设备或者局域网进行传输。

3.在目标机器上安装 shc

tar -xvzf shc-4.0.3.tar.gz
cd shc-4.0.3
mkdir -p /usr/local/man/man1 #这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下;将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装
make sudo make install #这步要回答yes或者y,不能直接回车,否则会报错

4.验证安装安装完成后,可以通过以下命令检查shc是否已经成功安装:shc -v 如果能看到版本信息,则表示shc已经安装成功。

使用SHC编译脚本

1.假设你在 / 根目录下执行以下命令:

cd / # 确保在根目录

要生成一个静态链接的二进制文件,并且设置脚本的过期日期

shc -f vmicloud.sh -o vmicloud_binary -r -e 02/05/2025

上述代码释义:
-f vmicloud.sh:指定需要编译的 vmicloud.sh 脚本。
-o vmicloud_binary:指定生成的二进制文件名为 20250205。
-r:生成包含运行时资源的二进制文件(通常用于动态库或运行时需要的资源)。
-e 02/05/2025:设置脚本的过期日期为 2025 年 2 月 5 日。

shc 会生成名为 vmicloud.sh.x 与 vmicloud_binary 的二进制文件。

2.给生成的文件添加执行权限,即使 shc 将脚本编译成了二进制文件,仍然需要确保文件具有执行权限(vmicloud.sh.x 也是同理)

chmod +x vmicloud_binary

3.运行编译后的脚本你可以直接运行编译后的二进制文件:

./vmicloud_binary

这个文件也可以上传到你的服务器上分享给其他人用,假如你上传到服务器的连接为https://pve.vmicloud.top/down/UPW3C。那么可以直接写成如下格式,分享给他人使用

curl -kLf -o /usr/vmicloud_binary https://pve.vmicloud.top/down/UPW3C && chmod +x /usr/vmicloud_binary && /usr/vvmicloud_binary

备注:shc参数

shc 是一个用于加密 shell 脚本的工具,它可以将脚本转换为二进制可执行文件,以保护脚本内容不被轻易查看。以下是 shc 的一些常用参数及其说明:

  • -f 或 --file:指定要加密的脚本文件名。这是必须提供的参数。
  • -v 或 --verbose:详细模式,输出更多的编译信息。
  • -r:放松安全限制,生成的二进制文件可以在相同操作系统的不同系统上执行。
  • -T:生成可追踪的二进制文件。
  • -e 或 --expire:设置脚本的过期日期,格式为 dd/mm/yyyy
  • -m 或 --message:设置脚本过期时显示的消息。
  • -o 或 --output:指定输出的二进制文件名。
  • --static:生成静态链接的二进制文件,不依赖系统的动态链接库。

以上步骤将帮助你使用 shc 工具对 shell 脚本进行加密并生成静态链接的库文件,以保护脚本内容不被轻易查看或修改。

请注意,shc 使用的加密方法不是非常强大,因此不应该将其用作高安全性需求的场合。它更适合于防止脚本被轻易查看,而不是防止专业的逆向工程。

同时也要留意,这种方式不适用不同系统,比如在 mac 下转换的文件,无法在 Liunx 上运行。

发表评论

滚动至顶部