shc gzexe 将shell脚本转换为二进制的可执行文件

分类:shell编程 阅读:76546 次

第一种方法(gzexe):
这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。
它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。
使用方法:
gzexefile.sh
它会把原来没有加密的文件备份为file.sh~,同时file.sh即被变成加密文件;

第二种方法(shc):
使用shc对Linuxshell脚本加密.
shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、密码等不希望公开的问题.
shc的下载地址:
http://download.chinaunix.net/download/0010000/9479.shtml
安装:
tarzxvfshc-3.8.tgz
cdshc-3.8
maketest
make
maketest
makestrings
makeinstall
使用方法:
shc-r-fscript-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编译器,以FedoraCore6为例介绍gcc的检查和安装:
#rpm-qa|grepcompat-gcc
compat-gcc-34-3.4.6-4
如果没有安装,按下面步骤安装gcc
#wgetftp://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

安装:
#wgethttp://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.6.tgz
#tarvxfshc-3.8.6.tgz
#cdshc-3.8.6
#maketest
#makestrings
#makeinstall

应用:
下面以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“backupofdbname”
curl?upload-filedbname$newtime.sql.gz?url“ftp://*****:*****@host/”
echo“ftpofdbnamedone”

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

1).加密脚本.

#shc-v-fmysql_backup.sh
-v:是verbose模式,输出更详细编译日志.-f:指定脚本的名称.

上面命令在屏幕上的输出:
shcshll=sh
shc[-i]=-c
shc[-x]=exec‘%s’“$@”
shc[-l]=
shcopts=
shc:ccmysql_backup.sh.x.c-omysql_backup.sh.x
shc:stripmysql_backup.sh.x
shc:chmodgo-rmysql_backup.sh.x

我们可以看到生成了动态链接可执行二进制文件mysql_back.sh.x和C源文件mysql_backup.sh.x.c,注意生成的二进制文件因为是动态链接形式,所以在其它平台上不能运行:

mysql_backup.sh.x:ELF32-bitLSBexecutable,Intel80386,version1(SYSV),
dynamicallylinked(usessharedlibs),forGNU/Linux2.6.9,stripped

2).生成静态链接的二进制可执行文件.

不过,我们可以通过下面的方法生成一个静态链接的二进制可执行文件:

#CFLAGS=-staticshc-r-fmysql_backup.sh
#filemysql_backup.sh.x
mysql_backup.sh.x:ELF32-bitLSBexecutable,Intel80386,version1(SYSV),
staticallylinked,forGNU/Linux2.6.9,stripped

提示:通过sch加密后的脚本文件很安全吗?
一般来说是安全的,不过可以使用gdb和其它的调试工具获得最初的源代码.如果你需要更加安全的方法,可以考虑使用wzshSDK.

另外,sch还可以设置脚本的运行期限和自定义返回信息:
shc-e03/31/2007-m“themysqlbackupscriptisnowoutofdate.”-fmysql_back.sh

-e表示脚本将在2007年3月31日前失效,并根据-m定义的信息返回给终端用户.

3).二进制文件的剖析
有兴趣的朋友可以参阅下面的文章:
ParanoidPenguin-Limitationsofshc,aShellEncryptionUtility

你好shc能不能在64位的机子上运行我有台64位的服务器OS为64位的rhel4up2执行加密后的脚本出错
test.sh.x:hasexpired!
Pleasecontactyourprovider
是什么问题估计在运行命令的时候-e选项指定的日期已经失效,注意看一下服务器的时间是否正确.

在64(OS为64位)位的机子加-e和不加-e还是报那样的错误,服务器的时间没有问题,我在32位的机子上测试完全正常,你可以在64位测试以下

下面就说明一下shc的安装,参数,以及使用示例:
下载安装:
(官网下载地址:http://www.datsi.fi.upm.es/~frosal/sources/)
#wgethttp://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
#cdshc-3.8.7
#make
#makeinstall
(仅用make就可以完成安装,运行shc时要指出绝对路径;用makeinstall,将shc安装到/usr/local/bin下,可以直接运行)

常用参数:
-edate
Expirationdateindd/mm/yyyyformat[none](指定过期日期)

-mmessage
messagetodisplayuponexpiration["Pleasecontactyourprovider"](指定过期提示的信息)

-fscript_name
Filenameofthescripttocompile(指定要编译的shell的路径及文件名)

-rRelaxsecurity.
Makearedistributablebinarywhichexecutesondifferentsystemsrunningthesameoperat-ingsystem.(可以相同操作系统的不同系统中执行)

-vVerbosecompilation(编译的详细情况)

使用示例:
[root@centos54tmp]#/usr/local/src/shc-3.8.7/shc-e20/10/2010-m"contactxxx@163.com"-v-r-f./ex.sh
-e:指定过期时间为2010年10月20日
-m:过期后打印出的信息;
-v:verbose
-r:可在相同操作系统的不同主机上执行
-f:指定源shell