Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381624
  • 博文数量: 69
  • 博客积分: 1486
  • 博客等级: 上尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 18:38
个人简介

...

文章分类
文章存档

2024年(1)

2021年(2)

2020年(2)

2016年(9)

2015年(34)

2011年(14)

2010年(7)

分类: LINUX

2015-06-05 14:49:09

shell脚本加密
如何保护自己编写的shell程序

要保护自己编写的shell脚本程序,方法有很多,最简单的方法有两种:1、加密 2、设定过期时间,下面以shc工具为例说明:

一、下载安装shc工具
shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.
 
# wget ~frosal/sources/shc-3.8.7.tgz

安装:
# tar zxvf shc-3.8.7.gz

# cd shc-3.8.7


# mkdir /usr/local/man/man1/ (install时会把man文件放入该目录,如果该目录不存在需提前建好) 这一步需要root权限

# make test
# make strings
# make install   这一步需要root权限


二、加密方法:
shc -r -f script-name   注意:要有-r选项, -f 后跟要加密的脚本名.
运行后会生成两个文件,script-name.x 和 script-name.x.c
script-name.x是加密后的可执行的二进制文件.
./script-name 即可运行.
script-name.x.c是生成script-name.x的原文件(c语言)
 

# shc -v -f test.sh

-v是verbose模式, 输出更详细编译日志;

-f 指定脚本的名称.

# ll test*

-rwxr-xr-x   1 oracle oinstall    1178 Aug 18 10:00 test.sh
-rwx--x--x   1 oracle oinstall    8984 Aug 18 18:01 test.sh.x
-rw-r--r--   1 oracle oinstall   14820 Aug 18 18:01 test.sh.x.c

# file test.sh.x

test.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

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

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

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

$ CFLAGS=-static shc -r -f test.sh

$ file testup.sh.x

三. 通过sch加密后的脚本文件很安全吗?

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

$ shc -e 03/31/2007 -m "the mysql backup scrīpt is now out of date." -f test.sh

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

常用参数:
-e date (指定过期日期)
-m message (指定过期提示的信息) 
-f script_name(指定要编译的shell的路径及文件名)
-r   Relax security. (可以相同操作系统的不同系统中执行)
-v   Verbose compilation(编译的详细情况)

使用方法:
shc -v -f abc.sh
-v 是现实加密过程
-f 后面跟需要加密的文件  
运行后会生成两个文件: 
abc.sh.x 和 abc.sh.x.c
abc.sh.x为二进制文件,赋予执行权限后,可直接执行。更改名字mv abc.sh.x a.sh 
abc.sh.x.c 是c源文件。基本没用,可以删除

另shc还提供了一种设定有效执行期限的方法,过期时间,如:
# shc -e 28/01/2012 -m "过期了" -f abc.sh
选项“-e”指定过期时间,格式为“日/月/年”;选项“-m”指定过期后执行此shell程序的提示信息。
如果在过期后执行,则会有如下提示:
# ./abc.sh.x  
./abc.sh.x: has expired!
过期了
使用以上方法要注意,需防止用户更改系统时间,可以通过在程序中加入自动更新系统时间的命令来解决此问题。

测试都已通过,请放心使用!





题外:

如果你仅仅是看不见内容就行了的话,不妨用试试,这个貌似不可行,不过可以试试
gzexe a.sh



原文地址:http://blog.chinaunix.net/uid-22780578-id-3346340.html

阅读(1668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~