
开了台虚拟机,本来是想着解锁一下某视频网站的非自制剧观看权限。查了一下大部分都是推荐用 Cloudflare Warp 代理来解锁。这只是开头。
然后我搜索的时候卡看到一个博客写的不错,就按照给出的 Github 地址执行了给出的脚本。执行时使用的是普通用户,不能执行,我就切换到了 root 用户执行脚本。
执行后等待了一会,提示我 “更新依赖时出错,建议重启 SSH 客户端。如果依旧如此建议卸载重装 SSH 客户端” 我看到后很疑惑,这跟 SSH 客户端有什么关系。
我尝试打开最开始执行命令中的连接,看一下脚本运行的步骤。结果,不看不知道,一看吓一跳,打开后整个屏幕都是密密麻麻的字符,仔细看了一眼好像是变量赋值,中间部分有一个 eval 命令读取变量后拼接到一起然后组成一个“明文”脚本。
我看明白后当场就觉得完了,是不是植入挖矿或是其他可执行文件了,要隐藏的这么深。
我尝试写了一个 Python 脚本,解析后我发现,竟然还用 Base64 编码了。还需要解码,我找了一个在线网页进行解码后,这家伙,还是一个套娃,有好几层(命令我会发到第一层评论)。
改了改了 Python 脚本全部解析后,看到了脚本的真实面目。然后发现,竟然还有反转。
脚本在一开始定义了一个 skip 变量,在这个变量指定的地方写的是 "BZh91AY&SYX" 开头的字符,后边全是乱码了。我一看,这不会是把压缩文件放脚本中了吧。我试着使用 tail -n +76 endip.sh | bzip2 -cd > output.sh 仔细查看了脚本,竟然没发现有什么不同。那这“里三层外三层”又是拼接又是下载新脚本的到底是干什么?
1 defunct9 2024-05-09 09:55:25 +08:00 |
2 Moyyyyyyyyyyye PRO 可能是提供这个服务,但是不想让你修改,类似闭源软件吧 |
3 proxytoworld 2024-05-09 10:00:36 +08:00 |
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 _D0mw[m ) #I=S h~M4J zh=@ 6 2 dHi0 L 0 ` d LF & 0L C 0 C & 211 ` ( h&h&T)h HS E<M2`C .BEBUUUUUUUUTIHT* HU!JBB9%B R-ydX:*2suLo>},v6| e9 k _ Xhh|='~KRi4 Yв #e ( OZYy hmCm~#FXyK s #4V0c2%Y k~/1 $C" j ~P W.[i!%k#w{ - oh ;9d/* a GI2e-N_,,E gI: Nt *J; &T!`5}6 n7M e> χ 0 0h&^% T^HiR! | FQ A p p px KRRey(p]+ P;k{yFl q| >3XIzu/RT/M]'v kcj 0l> 'iUG E '^:v 'Tl"PZ(DCre } QQ DD2 #ě* E+{Ht7PS !j sa=v-z3; d[/_+А\JzLqA""q Qv KK' Tdo$[#=G"fE5N&Q8wUs,&[ql4k DL0C 7x^ 376F rwoH"u#MZc|xv* n :e4!LV,oWpesrlLZQcp8 g 1%%]I ,B N"-Be$208-6 Eσ5MeFrJ1O= KNg KpiXI% Mc26bvu]r `mY b de47hXD V%MqvlXXifq67g<W p ǚs # ?a ovS@!|% q OaV e &",k cD:I B.V bVU 7hZ &L0 2 ;fEr`hj :% 1Fl4jk`BfUT, "`XWwV ; kL9X1_. .Z I rE8PX ``` |
6 selca 2024-05-09 10:13:45 +08:00 放 GitHub 假装开源的,一大堆人说他脚本有问题,肯定不是空穴来风的 |
8 mohumohu 2024-05-09 10:17:29 +08:00 薅羊毛项目给油管营销号赚麻了,GitHub 上一个脚本没有的开源,命令都是下载 gitlab 的,这就是 3.2k star 含金量 |
9 InDom 2024-05-09 10:19:38 +08:00 对脚本分析了一波,然后看着仓库底下“加密”原因,我在思考我为什么没去吃这口饭,赚这个钱呢? 我改个名叫 XX 哥,搞一些乱七八糟的东西,是不是就可以开工了? |
10 InDom 2024-05-09 10:21:32 +08:00 看完那个文章,吃瓜真爽........么?这都什么乱七八糟的? |
11 pecsj 2024-05-09 10:22:12 +08:00 这玩意没有用也有这么多人 star 么 |
12 defunct9 2024-05-09 10:22:52 +08:00 个人感觉,就上面贴出来这个脚本,写的稀烂。这也配放到 github 上?果真无耻无畏 |
13 Y25tIGxpdmlk 2024-05-09 10:32:31 +08:00 应该只是不想让你们看到源码,然后用某类代码混淆软件处理过而已,省的被别人抄过去,改一下就变自己的了。 至于有没有后门啥的,另说了 |
14 Y25tIGxpdmlk 2024-05-09 10:35:06 +08:00 @defunct9 #12 个人认为代码最大的意义应该是实现某个功能,至于实现方法优不优美,写的好不好是其次的东西。 |
15 MineDog 2024-05-09 10:46:32 +08:00 就一个 readme 文件的项目,为啥这么多 star ,大受震撼 |
16 liaoyigou 2024-05-09 11:30:40 +08:00 via iPhone wget -O snell.sh --no-check-certificate https://git.io/Snell.sh && chmod +x snell.sh && ./snell.sh 试试这个 |
18 james122333 2024-05-09 12:09:41 +08:00 via Android bz2-shell?这个看起来就是 gzexe 指令的 bz 版本 都是自解压缩用 |
19 noahlias 2024-05-09 12:17:06 +08:00 智商税? |
20 jqtmviyu 2024-05-09 12:54:53 +08:00 我是用这个 3Kmfi6HP / EDtunnel , 屁事真多呀. |
21 defunct9 2024-05-09 13:20:48 +08:00 |
22 lujiaxing 2024-05-09 13:24:46 +08:00 估计 整件事都是他自己在炒作自己... 让更多人用自己的脚本. Misaka 跟他是同一个人. 加密代码明面说的是防止 Misaka 抄袭, 本质上是植入挖矿代码或者为植入挖矿代码做备 |
23 xxx027 2024-05-09 13:26:16 +08:00 via Android 因为真的会被那个小朋友直接改成自己的,被那个小朋友祸害过的可不少 脚本作者好像说过如果找得到脚本挖矿的证据直接奖励 10 万元 |
24 uub 2024-05-09 13:27:58 +08:00 之前有人发过他脚本的源码 https://gitlab.com/openyg1/openyg |
25 vB4h3r2AS7wOYkY0 2024-05-09 13:40:36 +08:00 啥脚本看都不看直接 root 跑也是没谁了,再说配置一个 warp 又不是多费劲儿的事儿。 没被风控的区域直接 wgcf+wireguard 搞定,风控的区域用 warp-go (不过后者也是没开源的东西,建议 systemd dynamic user 跑。 |
26 Greendays 2024-05-09 16:06:35 +08:00 这个 Misaka 和 Jellyfin 的那个 Misaka 应该没啥关系吧( |
29 DosLee OP |
30 banyasmya23 2024-05-09 18:16:34 +08:00 @defunct9 #21 大佬 博客代码前面的序号,复制的时候也会被复制下面,运行就报错 很麻烦啊 优化下吧 |
31 banyasmya23 2024-05-09 18:16:56 +08:00 @defunct9 #21 https://i.mji.rip/2024/05/09/a4d937354f2d070c106363db4d555a1c.png 大佬 博客代码前面的序号,复制的时候也会被复制下面,运行就报错 很麻烦啊 优化下吧 |
32 halofingle 2024-05-10 01:01:19 +08:00 via iPhone 之前看到视频评论说这人脚本里面有挖矿程序。。。还能看机器配置决定是否启动。。。配置低的就不挖 |
33 cosette 2024-05-10 05:39:42 +08:00 拒绝任何 `bash -c $(curl example.com)` 或者类似的管道安装和运行的方式,尤其是直接使用 root 用户的情况下。 跑来源不明的脚本属于心比较大的情况,除非是非常值得信赖的情况。 |
34 defunct9 2024-05-10 09:20:16 +08:00 @banyasmya23 https://mjj.today/i/TSpFYG . 应该是你自己的问题。markdown 的文件,本身也没有序号。你自己检查自己的机器吧。 |
35 lisxour 2024-05-10 09:28:12 +08:00 根据我见过这么多类似事件的经验,代码开源 + 无故混淆加密、二次动态分发下载,90%都有鬼 |
36 FrankAdler 2024-05-10 10:28:42 +08:00 @defunct9 大佬留个联系方式,下次发代码到 GitHub 前先找你掌掌眼 |
38 defunct9 2024-05-11 09:48:38 +08:00 @FrankAdler 不敢。github 本身就是个人平台,写自己的就是。至于好还,不好就改呗。写的多了自然就好了。 |
39 FrankAdler 2024-05-11 10:02:54 +08:00 via Android @defunct9 个人感觉,就上面贴出来这个脚本,写的稀烂。这也配放到 github 上?果真无耻无畏 真的不会骂我吗 |
40 defunct9 2024-05-11 10:06:58 +08:00 @FrankAdler 上面这种夹杂着 2 进制,伪开源的东西,你看着不闹心么 |