note 您所在的位置:网站首页 gzexe加密指令 note

note

2024-07-17 09:20| 来源: 网络整理| 查看: 265

Shell脚本加密方案-gzexe

参考文章

SHELL脚本加密

之前一直不知道像Shell这样的纯文本文件也可以加密的, 而且不像js那样代码压缩混淆, 只是结构, 变量名称什么的变了, 本质还是文本文件. Shell脚本加密后生成的文本无法再通过文本方式阅读(只能看到乱码), 但是不影响执行(包括传入参数与输出).

其中一种加密方案是使用gzexe工具. gzexe在一般的linux发行版中都有安装, 它的使用方法简单, 不但加密, 同时压缩文件.

加密一个文件只需要执行gzexe 目标文件即可, 在当前目录会生成一个以~结尾的与目标文件同名的文件. 如下

$ ls test.sh $ gzexe test.sh test.sh: 51.8% $ ll total 24 -rw-r--r-- 1 root root 1629 Jun 19 22:08 test.sh -rw-r--r-- 1 root root 1652 Jun 15 19:58 test.sh~

现在, 原来的test.sh已经是加密过的文件了, test.sh~才是原文件, 而前者拥有与原文件完全一致的功能.

gzexe加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。你或许有机会接触到使用gzexe加密的脚本, 它们几乎拥有相同的特征, 打开上面加密后的test.sh, 你可以看到如下内容.

#!/bin/sh skip=44 tab=' ' nl=' ' IFS=" $tab$nl" umask=`umask` umask 77 gztmpdir= trap 'res=$? test -n "$gztmpdir" && rm -fr "$gztmpdir" (exit $res); exit $res ' 0 1 2 3 5 10 13 15 if type mktemp >/dev/null 2>&1; then gztmpdir=`mktemp -dt` else gztmpdir=/tmp/gztmp$$; mkdir $gztmpdir fi || { (exit 127); exit 127; } gztmp=$gztmpdir/$0 case $0 in -* | */*' ') mkdir -p "$gztmp" && rm -r "$gztmp";; */*) gztmp=$gztmpdir/`basename "$0"`;; esac || { (exit 127); exit 127; } case `echo X | tail -n +1 2>/dev/null` in X) tail_n=-n;; *) tail_n=;; esac if tail $tail_n +$skip "$gztmp"; then umask $umask chmod 700 "$gztmp" (sleep 5; rm -fr "$gztmpdir") 2>/dev/null & "$gztmp" ${1+"$@"}; res=$? else echo >&2 "Cannot decompress $0" (exit 127); res=127 fi; exit $res ^_^H^HXvBY^B^Cpython2.7.sh^@­TmOÓP^Tþ¾_qd^D^RCoÇK ^R^E%^QÄ^Eü´/¥»®­m'OC$°^@^B Â^R^T^L^S^A&îÏì¶Û¿ðÞÞ²^A^YDtë=ç9ç_^_²ÆÒBR^_V( ^Y¹^_ D^Yk¶nEÚP^H¼^Tÿò°-ภªJáý`>2·E gåÌL©¸ëL^]^Eúºzû^GéÛ^]¥r4lJ*4ø^_^V²^LIÆF¢2º^M,ûþìM¥ÊìR^Kk)¯Fò§äã³ zä,LN^N©ò@wÿ+xÞÕÿ^T^^£¡Á^^¡ý¿hã'2^P^]êt* B^Z^TͲ%Uõ»$Äñ^[¬n`ͲT^?e½V^U^[ûX^@èÓÔäÅË*4 á^F9eª0jÛFD^T[^_Qk[;}ÛP8^\^R-=aK&^Vy^]^S^QèÕ@­adL h':jI9îAا- LL N$^@ýEÀUHÍDvÌA^P^L^S'^N1e¢ªËêse×·^ZÆpõÿbïª^n©¨Són^MåQ^]^Gº^Fu4²ßH½â°¢5Cg'ØEÃÔÙ½ÃÒS¦¯@x©ë¶%kÔ^CÞè(æÕS÷¸à^V¶+rþ3¯äfçÜ·^Vp¶Îâ^^í(1îæ»Ë~¯¹L^ZUƸRn>SÆEÕ@°à&^Q^WÀëU)^V¦ãK¡bÄX0v'Æp1^FùÈÆ^[ìaÔ&6×ÒRîÒ§è­hm>UÏæ%S½Cék«º|2êf¹^E±ùèÑòï^[^B^?^@é à¤\t^F^@^@

貌似所有使用gzexe加密的脚本, 在乱码之前的部分都是相同的, 所以很容易判断其加密类型. 并且其解密方法也是相当简单, 只需要使用gzexe -d 待解密文件, 就可以得到原文件. 正所谓"防君子不防小人". 如下

$ gzexe -d test.sh

这样, test.sh就又被还原成了原文件.

我的尝试

说真的, gzexe这种加密方法, 不能加入自己的密码进行混淆, 感觉好鸡肋. 我尝试对同一个脚本进行多次加密, 这样, 在别人无法猜测脚本加密的具体次数的情况下依然有相当大的安全性. (突然觉得自己是一个天才︿( ̄︶ ̄)︿)

然而愿望是美好的, 过程是"曲折"的, 但结果是不可能的...(⊙﹏⊙)

过程如下:

创建一个脚本

$ vim test.sh

它可以输出hello + 第一个参数

$ bash test.sh general hello general

加密它

$ gzexe test.sh test.sh: -7.4%

功能正常

$ bash test.sh general hello general

再加密, 失败

$ gzexe test.sh /usr/bin/gzexe: test.sh is already gzexe'd

猜测gzexe判断当前目录是否存在~结尾的同名文件

$ ls test.sh test.sh~

果断删掉

$ rm test.sh~ rm: remove regular file ‘test.sh~’? y

再次加密, 又失败, 绝望

$ gzexe test.sh /usr/bin/gzexe: test.sh is already gzexe'd

很好, 现在知道了, gzexe应该是往加密后的文件里加了什么标识, 所以拒绝再次加密. 而且这个标识我们是没办法修改的(别问我为什么, 我把加密后的文件前面未乱码部分和乱码部分都做了修改, 然而...┑( ̄Д  ̄)┍)

好了, 如果只是为了有趣, 可以拿gzexe玩玩, 但是为了安全性, 不推荐gzexe, 可以尝试另一个工具shc.

结束.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有