您的位置:首页 > 运维架构 > Shell

shell脚本转换成二进制的可执行文件方法--加密

2016-03-13 14:22 1336 查看


http://www.360doc.com/content/14/0507/14/10058718_375504586.shtml

http://www.linuxidc.com/Linux/2014-12/110612.htm

http://www.jb51.net/article/58853.htm


第一种方法(gzexe):

这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。

它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。

使用方法:

gzexe file.sh

它会把原来没有加密的文件备份为 file.sh~ ,同时 file.sh 即被变成加密文件;

第二种方法(shc):

使用 shc 对 Linux shell 脚本加密.

shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、密码等不希望公开的问题.

shc的下载地址:              
http://download.chinaunix.net/download/0010000/9479.shtml
安装:

tar zxvf shc-3.8.tgz

cd shc-3.8

make test

make

make test

make strings

make install

使用方法:

shc -r -f script-name

运 行后会生成两个文件,script-name.x 和 script-name.x.c.   其中script-name.x是加密后的可执行的二进制文件;用./script-name即可运行,script-name.x.c是生成 script-name.x的原文件(c语言).

 
-----------------------------------------------------------------------
 
如果你的shell脚本包含了敏感的口令或者其它重要信息, 而且你不希望用户通过ps -ef(查看系统每个进程的状态)捕获敏感信息. 你可以使用shc工具来给shell脚本增加一层额外的安全保护. shc是一个脚本编译工具, 使用RC4加密算法, 它能够把shell程序转换成二进制可执行文件(支持静态链接和动态链接). 该工具能够很好的支持: 需要加密, 解密, 或者通过命令参数传递口令的环境.
shc主页: 
http://www.datsi.fi.upm.es/%7Efrosal/ 现在的版本是3.8.6(shc-3.8.6.tgz), 以此为例介绍shc的安装及应用:
准备:

首先你需要检查系统是否安装了gcc编译器, 以Fedora Core 6为例介绍gcc的检查和安装: 

# rpm -qa|grep compat-gcc 

compat-gcc-34-3.4.6-4 

如果没有安装, 按下面步骤安装gcc 

# wget ftp://mirrors.kernel.org/fedora/core/6/i386/os/Fedora/RPMS/compat-gcc-34-3.4.6-4.i386.rpm 

然后 

# ln -s /usr/bin/gcc34 /usr/bin/cc
安装:

# wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.6.tgz 

# tar vxf shc-3.8.6.tgz 

# cd shc-3.8.6 

# make test 

# make strings 

# make install
应用:

下面以mysql数据库备份(备份文件通过ftp上传到一台远程的服务器)脚本为例: 

############################### mysql_backup.sh ############################## 

#!/bin/sh
newtime=`date +%m-%d-%y_%I%M%p` 

mysqldump -u ****** -p ****** dbname | gzip > /Users/****/Documents/dbName_$newtime.sql.gz 

echo “backup of dbname” 

curl –upload-file dbname$newtime.sql.gz –url “ftp://*****:*****@host/” 

echo “ftp of dbname done”
############################### mysql_backup.sh ##############################
1). 加密脚本.
# shc -v -f mysql_backup.sh 

-v: 是verbose模式,输出更详细编译日志. -f: 指定脚本的名称.
上面命令在屏幕上的输出: 

shc shll=sh 

shc [-i]=-c 

shc [-x]=exec ‘%s’ “$@” 

shc [-l]= 

shc opts= 

shc: cc mysql_backup.sh.x.c -o mysql_backup.sh.x 

shc: strip mysql_backup.sh.x 

shc: chmod go-r mysql_backup.sh.x
我们可以看到生成了动态链接可执行二进制文件mysql_back.sh.x和C源文件mysql_backup.sh.x.c, 注意生成的二进制文件因为是动态链接形式, 所以在其它平台上不能运行:
mysql_backup.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 

dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
2). 生成静态链接的二进制可执行文件.
不过, 我们可以通过下面的方法生成一个静态链接的二进制可执行文件:
# CFLAGS=-static shc -r -f mysql_backup.sh 

# file mysql_backup.sh.x 

mysql_backup.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 

statically linked, for GNU/Linux 2.6.9, stripped
提示: 通过sch加密后的脚本文件很安全吗? 

一般来说是安全的, 不过可以使用gdb和其它的调试工具获得最初的源代码. 如果你需要更加安全的方法, 可以考虑使用wzshSDK.
另外, sch还可以设置脚本的运行期限和自定义返回信息: 

shc -e 03/31/2007 -m “the mysql backup script is now out of date.” -f mysql_back.sh
-e表示脚本将在2007年3月31日前失效, 并根据-m定义的信息返回给终端用户.
3). 二进制文件的剖析

有兴趣的朋友可以参阅下面的文章: 

Paranoid Penguin - Limitations of shc, a Shell Encryption Utility
你好 shc 能不能在64位的机子上运行我有台64位的服务器 OS 为64位的rhel4up2 执行加密后的脚本出错 

test.sh.x: has expired! 

Please contact your provider 

是什么问题 估计在运行命令的时候-e选项指定的日期已经失效, 注意看一下服务器的时间是否正确.
在64(OS为64位)位的机子加-e 和不加 -e 还是报那样的错误,服务器的时间没有问题,我在32位的机子上测试完全正常,你可以在64位测试以下
 
 
 
下面就说明一下shc的安装,参数,以及使用示例:

下载安装:

(官网下载地址: http://www.datsi.fi.upm.es/~frosal/sources/)

# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz

# cd shc-3.8.7

# make

# make install

(仅用make就可以完成安装,运行shc时要指出绝对路径;用make install,将shc安装到/usr/local/bin下,可以直接运行)

常用参数:

-e date 

Expiration date in dd/mm/yyyy format [none](指定过期日期)

-m message

message to display upon expiration ["Please contact your provider"](指定过期提示的信息)

-f script_name

File name of the script to compile(指定要编译的shell的路径及文件名)

-r Relax security. 

Make a redistributable binary which executes on different systems running the same operat-ing system.(可以相同操作系统的不同系统中执行)

-v Verbose compilation(编译的详细情况)

使用示例:

[root@centos54 tmp]# /usr/local/src/shc-3.8.7/shc -e 20/10/2010 -m "contact xxx@163.com" -v -r -f ./ex.sh

-e:指定过期时间为2010年10月20日

-m:过期后打印出的信息;

-v: verbose

-r: 可在相同操作系统的不同主机上执行

-f: 指定源shell
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: