有人在种子网站上一直他妈的搞我的 Sonarr

Hacker News Top 新闻

摘要

一名业余爱好者对一个伪装成《南方公园》剧集的恶意 .exe 文件进行了逆向分析。该文件由 Sonarr 从公共 torrent 追踪站自动下载。分析揭示了一个经 ChaCha20 加密的内存 PE 加载器、反调试和反沙箱手法,以及一个窃取浏览器密码和 Cookie 的第二阶段信息窃取程序。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/15 22:14

# Torrent 网站上有人一直在他妈的折腾我的 Sonarr 来源:https://thereallo.dev/blog/someone-on-torrent-sites-kept-fucking-with-my-sonarr-setup 我在 NAS 上跑着常见的 \*arr 全家桶。平时一直运行得好好的,直到我在仪表盘上看到一条警告。 最新一集《南方公园》卡在队列里,显示: 都他妈 2026 年了,到底还有谁会上这种当???? 我把话说清楚,这到底是什么情况。 有人拿了一集《南方公园》的名字,在末尾加上`\.exe`,然后上传到公共 Tracker,居然有**2,392 个做种者**,??? 谁他妈会把剧集做成 EXE 发出来???? 而 Sonarr 还真把它抓下来了,当然了,它就是会这么干。然后它就杵在那里,每隔他妈的 90 秒尝试导入一次: 甚至都不是像“美好的旧时光”那样,弄个文件夹,里面放一个假的`\.mkv`,旁边再放个“解码器安装程序”。 就一个 exe。认真的? qBittorrent 在添加任务两秒后就把它标成了“已完成”,同时显示`total\_downloaded: 0`,所以实际上什么都没写到磁盘上。不知道为什么。也不在乎。谢了,qBit。 我在 Sonarr 里把它加入了黑名单,这样会把它从 qBittorrent 里干掉,也能防止再次抓到同一个垃圾脚本小子恶意软件。 然后我又故意把它下载了一遍。因为我现在火大了,我想知道里面到底有什么。 它是个真正的 PE,x64 GUI 程序。实际程序只有 **118 KB**。 另外 886 MB 全是粘在文件末尾的随机垃圾。为什么?因为很多扫描器碰上这么大的文件就直接放弃了。 版本信息写着: “免费软件开发者。”放你妈的屁。 我把开头那 118 KB 切下来扔进 IDA,因为我才不会往任何工具里塞一整 GB 的狗屎。然后发现整个程序里全是这种东西: 对一个全局变量做异或。再异或回去。什么都不干。重复几百次。 它存在的唯一目的,就是让反编译输出看起来像一坨屎,而且确实做到了,恭喜。 把这些全剥掉,逻辑也就六步: 1. 打开自身文件。 2. 读取最后 64 字节。 3. 用这些数据定位并解密藏在垃圾数据里的载荷。 4. 手动把它作为 PE 映射到内存里。 5. 把`PEB\-\>ImageBaseAddress`指向它。 6. 跳转进去执行。 完全不落盘。就这么六步,塞了那么多混淆。 文件最后 64 字节就是全部配置: 偏移量大小描述0x0032 字节密钥,与 \.data 中一个 32 字节的掩码异或0x2012 字节ChaCha20 nonce0x2C4 字节载荷大小 ^ fnv1a\(mask\)0x304 字节\(flags \| padding << 8\) ^ fnv1a\(mask\)0x348 字节载荷大小 ^ fnv1a\(mask\)0x3C4 字节fnv1a\(mask\) 用的是 ChaCha20。他们通过全局变量拼出常量,想把它们藏起来,但最后拼出来的还是`expand 32\-byte k`。见过 ChaCha20 的人,一眼就能认出来,你藏不住的。 `flags = 3`会启用反调试检查(`PEB\-\>BeingDebugged`、调试端口查询,都是老一套),以及反沙箱评分机制。触发任何一个,它就悄悄退出。 沙箱看到的,就是一个普通应用打开文件,然后退出。 挺酷。可密钥他妈的就在文件里面。(????)你甚至都不需要运行它: 第二个 PE 就出来了。929 KB,MSVC,C\+\+20,捆绑了 zlib。 搞了那么多反分析的破玩意儿,结果十几行 Python 就能把混淆扒掉。 字符串经过加密,导入表精简到只剩 CRT,所有东西都在运行时解析。 然后`WinMain`直接把每个模块的名称以明文全倒出来了: 其他每个字符串都有各自的函数: 两个常量异或生成一个密钥,再加上 IV、密文和长度。`sub\_140080F40`是 AES,S 盒藏在 RC4 后面,因为显然只套一层加密还不够酷炫。 拿第一个试了试标准模式: AES\-128\-CTR。每个字符串各用一个密钥。672 个调用点。 我才不手动搞这个。 所以我从 IDA 里提取出所有调用点,用 Unicorn 只模拟每次调用前的那几条指令,从寄存器里抓出密钥、IV 和密文,再用 Python 解密。672 个里面有 601 个成功解出来了。 剩下的埋在更大的函数里,但我真的完全不他妈在乎,601 个已经够用了。 - **浏览器**:Chrome、Edge、Brave、Opera、Opera GX、Vivaldi、Firefox。密码、Cookie、自动填充数据,而且它还带有针对 Chrome 新的应用绑定加密的代码。 - **加密货币钱包**:Exodus、Electrum、Atomic、Guarda、Coinomi、Ledger Live、Trezor Suite、Wasabi、Sparrow、Monero、Zcash、Armory,还有浏览器扩展钱包。 - **密码管理器**:KeePass、KeePassXC、Bitwarden、1Password、NordPass、RoboForm、Windows 凭据管理器。 - **账号**:Telegram、Discord 令牌、Steam、Roblox Cookie、Minecraft 账号、Authy。 - **开发相关的东西**:`\.ssh`、`\.aws`、`\.azure`、gcloud、`\.kube`、`\.docker`。 - **远程访问**:AnyDesk、TeamViewer、WinSCP、FileZilla、mRemoteNG、RDCMan。 - **其他东西**:Outlook、Thunderbird、VPN 配置、OBS 设置、便笺,还有你桌面上的文档。 它甚至连你的**便笺**都偷,图他妈什么???? 所有东西都会用捆绑的 zlib 打包压缩,然后发出去。 没有硬编码的服务器地址,它会先解密出: 一个 YouTube 频道、一个 GitHub Gist、两个括号,还有一个一看就是有人乱敲键盘敲出来的密钥。 那个 YouTube 频道叫“bubblegym”。创建于 2026 年 9 月 14 日: 先做 Base64 解码,再跟那串乱敲出来的密钥做异或,就能得到地址: 而这个完全相同的地址,居然**也硬编码在二进制文件里**,看起来是拿来兜底的??? 我寻思,用死信箱机制的意义,就是可以更换服务器,同时不用把地址写进恶意软件里。 可你还是把地址放进了恶意软件,那还去 Gist 和 YouTube 获取地址到底图什么???? 9 月 14 日注册。跟那个“游戏频道”同一天。10 月 6 日构建,10 月 8 日种子上线。 如果你用公共索引器跑 Sonarr 或 Radarr,你**一定会**碰上这个。Sonarr 没法运行 exe,所以问题不在它身上。 问题是你的室友、你的父母,或者凌晨三点的你,会在下载文件夹里双击它。(**不要运行运行**这个脚本小子恶意软件) 花五分钟设置一下: - **qBittorrent**:把`\*\.exe`、`\*\.scr`、`\*\.lnk`、`\*\.bat`、`\*\.cmd`加入“排除的文件名”,它就会直接拒绝下载这些文件。 - **Sonarr / Radarr**:看到这类东西时,将其加入黑名单,并选择“从客户端移除”。 - **Prowlarr**:如果某个 Tracker 老是提供这种垃圾,就降低它的优先级,或者直接删掉。 至于做出这玩意儿的人:你可能花了好几个星期,或者他妈的一大堆 token,搞 ChaCha20、AES\-CTR、运行时 API 哈希、反沙箱评分、Chrome 应用绑定加密绕过,最后就做出这么个垃圾脚本小子恶意软件。 找个班上吧。

相似文章

qBittorrent 沙箱逃逸并执行未授权操作

Hacker News Top

qBittorrent 应用被发现可逃逸操作系统沙箱,造成严重安全漏洞。该漏洞可能使这款流行的 BitTorrent 客户端在受限环境之外执行未授权操作。