如何将 shell 脚本编译成二进制执行文件

发布时间 2023-04-18 15:11:32作者: wangzy-Zj

一、说明

很多人写了一些shell脚本,想给其他人用但是又不想公开源代码,所以就要对shell脚本进行加密处理,那么我们可以Shell 脚本编译器工具 (SHC) ,使用 shc 将 bash/shell 脚本编译为二进制文件,隐藏源代码并防止被被人修改的功能。由于在大多数操作系统上默认是不安装的, 因此需要手动安装。

shc的工作过程分为两步:

  • 将shell脚本转化为C语言源码

  • 将C语言源码进行编译链接得到二进制文件

二、安装

2.1 安装服务

[root@localhost wangzy]# yum -y install shc

2.2 书写测试脚本

书写一个 “hello world” 测试脚本

[root@localhost wangzy]# ls
[root@localhost wangzy]# vi wangzy.sh 
[root@localhost wangzy]# cat wangzy.sh 
#!/bin/bash
echo "hello world"

2.3 编译

# 方式一:直接编译
[root@localhost wangzy]# shc -f wangzy.sh 
[root@localhost wangzy]# ls
wangzy.sh  wangzy.sh.x  wangzy.sh.x.c

#方式二:加参数
[root@localhost wangzy]# shc -r -v -f wangzy.sh
[root@localhost wangzy]# ls
wangzy.sh  wangzy.sh.x  wangzy.sh.x.c

#说明:shc运行后会生成两个文件:
xxxx.sh.x 和 xxxx.sh.x.c
xxxx.sh.x 二进制文件,重命名后用 chmod +x xxxx.sh 赋予权限后可执行。默认自带执行权限
xxxx.sh.x.c 则是 C 编译后的C语言文件,无用,可以删除

2.4 重命名二进制文件

[root@localhost wangzy]# ls
wangzy.sh  wangzy.sh.x  wangzy.sh.x.c
[root@localhost wangzy]# rm -rf wangzy.sh.x.c 
[root@localhost wangzy]# mv wangzy.sh.x wangzy

#说明:shc运行后会生成两个文件:
xxxx.sh.x 和 xxxx.sh.x.c
xxxx.sh.x 二进制文件,重命名后用 chmod +x xxxx.sh 赋予权限后可执行
xxxx.sh.x.c 则是 C 编译后的C语言文件,无用,可以删除

2.5 测试

# 运行二进制文件
[root@localhost wangzy]# ./wangzy 
hello world

# cat发现文件已经无法查看
[root@localhost wangzy]# 

# 删除原始脚本
[root@localhost wangzy]# rm -rf wangzy.sh