服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 7621|回复: 1

使用shc加密shell脚本

[复制链接]
dirtysea 发表于 2011-11-7 14:35:04 | 显示全部楼层 |阅读模式
Shc可以用来对shell脚本进行加密,可以将shell脚本转换为一个可执行的二进制文件。经过shc对shell脚本进行加密后,会同时生成两种个新的文件,一个是加密后的可执行的二进制文件(文件名以.x结束),另一个是C语言的原文件(文件名以.x.c结束)。


安装:
(官网下载地址: http://www.datsi.fi.upm.es/~frosal/sources/)
# wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.6.tgz
# tar zvxf shc-3.8.6.tgz
# cd shc-3.8.6
# make test
# make strings
# make install

常用参数:
-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(编译的详细情况)

应用:
下面以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 -r -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还可以设置脚本的运行期限和自定义返回信息:
/usr/local/src/shc-3.8.7/shc -e 20/10/2010 -m "lianxi aaa@163.com" -v -r -f ./ex.sh-e:指定过期时间为2010年10月20日
-m:过期后打印出的信息;
-v: verbose
-r: 可在相同操作系统的不同主机上执行
-f: 指定源shell

说明:
经我测试,相同在操作系统,shc后的可执行二进制文件直接可以移植运行,但不同操作系统可能会出现问题,如我将源shell在CentOS5.4上加密后移到redhat as5u4上不能运行,出现“Floating point exception”错误提示,但移到另一台CentOS5.4上直接运行没问题。

在其它机器上运行可能遇到运行的时候就像死机了一样,没有任何输出,也终止不了。第一句最好不要加真实的执行语句,建议加#!/bin/bash,可以考虑追加了一个T参数试下!
shc -v -T -r -f name.sh
 楼主| dirtysea 发表于 2011-11-11 15:28:21 | 显示全部楼层
#make test 时候出现错误
[25749] PAUSED... Hit return!

回车继续下一步
#make strings
c;;;8
>nb({
sVDd)#
n&s?_V
N4ygT[
*** ?o you want to probe expiration date?
*** Please try... make expiration

继续下一步
# make expiration
Please contact your provider
make: *** [til_yesterday] 错误 1


继续下一步
# make install
install -c -m 644 shc.1 /usr/local/man/man1/
install: 目标 “/usr/local/man/man1/” 不是目录: 没有那个文件或目录


# mkdir /usr/local/man/man1/
#make install
*** Installing shc and shc.1 on /usr/local
*** ?o you want to continue? y
install -c -s shc /usr/local/bin/
install -c -m 644 shc.1 /usr/local/man/man1/

完成

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-3-29 09:21 , Processed in 0.090308 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表