Bashfuscator 混淆shell脚本并编译为exe
最近发现一个很有用的shell脚本混淆工 Bashfuscator。出于工作需要,平时会写一些shell脚本,但是明文的内容很容易被别人给“借鉴”。
执行下面的命令,实现对shell脚本的一键混淆编译加密操作。
bashfuscator -s 1 -t 1 --layers 1 --no-file-write -f test.sh -o output.sh && shc shc -v -U -r -f output.sh && gzexe output.sh.x
什么是 Bashfuscator?
Bashfuscator 是一个用 Python 3 编写的模块化和可扩展的 Bash 混淆框架。它提供了许多不同的方法来使 Bash 单行或脚本更难理解。它通过生成复杂的、随机的 Bash 代码来实现这一点,该代码在运行时评估原始输入并执行它。 Bashfuscator 使生成高度混淆的 Bash 命令和脚本变得容易,无论是从命令行还是作为 Python 库。
项目地址
https://github.com/Bashfuscator/Bashfuscator
https://bashfuscator.readthedocs.io/
如何安装?
git clone https://github.com/Bashfuscator/Bashfuscator cd Bashfuscator python3 setup.py install --user
工具使用
程序选项
程序选项: -l, --list 列出所有可用的混淆器、压缩器和编码器 -c 命令,--command 命令 混淆命令 -f FILE, --file FILE 要混淆的脚本的名称 --stdin 混淆标准输入 -o 输出文件,--outfile 输出文件 将有效负载写入的文件 -q, --quiet 仅打印有效载荷 --clip 将有效负载复制到剪贴板 --test 运行后测试有效载荷,不兼容-q
混淆选项
混淆选项: -s {1,2,3}, --payload-size {1,2,3} 所需的有效负载大小。默认值:2 -t {1,2,3},--执行时间 {1,2,3} 有效载荷的所需速度。默认值:2 --layers LAYERS 要应用的混淆层数,默认值:2。当使用 --choose-mutators 时默认为 1 --include-binaries 二进制文件 [二进制文件 ...] 在生成的二进制文件中使用有效载荷 --exclude-binaries 二进制文件 [二进制文件 ...] 不想在生成的二进制文件中使用有效载荷 --no-file-write 不要使用需要写入文件的混淆器 --write-dir WRITE_DIR 如果 Mutators 需要写入目录或创建文件
混淆单行命令或单个文件
使用 -c
参数对单行命令进行混淆。
$ bashfuscator -c "cat /etc/passwd" [+] Mutators used: Token/ForCode -> Command/Reverse [+] Payload: ${@/l+Jau/+<b=k } p''"r"i""n$'t\u0066' %s "$( ${*%%Frf\[4?T2 } ${*##0\!j.G } "r"'e'v <<< ' "} ~@{$" ") } j@C`\7=-k#*{$ "} ,@{$" ; } ; } ,,*{$ "}] } ,*{$ ....... "${@}" "${@%%Ij\[N }" ${@~~ } )" ${!*} | $@ $'b\u0061'''sh ${*//J7\{=.QH } [+] Payload size: 1232 characters
使用 -f 参数对单个shell脚本进行混淆,-o 生成混淆后的shell脚本。
[root@zgao tmp]# bashfuscator -f test.sh -o outptu.sh [+] Mutators used: String/Hex Hash [+] Payload written to outptu.sh [+] Payload: ${*//=q} ${*%Me}pr"${@##*^}"i${*,}n\tf %s "$( "${@~~}" pri"n"t"f" "\x$(""p${*#\`w}r${! ..... #a)+2#1001)) )))" )" |"${@~~}"bas""$'\x68' "${@^}" [+] Payload size: 2802 characters
个人推荐的使用参数
低混淆程度
混淆脚本中不额外写文件。
bashfuscator -s 1 -t 1 --layers 1 --no-file-write -f script.sh -o output.sh
正常混淆
不加额外参数。
bashfuscator -f test.sh -o output.sh
混淆脚本执行报错?
随机生成的部分混淆脚本可能执行会报错,可以先测试一下。
shc打包二进制文件
shc把shell脚本封装为一个可执行的二进制文件。如果上面使用Bashfuscator还不放心,可以用shc再编译一次。
shc这个工具不是自带的,需要先安装。
yum install shc -y
shc常用选项
[root@zgao tmp]# shc -h shc 版本 4.0.3,通用 Shell 脚本编译器 shc GNU GPL 第 3 版 Md Jahidul Hamid <jahidulhamid@yahoo.com> shc 用法:shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-rvDSUHCABh] -f 脚本 -f %s 要编译的脚本文件名 -i %s shell 解释器的内联选项,即:-e -x %s eXec 命令,作为 printf 格式,即:exec('%s',@ARGV); -l %s 最后一个 shell 选项,即:-- -o %s 输出文件名 -r 放松安全性。制作可再发行的二进制文件 -v 详细编译 -S 为 root 可调用程序打开 setuid [OFF] -D 打开调试执行调用 [OFF] -U 使二进制无法追踪 [否] -H 强化:额外的安全保护 [否]
使用下面的参数将shell脚本编译为exe
[root@zgao tmp]# shc -v -U -r -f outptu.sh shc shll=bash shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc outptu.sh.x.c -o outptu.sh.x shc: strip outptu.sh.x shc: chmod ug=rwx,o=rx outptu.sh.x
gzexe压缩shc生成exe
gzexe命令 ,这个命令是系统自带的。
原本是用来压缩可执行文件,压缩后的文件仍然为可执行文件,在执行时进行自动解压缩。当您去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。
gzexe script.sh会把原来没有加密的文件备份为 script.sh~ ,同时 script.sh 即被变成加密文件。 gzexe -d script.sh会解密还原脚本,所以只能够满足一般的加密用途。
这里用gzexe对exe文件压缩,进一步隐藏shell源码。
赞赏微信赞赏支付宝赞赏
发表评论