首页 > 系统相关 >shc加密shell脚本总结

shc加密shell脚本总结

时间:2024-09-30 09:24:03浏览次数:7  
标签:shell 加密 monitor long trx sh shc

shc介绍

shc是shell编译器(Shell Compiler)的缩写, 它可以对shell脚本进行编译和加密。它能够将shell脚本编译为可执行的二进制文件,其中包含了脚本的功能和逻辑,而不暴露源代码。可以说shc就是一个加密shell脚本的工具。shc的官方网址为:http://www.datsi.fi.upm.es/~frosal/sources/。shc在github上没有对应的链接。其实也能理解,不是每一个人都喜欢将自己的项目上传到github上。

官方文档关于shc的描述说明如下:

     shc creates a stripped  binary  executable  version  of  the
     script specified with -f on the command line.

     The binary version will get a .x extension appended and will
     usually  be  a  bit  larger  in size than the original ascii
     code. Generated C source code is saved in a  file  with  the
     extension .x.c

     If you supply an expiration date with the -e option the com-
     piled  binary  will  refuse to run after the date specified.
     The message "Please contact your provider" will be displayed
     instead.  This message can be changed with the -m option.

     You can compile any kind of shell script, but  you  need  to
     supply valid -i, -x and -l options.

     The compiled binary will still be  dependent  on  the  shell
     specified  in  the  first  line  of  the  shell  code  (i.e.
     #!/bin/sh), thus shc does not create completely  independent
     binaries.

     shc itself is not a compiler such as cc, it  rather  encodes
     and encrypts a shell script and generates C source code with
     the added expiration capability. It  then  uses  the  system
     compiler  to compile a stripped binary which behaves exactly
     like the  original  script.  Upon  execution,  the  compiled
     binary  will  decrypt and execute the code with the shell -c
     option.  Unfortunatelly, it will  not  give  you  any  speed
     improvement as a real C program would.

     shc's main purpose is to protect  your  shell  scripts  from
     modification  or  inspection.  You can use it if you wish to
     distribute your scripts but don't want  them  to  be  easily
     readable by other people.

shc安装

sqc的安装有多种方式,可以根据适合自己的方式来安装,因为各自环境不一样,可能选择的安装方式不一样。

yum安装

# yum -y install shc

不过有些Linux版本的yum源可能没有shc包,所以这种方式只适用yum源有shc包的环境。

离线安装

根据对应的Linux发行版本,从https://pkgs.org/ 搜索shc对应平台的rpm包,如下所示,当前测试环境的rpm包下载地址[1]

# yum install -y shc-4.0.3-1.el8.x86_64.rpms

源码安装

源码下载地址http://www.datsi.fi.upm.es/~frosal/sources/

mkdir /usr/local/man
mkdir /usr/local/man/man1  #install时会把man文件放入该目录。

tar vxf shc-3.8.9.tgz  && cd shc-3.8.9
make test
make strings
make install

shc使用

下面是shc比较常用的参数说明,更多参数说明请参考man手册或官方文档。

参数 参数说明
-h 显示帮助信息并退出
-f 指定需要加密的shell脚本
-v 参数-v表示verbose模式,输出更详细的编译日志
-r 可以在相同操作系统的不同系统中执行,也就是放宽安全限制,生成可再分发的二进制文件
-o 输出文件名,也可以不指定
-f 指定shell脚本名称
-e 指定过期日期
-m 指定过期后的提示信息
-U 使二进制无法被追踪,默认不开启
-H 强化:额外的安全保护,默认不开启,它需要shell不支持参数

加密shell脚本的例子

# shc -v -f monitor_long_trx.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc   monitor_long_trx.sh.x.c -o monitor_long_trx.sh.x
shc: strip monitor_long_trx.sh.x
shc: chmod ug=rwx,o=rx monitor_long_trx.sh.x

如下所示,脚本执行后生成了两个文件,其中monitor_long_trx.sh.x是加密过后的可执行的二进制文件。monitor_long_trx.sh.x.c是生成monitor_long_trx.sh.x的原文件(C语言),也就是说编译这个C源代码文件可以创建上面加密的monitor_long_trx.sh.x文件。

# ls -lrt monitor_long_trx*
-rw-r--r-- 1 root root  10185 Sep 27 15:51 monitor_long_trx.sh
-rw-r--r-- 1 root root  70193 Sep 29 22:16 monitor_long_trx.sh.x.c
-rwxrwxr-x 1 root root  24584 Sep 29 22:16 monitor_long_trx.sh.x
# file monitor_long_trx.sh.x
monitor_long_trx.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=906ccbd32b4e0fa3307be46ff7736bbfac9be25c, stripped
# file monitor_long_trx.sh.x.c
monitor_long_trx.sh.x.c: ASCII text

不过这个C源代码文件,跟你想象的C语言源代码文件可能有点不一样。如下所示,

shc还提供了一种设定有效执行期限的方法,编译生成的可执行二进制文件在过了这个有效性后,就不能执行。

shc -e 09/20/2024 -v -f monitor_long_trx.sh

shc -e 09/20/2024 -v -m "the script has expired, please contact your provierder [email protected]" -f monitor_long_trx.sh 
# shc -e 09/20/2024 -v -f monitor_long_trx.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc   monitor_long_trx.sh.x.c -o monitor_long_trx.sh.x
shc: strip monitor_long_trx.sh.x
shc: chmod ug=rwx,o=rx monitor_long_trx.sh.x

一些简单常用的例子



shc -f monitor_long_trx.sh

shc -v -r -f monitor_long_trx.sh -o mon_long_trx.sh

shc -v -r -u -H -f monitor_long_trx.sh -o mon_long_trx.sh

shc -v -r -e 09/20/2025 -m "the script has expired..."  -f monitor_long_trx.sh -o mon_long_trx.sh

shc评测

shc编译出来的二进制可执行文件,可能比原shell脚本在文件大小上稍微大上一些,相比gzexe和Bashfuscator等工具,它要可靠很多(Bashfuscator就非常不可靠,有些混淆出来的脚本执行会报错)。从个人简单的测试和实践来看,这个工具非常好用,而且用途非常广泛。

那么shc加密过后的可执行二进制文件,能否被解密呢? 答案是低版本sqc生成的加密二进制可执行文件可以被解密,可以被工具UnSHc[2]解密。而高版本shc(4.x)生成加密文件越来越难解密(暂时不能解密,不代表不能被后续的工具或方法解密)。

下面是UnSHc中的介绍说明,有兴趣可以看看了解一下

Due to the many problems since shc 4.0.3, there seems to be a need for clarification. In shc 4.0.3 many structural changes have been incorporated, so that shc now makes use of various security mechanisms provided by the linux-kernel itself. Therefore, it is now almost impossible to extract the original shell script at all with current UnSHc version, if the new shc version was used. This requires a more in-depth approach, which means that a modified bash or a modified linux-kernel is needed to bypass the security measures. `

参考资料
[1]

1: https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/s/shc-4.0.3-1.el8.x86_64.rpm

[2]

2: https://github.com/yanncam/UnSHc/

标签:shell,加密,monitor,long,trx,sh,shc
From: https://www.cnblogs.com/kerrycode/p/18441188

相关文章

  • shell编程五
    10.循环10.1循环概述循环类型说明for循环最常用的循环,2种格式while循环当型循环while可以加入条件,死循环,读取文件dountil循环直到循环极少用10.2for循环10.2.1最常用的for循环格式#最常用的一种for变量in候补清单(列表)do命令doneforn......
  • 使用异或操作实现字符串加密与解密
    异或加密是一种简单而有效的加密技术,它的特点是同一密钥可用于加密和解密,以下是一个例子:usingSystem;usingSystem.Text;publicstaticclassEncryption{///<summary>///bytes数据通过encryptCode进行异或(加密|解密)///将传入的bytes作为返回值,不再额外分......
  • shell脚本——检索mysql数据库中得用户,如果没有就创建
     #!/bin/bash#author:goujinyangset-eUSER1=mysqlsiUSER2=dbqueryUSER3=dboperUSER4=yyzcUSERS=($USER1$USER2$USER3$USER4)USER_PASS=123123#MySQL用户名和密码MYSQL_USER="root"MYSQL_PASSWORD="Root#123"#MYSQL_HOST="local......
  • 内网IP地址配置SSL证书实现HTTPS加密访问教程
    很多小伙伴需要内网IP地址也实现HTTPS加密,而就目前来说,支持内网IP地址https加密的SSL证书有锐安信、CFCA等,当我们获取到内网IPSSL证书后,需要在服务器(常见类型如Nginx,Apache,Tomcat,IIS等)上完成配置。其实内网IP地址实现https认证的过程与域名SSL证书安装教程类似,我们在前面的教......
  • 公网内网IP地址申请SSL证书实现HTTPS加密指南
    如今,HTTPS已经成为安全保障网站的首要选择,而获得SSL证书则是实现HTTPS加密的先决条件。众所周知,SSL证书能为域名网站实现HTTPS加密,但有些企事业单位的网站仅支持IP地址访问,那么IP地址想要实现HTTPS加密又该如何申请SSL证书呢?公网内网IP地址都可以申请吗?需要哪些条件呢?请看下文......
  • 《掌握Shell脚本:从入门到精通的实用指南》
    目录引言一、Shell变量——数组二、表达式与运算符——表达式(一)算术表达式(二)逻辑表达式(三)算术运算符(四)整数关系运算符(五)字符串检测运算符(六)运算符三、流程控制语句——多命令组合1、基本if语句2、if...else语句3、if...elif...else语句4、使用逻辑运算符&&和......
  • 初学者必看:Shell 编程入门与应用概述
     目录 引言一、Shell概述——什么是shell?二、Shell概述——shell功能三、Shell概述——命令解释四、Shell概述——程序执行1、创建shell文件2、运行Shell脚本有两种方法:①作为可执行程序②作为解释器参数五、Shell概述——输入输出重定向1、输出重定向(>)2、输......
  • shell 变量里的变量
    前言全局说明变量里的变量。一、说明环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)pythonPython2.7.17(default,Mar82023,18:40:28)[GCC7.5.0]onlinux2pytho......
  • Windows 11 24H2新特性解析:优化安装程序与BitLocker加密管理
    Windows1124H2新特性解析:优化安装程序与BitLocker加密管理随着Windows操作系统的不断更新,微软致力于为用户提供更加流畅、安全的系统体验。在最新的Windows1124H2版本中,微软对安装程序进行了显著改进,同时引入了新的安全特性,其中BitLocker加密的变化尤为引人注目。本文......
  • golang shell
    packageshellimport( "context" "fmt" "os/exec" "time")//自定义输出结构体typecustomOutputstruct{ outPutchanstring resetCtxchanstruct{}}//Write将输出写入到customOutput结构体中,并通知重置超时。func(ccustomOutput......