配置

机器配置

原型脚本

#!/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 <"$0" | gzip -cd > "$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

试验脚本

#!/bin/sh
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
#逸二博客 e2a.cn
skip=56

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 <"$0" | gzip -cd > "$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

分析

对比原版脚本和实验脚本就可以发现端倪
原型脚本头部是这样:#!/bin/sh skip=44
实验脚本头部是这样:#!/bin/sh (中间省略) skip=56
实验脚本无法直接使用gzexe -d解压
gzexe无法解压.png
skip翻译过来是跳过的意思,那么这个变量应该就是定义跳过某些代码或者其他作用。
查看原型脚本的44行你会发现乱码,之后的全是乱码。而实验脚本的56行之后全是乱码。
skip的定义应该就是告诉脚本压缩是从某行开始

原理

gzexe解压会无视skip这个值直接从44行寻找压缩后的代码。所以修改skip值定义到正确的数据也无法解压。
运行脚本时会参考skip这个值,从skip获取压缩后的代码。所以修改skip值定义到正确数据。
利用skip的值,在skip前添加注释从而达到混淆视听的手段。
以上为个人见解,如果有任何不妥可以留言。

解压缩

删除所有添加的注释,将skip的值修改为44,检查44行是否为乱码开始。
修改完执行gzexe -d即可解压缩

写在最后

祝各位小哥哥小姐姐六一快乐

文章由逸二博客原创,转载请说明出处

Last modification:November 14th, 2019 at 01:32 pm
如果觉得我的文章对你有用,请随意赞赏