Bashfuscator 混淆shell脚本并编译为exe

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
shell脚本混淆编译加密

什么是 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源码。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论