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

一、说明

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

shc的工作过程分为两步:

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

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

二、安装

2.1 安装服务

# 配置epel源
[root@localhost wangzy]# yum -y install wget
[root@localhost wangzy]# wget -P /etc/yum.repos.d/ "http://mirrors.aliyun.com/repo/Centos-7.repo"
[root@localhost wangzy]# yum -y install epel-release

# 安装gcc环境
[root@localhost wangzy]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc

# 安装服务
[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语言文件,无用,可以删除

如果打包不成功的话,shc -h最下面有environment环境要求,要在保证满足。

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 测试

# 运行二进制文件【不要用sh 文件名 方式执行】
[root@localhost wangzy]# ./wangzy 
hello world

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

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

附加:

shc反编译,待后续

 

posted on 2023-04-18 15:02  wangzy-Zj  阅读(1493)  评论(1编辑  收藏  举报