SHELL

给SHELL脚本进行加密

浅时光博客 · 2月15日 · 2020年 11.3w 次已读

加密工具介绍

shc(Shell Sc文章来源(Source):https://dqzboy.comript Compiler)是一个用于将Shell脚本编译为可执行二进制文件的工具。它可以将Shell脚本转换为C语言代码,并将其编译为可执行的二进制文件,从而隐藏原始脚本的源代码。

以下是一些关于shc工具的主要特点和使用说明:

  • 保护脚本源代码: shc编译器会将Shell脚本转换为C语言代码,并生成一个可执行的二进制文件,从而隐藏了脚本的源代码。这可以防止他人查看或修改您的脚本。
  • 加密和压缩: shc还提供了加密和压缩选项,以进一步保护编译后的二进制文件。加密功能使用密码来加密生成的C代码,只有正确的密码才能运行二进制文件。
  • 平台兼容性: 编译的二进制文件在支持相应的Shell解释器的系统上运行。因此,通过shc编译的二进制文件可以在与原始脚本具有兼容Shell解释器的系统上运行,无需安装任何其他依赖项。
  • 使用简单: 使用shc非常简单。只需在命令行中执行shc命令,并指定要编译的源代码文件,shc将在当前目录生成一个可执行的二进制文件。

项目地址:https://github.com/neurobin/shc

1、下载、编译安装

由于 SHC 已长时间未更新,目前遇到了几个问题如下:

1、建议在加密 SHELL 脚本时使用 CentOS 7 系统安装 SHC 工具。在新版本Linux系统中安装的 SHC 工具对脚本加密后,在其他 低版本Linux 发行版上运行时,会出现 GLIBC 版本不兼容的问题。

2、加密后的二进制文件,执行过程中,可以通过ps -aux 查看到脚本里面的内容

[root@localhost ~]# mkdir -p /opt/soft && cd $_
[root@localhost soft]# wget https://github.com/neurobin/shc/archive/refs/tags/4.0.3.tar.gz

# 构建和安装软件
[root@localhost soft]# tar -xf 4.0.3.tar.gz 
[root@localhost soft]# cd shc-4.0.3/
[root@localhost shc-4.0.3]# mkdir -p /usr/local/man/man1/   # 创建目录这一步这个是必须的,没这个目录会报错

[root@localhost shc-4.0.3]# ./configure
[root@localhost shc-4.0.3]# make

# 安装
[root@localhost shc-4.0.3]# make install

2、对脚本进行加密

注意:脚本文件中一定到写上魔法字符 #!/bin/bash 不然无法加密

语法:shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-rvDSUHCABh] -f script

参数参数说明
-e <日期>设置脚本的过期日期(格式:dd/mm/yyyy)。过期后运行脚本会显示提示信息。
-m <消息>设置脚本过期时显示的消息(默认:”Please contact your provider”)。
-f <脚本文件>指定要编译的 Shell 脚本文件。
-i <选项>为 Shell 解释器设置内联选项(如 -e)。
-x <命令>设置执行命令的格式(如 exec('%s',@ARGV);)。
-l <选项>设置最后一个 Shell 选项(如 --)。
-o <输出文件>指定编译后的输出文件名。
-r放宽安全性,生成可再分发的二进制文件。
-v显示详细的编译过程。
-S启用 setuid,允许 root 调用程序(默认关闭)。
-D启用调试执行调用(默认关闭)。
-U使二进制文件不可追踪(默认关闭)。
-H启用额外的安全保护(硬化)。
-C显示许可证信息并退出。
-A显示摘要信息并退出。
-B为 BusyBox 编译脚本。
-h显示帮助信息并退出。
[root@localhost ~]# shc -h
shc Version 4.0.3, Generic Shell Script Compiler

[root@localhost ~]# cat > shc_srcipt.sh <<EOF
> #!/bin/bash
> echo "hello shell"
> EOF
[root@localhost ~]# bash shc_srcipt.sh 
hello shell

# 对上面的shell脚本进行加密
[root@localhost ~]# shc -v -f shc_script.sh -H -U -o shc_script
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc   shc_script.sh.x.c -o shc_script
shc: strip shc_script
shc: chmod ug=rwx,o=rx shc_script
  • 执行后,会在脚本所在目录生成两个文件
[root@localhost ~]# ls
shc_script  shc_script.sh  shc_script.sh.x.c
  • shc_script.sh.x.c :是脚本的源文件,可以直接删除。
  • shc_script :就是原来脚本加密后的可执行文件,可随意改名,不用赋权,shc处理的过程中有赋权这一步。

3、查看加密文件

[root@localhost ~]# cat shc_script

4、执行加密后的脚本

  • 注意:执行加密脚本时,通过bash xxx或者sh xxx是无法执行的
[root@localhost ~]# ./shc_script 
hello shell

5、常用选项应用示例

示例 1:基本编译

  • 将一个 Shell 脚本编译为二进制文件:
shc -f script.sh -o compiled_script
  • -f script.sh:指定要编译的脚本文件。
  • -o compiled_script:指定编译后的输出文件名。

示例 2:设置过期日期

  • 编译脚本并设置过期日期:
shc -f script.sh -o compiled_script -e 15/02/2020
  • -e 15/02/2020:设置脚本在 2020 年 2 月 15 日后过期。

示例 3:显示过期消息

  • 编译脚本并自定义过期时显示的消息:
shc -f script.sh -o compiled_script -e 15/02/2020 -m "This script has expired."
  • -m "This script has expired.":设置过期时显示的消息。

示例 4:启用详细编译输出

  • 编译脚本并显示详细的编译过程:
shc -f script.sh -o compiled_script -v
  • -v:启用详细输出。

示例 5:生成可再分发的二进制文件

  • 编译脚本并放宽安全性,生成可再分发的二进制文件:
shc -f script.sh -o compiled_script -r
  • -r:放宽安全性,允许二进制文件在其他系统上运行。

示例 6:增强安全性

  • 编译脚本并启用额外的安全保护(硬化):
shc -f script.sh -H -U -o compiled_script
  • -H:启用额外的安全保护。
  • -U:使二进制文件不可追踪

注意事项

使用shc编译生成的二进制文件只是将其源代码隐藏在可执行文件中,但通过执行ps -ef命令可以查看到正在运行的进程及其参数,包括编译后的二进制文件名称和路径。

这是因为编译后的二进制文件仍然需要Shell解释器来运行。当您执行编译后的二进制文件时,Shell解释器会创建一个新的进程,并将其显示在ps输出中。

文章来源(Source):https://dqzboy.com

请注意,shc工具主要用于隐藏和保护Shell脚本的源代码,以防止普通用户轻易查看或修改。它并不旨在提供绝对的安全性。如果您需要更高级别的代码保护,建议考虑其他技术,如加密存储、访问控制、数字签名等。


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/658.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!