开了台虚拟机,本来是想着解锁一下某视频网站的非自制剧观看权限。查了一下大部分都是推荐用 Cloudflare Warp 代理来解锁。这只是开头。
然后我搜索的时候卡看到一个博客写的不错,就按照给出的 Github 地址执行了给出的脚本。执行时使用的是普通用户,不能执行,我就切换到了 root 用户执行脚本。
执行后等待了一会,提示我 “更新依赖时出错,建议重启 SSH 客户端。如果依旧如此建议卸载重装 SSH 客户端” 我看到后很疑惑,这跟 SSH 客户端有什么关系。
我尝试打开最开始执行命令中的连接,看一下脚本运行的步骤。结果,不看不知道,一看吓一跳,打开后整个屏幕都是密密麻麻的字符,仔细看了一眼好像是变量赋值,中间部分有一个 eval 命令读取变量后拼接到一起然后组成一个“明文”脚本。
我看明白后当场就觉得完了,是不是植入挖矿或是其他可执行文件了,要隐藏的这么深。
我尝试写了一个 Python 脚本,解析后我发现,竟然还用 Base64 编码了。还需要解码,我找了一个在线网页进行解码后,这家伙,还是一个套娃,有好几层(命令我会发到第一层评论)。
改了改了 Python 脚本全部解析后,看到了脚本的真实面目。然后发现,竟然还有反转。
脚本在一开始定义了一个 skip 变量,在这个变量指定的地方写的是 "BZh91AY&SYX" 开头的字符,后边全是乱码了。我一看,这不会是把压缩文件放脚本中了吧。我试着使用 tail -n +76 endip.sh | bzip2 -cd > output.sh
仔细查看了脚本,竟然没发现有什么不同。那这“里三层外三层”又是拼接又是下载新脚本的到底是干什么?
2
Moyyyyyyyyyyye 233 天前
可能是提供这个服务,但是不想让你修改,类似闭源软件吧
|
3
proxytoworld 233 天前
|
4
DosLee OP 最一开始的脚本内容(因为太长,删除了一部分)
```shell z=" ";IeCz='MTBi';Qz='Cllt';oQCz='RlZH';htz='cFVs';mBCz='STBW';XYz='SlVV';qgBz='a01r';BKBz='bUpY';JYBz='VWRY';ISz='aGtS';vPCz='UFYw';qcBz='a1ZW';iIBz='aERh';enBz='blpX';hDz='dFJr';RiBz='b2FR';Vz='aGlZ';WBBz='dFdN';eJCz='Mk5z';eICz='VlRJ';IWBz='VTJO';RfBz='RVZX';kOCz='R2Ez';Cmz='MjVT';WLCz='WlNX';WOz='VjAx';lQBz='aGti'; eval "$Az$Bz$Cz$Dz$Ez$Fz$Gz$z$Hz$Iz$Jz$Kz$Lz$Mz$Nz$Oz$Pz$Qz$Rz$Sz$Tz$Uz$Vz$Wz$Xz$Yz$Zz$z$az$bz$cz$dz$ez$fz$gz$hz$iz$jz$kz$lz$mz$nz$oz$pz$qz$rz$sz$z$tz$uz$vz$wz$xz$yz$ABz$BBz$CBz$DBz$EBz$FBz$GBz$HBz$IBz$JBz$KBz$LBz" ``` |
5
DosLee OP 嵌套 Base64 解码后的脚本
```shell #!/bin/bash # # Encrypted by Rangga Fajar Oktariansyah (Anak Gabut Thea) # # This file has been encrypted with BZip2 Shell Exec <https://github.com/FajarKim/bz2-shell> # The filename '2endip.sh' encrypted at Fri Jan 19 07:09:45 UTC 2024 # I try invoking the compressed executable with the original name # (for programs looking at their name). We also try to retain the original # file permissions on the compressed file. For safety reasons, bzsh will # not create setuid or setgid shell scripts. # # WARNING: the first line of this file must be either : or #!/bin/bash # The : is required for some old versions of csh. # On Ultrix, /bin/bash is too buggy, change the first line to: #!/bin/bash5 # # Don't forget to follow me on <https://github.com/FajarKim> skip=75 tab=' ' nl=' ' IFS=" $tab$nl" # Make sure important variables exist if not already defined # $USER is defined by login(1) which is not always executed (e.g. containers) # POSIX: https://pubs.opengroup.org/onlinepubs/009695299/utilities/id.html USER=${USER:-$(id -u -n)} # $HOME is defined at the time of login, but it could be unset. If it is unset, # a tilde by itself (~) will not be expanded to the current user's home directory. # POSIX: https://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap08.html#tag_08_03 HOME="${HOME:-$(getent passwd $USER 2>/dev/null | cut -d: -f6)}" # macOS does not have getent, but this works even if $HOME is unset HOME="${HOME:-$(eval echo ~$USER)}" umask=`umask` umask 77 bztmpdir= trap 'res=$? test -n "$bztmpdir" && rm -fr "$bztmpdir" (exit $res); exit $res ' 0 1 2 3 5 10 13 15 case $TMPDIR in / | */tmp/) test -d "$TMPDIR" && test -w "$TMPDIR" && test -x "$TMPDIR" || TMPDIR=$HOME/.cache/; test -d "$HOME/.cache" && test -w "$HOME/.cache" && test -x "$HOME/.cache" || mkdir "$HOME/.cache";; */tmp) TMPDIR=$TMPDIR/; test -d "$TMPDIR" && test -w "$TMPDIR" && test -x "$TMPDIR" || TMPDIR=$HOME/.cache/; test -d "$HOME/.cache" && test -w "$HOME/.cache" && test -x "$HOME/.cache" || mkdir "$HOME/.cache";; *:* | *) TMPDIR=$HOME/.cache/; test -d "$HOME/.cache" && test -w "$HOME/.cache" && test -x "$HOME/.cache" || mkdir "$HOME/.cache";; esac if type mktemp >/dev/null 2>&1; then bztmpdir=`mktemp -d "${TMPDIR}bztmpXXXXXXXXX"` else bztmpdir=${TMPDIR}bztmp$$; mkdir $bztmpdir fi || { (exit 127); exit 127; } bztmp=$bztmpdir/$0 case $0 in -* | */*' ') mkdir -p "$bztmp" && rm -r "$bztmp";; */*) bztmp=$bztmpdir/`basename "$0"`;; esac || { (exit 127); exit 127; } case `printf 'X\n' | tail -n +1 2>/dev/null` in X) tail_n=-n;; *) tail_n=;; esac if tail $tail_n +$skip <"$0" | bzip2 -cd > "$bztmp"; then umask $umask chmod 700 "$bztmp" (sleep 5; rm -fr "$bztmpdir") 2>/dev/null & "$bztmp" ${1+"$@"}; res=$? else printf >&2 '%s\n' "Cannot decompress ${0##*/}" printf >&2 '%s\n' "Report bugs to <[email protected]>." (exit 127); res=127 fi; exit $res BZh91AY&SYX�� �_�D0���m�߮����w��[�m����� � ��� ) #I�=S �h~��M4�J z��h�=@ 6� ��2 �d�Hi�҈0 L ��0 ` ɂd� ��LF � �& � �0L� ����C � 0 C � � & � 211 ` �( �h�&h&T�)��h� HѽS E<�M2`C� ��.B�EB�UUUUUUUUTIHT* HU!JB�B����9�݇�%B����� ��R��-���y�ӹ��dڻ��X��:*2�su�L���o�>�},ڱv��6| e�9 �kխ� �_� ���X�h��hՖ|=��'��~K���R��i4�̀� Yв #eɫ��� (� �OZ�Y�ȳ���y hmCƆ��m~�ߥ����#��F����X��ԑyK ����s#4V��0��c2�%�Y���� �k��~�/1$C"� j��~�����P� W�.���[i!%k�#ˤw{� -�� �oh��� �� ;9d/* a G�I2�e-N_,,�E gI: N�ž�t� �*J��; �&T�!`5��}��6 �� �n��7���M� ��e���> χ0�0��hʗ&�Է�^%� T^H�i�R���! � ��|� FQ A���� ��p p��px����� KRRey(p]�+ P;��k��{�yFl� q|��� >3ݹX�Izu/R�T��/M]'v� �᭡��k�ի�cj��0l���> ��'��i�UG� �E '^�:�v '�T�l�"�P��Z��(DCre� }� QQ� DD2� �#ě*�� Eǽ�+{�����������H�t7P��S� �!j s�a̅=�v-�����z3��; d[��/_�+А����\�˭J��̅��zLq�A"�Ƨ���ۘ�Ҳ"��q� �Q�v KK'� Tdo�ކ$[�#=G�"fE�5��N�&Q8w�Us,���&[q�l4k� DL0C �7x�^� 3�7�6Frw۱�oH���"կu#M�Z��c|���x��v���* ��n�و� :�e4!��LV,�oW�����pesr��l�LZ�Qc��p8 g1%�%�]I� ��,B� N"-B�e$20��8�䋚�-�6� ��Eσ5ضMeFrJ��1��O=���� ��K����Ng K�piX�I�% �Mc2�6��b�v�u�]r� � `mY�ʫ �b� ��� dѷe��47�hX�Dҭ V�%��M�q�v�l�XXi�ɛ�f���q67ٗg<�W�p� �ǚ����s�� # �?���a� o��v����S���@!|%q �ƨ�OaV��� e &���",������k cD�:����I B�.�V� �b��VU �7�hZ ��&�L0 2 ;f�Er`���hj �:%��� �1�Fl�4jk`BfUT��,� �"�`�߄XWw���V� ;�� �k�L9�X1�Ŕ_��. �.�Z� I� rE8P�X�� ``` |
6
selca 233 天前
放 GitHub 假装开源的,一大堆人说他脚本有问题,肯定不是空穴来风的
|
8
mohumohu 233 天前
薅羊毛项目给油管营销号赚麻了,GitHub 上一个脚本没有的开源,命令都是下载 gitlab 的,这就是 3.2k star 含金量
|
9
InDom 233 天前
对脚本分析了一波,然后看着仓库底下“加密”原因,我在思考我为什么没去吃这口饭,赚这个钱呢?
我改个名叫 XX 哥,搞一些乱七八糟的东西,是不是就可以开工了? |
10
InDom 233 天前
看完那个文章,吃瓜真爽........么?这都什么乱七八糟的?
|
11
pecsj 233 天前
这玩意没有用也有这么多人 star 么
|
12
defunct9 233 天前
个人感觉,就上面贴出来这个脚本,写的稀烂。这也配放到 github 上?果真无耻无畏
|
13
Y25tIGxpdmlk 233 天前
应该只是不想让你们看到源码,然后用某类代码混淆软件处理过而已,省的被别人抄过去,改一下就变自己的了。
至于有没有后门啥的,另说了 |
14
Y25tIGxpdmlk 233 天前 5
@defunct9 #12 个人认为代码最大的意义应该是实现某个功能,至于实现方法优不优美,写的好不好是其次的东西。
|
15
MineDog 233 天前
就一个 readme 文件的项目,为啥这么多 star ,大受震撼
|
16
liaoyigou 232 天前 via iPhone
wget -O snell.sh --no-check-certificate https://git.io/Snell.sh && chmod +x snell.sh && ./snell.sh
试试这个 |
18
james122333 232 天前 via Android
bz2-shell?这个看起来就是 gzexe 指令的 bz 版本 都是自解压缩用
|
19
noahlias 232 天前
智商税?
|
20
jqtmviyu 232 天前 1
我是用这个 3Kmfi6HP / EDtunnel , 屁事真多呀.
|
21
defunct9 232 天前 2
|
22
lujiaxing 232 天前
估计 整件事都是他自己在炒作自己... 让更多人用自己的脚本.
Misaka 跟他是同一个人. 加密代码明面说的是防止 Misaka 抄袭, 本质上是植入挖矿代码或者为植入挖矿代码做准备 |
23
xxx027 232 天前 via Android
因为真的会被那个小朋友直接改成自己的,被那个小朋友祸害过的可不少
脚本作者好像说过如果找得到脚本挖矿的证据直接奖励 10 万元 |
24
uub 232 天前
之前有人发过他脚本的源码
https://gitlab.com/openyg1/openyg |
25
vB4h3r2AS7wOYkY0 232 天前
啥脚本看都不看直接 root 跑也是没谁了,再说配置一个 warp 又不是多费劲儿的事儿。
没被风控的区域直接 wgcf+wireguard 搞定,风控的区域用 warp-go (不过后者也是没开源的东西,建议 systemd dynamic user 跑。 |
26
Greendays 232 天前
这个 Misaka 和 Jellyfin 的那个 Misaka 应该没啥关系吧(
|
29
DosLee OP |
30
banyasmya23 232 天前
@defunct9 #21 大佬 博客代码前面的序号,复制的时候也会被复制下面,运行就报错 很麻烦啊 优化下吧
|
31
banyasmya23 232 天前
@defunct9 #21 https://i.mji.rip/2024/05/09/a4d937354f2d070c106363db4d555a1c.png 大佬 博客代码前面的序号,复制的时候也会被复制下面,运行就报错 很麻烦啊 优化下吧
|
32
halofingle 232 天前 via iPhone
之前看到视频评论说这人脚本里面有挖矿程序。。。还能看机器配置决定是否启动。。。配置低的就不挖
|
33
cosette 232 天前 1
拒绝任何 `bash -c $(curl example.com)` 或者类似的管道安装和运行的方式,尤其是直接使用 root 用户的情况下。
跑来源不明的脚本属于心比较大的情况,除非是非常值得信赖的情况。 |
34
defunct9 232 天前
@banyasmya23 https://mjj.today/i/TSpFYG . 应该是你自己的问题。markdown 的文件,本身也没有序号。你自己检查自己的机器吧。
|
35
lisxour 232 天前
根据我见过这么多类似事件的经验,代码开源 + 无故混淆加密、二次动态分发下载,90%都有鬼
|
36
FrankAdler 232 天前
@defunct9 大佬留个联系方式,下次发代码到 GitHub 前先找你掌掌眼
|
38
defunct9 231 天前
@FrankAdler 不敢。github 本身就是个人平台,写自己的就是。至于好还,不好就改呗。写的多了自然就好了。
|
39
FrankAdler 231 天前 via Android
@defunct9 个人感觉,就上面贴出来这个脚本,写的稀烂。这也配放到 github 上?果真无耻无畏
真的不会骂我吗 |
40
defunct9 231 天前
@FrankAdler 上面这种夹杂着 2 进制,伪开源的东西,你看着不闹心么
|