Shell脚本加密与解密

我们写的shell脚本里面通常会包含帐号密码等信息或者你不想让别人看到的信息,那么把写好的shell脚本进行简单的加密显得有些必要了。

常用的shell加密方法有两种,一种是通过gzexe加密,另一种是通过shc加密。

我们先给一个简单的脚本,然后用它来进行加密解密演示,脚本abc.sh内容如下

1 2

#!/bin/bash echo "hello world!"

gzexe加密与解密shell脚本

(tips:绿色为输出内容)

1 2 3 4 5 6 7 8 9

bash abc.sh         # 执行后显示内容 hello world! gzexe abc.sh         # 压缩 abc.sh:  18.8% ls -l                # 压缩完成后, abc.sh~ 是原文件 , abc.sh 是压缩后的二进制文件 abc.sh   abc.sh~ mv abc.sh abc sh abc             # 压缩后再执行正常 hello world!

我们只需要把abc这个二进制文件传到机器上执行就可以了,并不需要关心它的源码,别人也不能通过这个文件看到shell代码,我们cat显示一下这个文件发现内容全部乱码,如图(乱码内容未全部截图出来)。

但是通过gzexe加密的shell脚本并不是很安全,细看我们如何通过abc这个乱码的执行文件还原成原来的shell脚本。

但是通过gzexe加密的shell脚本并不是很安全,细看我们如何通过abc这个乱码的执行文件还原成原来的shell脚本。

我们看到内容中有一行叫skip=44,这一行非常重要,它告诉我们从第44行起才是原来压缩之前文件的内容,前面都是压缩软件附加上去的内容。虽然从44行往后面也全部都是乱码,我们也读不懂这些内容,但是gzip程序会告诉我们的。

首先我们把第44行以后的内容过滤出来生成一个.gz结尾文件,然后解压,文件内容就都出来了。

(tips:绿色为输出内容)

1 2 3 4 5 6

tail -n +44 abc > /tmp/a.gz       # 我们把第44行以后的文件写成一个.gz结尾的压缩文件 cd /tmp gunzip a.gz            # 解压生成的文件 cat a                  # 解压后的文件和压缩文件同名 #!/bin/bash echo "hello world!"

我们看到解压之后,文件里面的内容和原来压缩之前是一样的,成功完成解密。

shc加密shell脚本

shc是比gzexe安全的多的加密软件,不过网络说通过gdb调试也是可以显示内容的,不过我没有尝试,网上也没啥资料。

shc官方网站:http://www.datsi.fi.upm.es/~frosal/sources/

shc安装过程

1 2 3 4 5

wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz tar zxvf shc-3.8.9.tgz cd shc-3.8.9 mkdir -p /usr/local/man/man1/       # 这个是必须的,帮助文件会写到这里,没这个目录会报错 make install

安装完成后,我们再创建个文件做测试,文件123.sh内容如下

1 2

#!/bin/bash echo "hello ITDHZ.COM"

还是只有一行echo命令,简单就好,哈哈~~ , 下面是测试

1 2 3

shell > shc -r -f 123.sh shell > ls 123.sh  123.sh.x  123.sh.x.c

通过shc加密后,原文件123.sh还在,又另外生成两个文件,123.sh.x是加密后可执行的二进制文件,123.sh.x.c 是 123.sh.x 的源文件(注意是C语言版本的源文件)

文件加密是成功了,但是加密后的文件执行时啥也不显示,郁闷鸟。还好shc有比较好的帮助文件,通过shc -h看了下,发现编译的时候少了个参数-T,这样才能回显echo的内容。

1

shc -r -T -f 123.sh

另外shc在加密的过程中还可以设置生成二进制执行文件的过期时间和过期说明,例如

1 2 3 4

shc -r -T -e "31/10/2004" -m "this file is expiration date." -f 123.sh ./123.sh.x ./123.sh.x: has expired! this file is expiration date.

更多shc的用法,请大家自行研究shc的帮助文件。

另外要注意的一点是:

gzexe生成的二进制文件 可以通过 /bin/bash  xxx 命令来执行。

shc生成的二进制文件只能通过 ./xxx 命令来执行,不能通过 /bin/bash xxx 来执行。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏landv

CMD批处理——forfiles命令使用,自动删除过期备份文件

2161
来自专栏Linyb极客之路

APP架构设计经验谈:接口的设计

App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉。

1433
来自专栏运维技术迷

详解mysql-bin.000001文件来源以及处理方法

今天看服务器探针,吓了我一跳,发现硬盘空间剩余6.2G左右。 ? 仔细想想没有往服务器上传什么大的文件,也不能被黑(不起眼的小网站服务器)。于是,就逐一的...

3004
来自专栏乐沙弥的世界

Linux 下卸载MySQL Enterprise Monitor

    MySQL Enterprise Monitor是专门为MySQL数据库而设计的一款企业级监控,能非常好地与MySQL各方面特性相结合,包括:MySQ...

882
来自专栏Linux驱动

1.Linux电源管理-休眠与唤醒

当我们休眠时,如果想唤醒,则需要添加中断唤醒源,使得在休眠时,这些中断是设为开启的,当有中断来,则会退出唤醒,常见的中断源有按键,USB等.

4432
来自专栏java一日一条

29 个你必须知道的 Linux 命令

虽然Linux发行版支持各种各样的饿GUI(graphical user interfaces),但在某些情况下,Linux的命令行接口(bash)仍然是简单快...

1053
来自专栏专注 Java 基础分享

Struts2 控制文件上传下载

     之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进...

2337
来自专栏三木的博客

Linux shell 程序设计3——命令行程序

1、date:显示、设置系统的日期和时间。 $date 2011年 01月 30日 星期日 14:43:35 CST $date 012309232011 执行...

2076
来自专栏大内老A

[WCF安全系列]绑定、安全模式与客户端凭证类型:BasicHttpBinding

整个安全传输是在WCF的信道层进行的,而绑定是信道层的缔造者,所以终结点采用哪种类型的绑定以及对绑定的属性进行怎样的设置决定了信道层最终采用何种机制实现消息的安...

2389
来自专栏北京马哥教育

高性能HTTP加速器Varnish(安装配置篇)

一、安装Varnish Varnish的安装非常简单,下面逐步介绍: 1、安装前的准备 Varnish安装环境如下表1所示: 表1 主机名 操作系统 IP地址...

3086

扫码关注云+社区

领取腾讯云代金券