逆向实录:SRBMiner-MULTI 3.7.3 如何在 21MB 里藏 89MB 代码

原创
alex 1小时前 阅读数 3 #头条

逆向实录:SRBMiner-MULTI 3.7.3 如何在 21MB 里藏 89MB 代码

第一步:从符号表到熵值,识别打包 ELF 的可疑迹象

拿到 SRBMiner-MULTI v3.7.3 for Linux 的二进制时,我先看到的是一个 21MB 的 ELF 文件 来源:YD。文件头声称自己是 “not stripped”,这有点反常。我查了下符号表,立刻发现了一些“可疑迹象” 来源:HN。按经验,一个声称未剥离符号的二进制,应该带着完整的调试信息,可这文件看起来并不想让人读懂它。

符号表检查这一步很基础,但往往最容易被忽略。一个正常的 ELF,符号表里应该能看到导出函数名和全局变量;而打包过的文件,符号表可能只剩一个 stub,或者塞满无意义条目。作者说“立刻发现可疑迹象”,我猜就是这个意思。这提醒我们,逆向工程的第一步不是拿反汇编器猛冲,而是先看元数据。

接着我分析了文件熵值。这是判断可执行文件是否被压缩或打包的常用技巧,高熵意味着数据分布接近均匀,更像压缩产物,而不是普通代码 来源:HN。熵值读数确实高得不正常,于是我开始扫描压缩签名,逐个检查常见的压缩算法标识。扫到某处时,找到了一个匹配的压缩签名 来源:HN。到这一步,我心里大致有了底,这文件很可能把真实程序整个压了起来,塞在某个地方。

后来的结果证明了这个猜测。这个二进制确实把真实程序作为单个 Zstandard 压缩帧嵌入了 .text 段 来源:YD。它嘴上说 “not stripped”,实际连代码带数据全压成帧,丢进代码段里等运行时解压。这种伪装方式不算少见,但能做得这么干净利落的,确实值得写下来。

第二步:Zstandard 压缩帧与运行时解压:从 21MB 到 89MB 的反直觉发现

压缩帧解压后,得到的数据恰好是 89,819,092 字节 来源:YD。这个数字有意思,它正好等于二进制自己声明的可执行 .bss 段大小 来源:YD。也就是说,解压出来的数据会被当作可执行内存段直接加载,运行时程序就在这块内存里展开。从文件大小看,解压后从约 20MB 跳到了 70MB 以上 来源:HN。

这里的反直觉之处在于:它伪装成一个“正常”的 ELF,让你以为代码是普通指令,实际程序全藏在 .text 的压缩帧里,等运行时再自己解压。我猜很多人第一眼就错过了这个把戏,因为文件头看起来太正常了,连符号表都声称未剥离。压缩帧嵌入 .text 段这种做法,让我想起以前见过的某些加壳程序,它们惯用手法是压缩整个节区,运行时再解压到内存,但通常至少会保留一个最小的 ELF 头在外面,好让系统愿意启动它。而这个矿工更极端,连头都做得很干净,像什么都没发生过。

一旦解压,真实字符串、类名和“开发费逻辑”全部暴露出来 来源:YD。作者在博客里反复强调,这个开发费是作者对闭源软件的合法补偿,文章的目的只是分析保护手法,而不是移除它 来源:YD。话虽如此,看清这套机制本身,对于理解商业矿工如何隐藏收费逻辑,还是有价值的。

这里有个细节值得留意:原博客给出了精确值 89,819,092 字节 来源:YD,而 HN 评论区把它表述为“从 20Mb~ 跳到 70Mb~” 来源:HN。两个数字之间差了不少,我倾向于是测量口径的差别,MiB 和 MB 在换算上确实有出入。不过具体差多少我不确定,得拿到原始文件重新量一遍才能确认。

第三步:多源交叉验证:字节码手术、Ghidra 分析与许可系统解密

评论区里的 noppers 把完整流程讲得很清楚:先学会识别压缩和打包的 ELF,从检查符号表开始,马上看到可疑迹象;接着分析文件熵值,判断是否被打包;然后深入扫描压缩签名,找到一个;再找到运行时使用标准压缩算法的函数 来源:HN。这套方法论本身,比具体到这个矿工更值得记住,因为它是逆向工程压缩 ELF 的通用路径。

找到压缩帧只是第一步。noppers 说,经过“一些字节码手术和若干补丁”之后,他们成功重建了一个可运行的未打包版本,这样才能放进 Ghidra 里分析 来源:HN。我理解这一步的麻烦之处,直接解压出来的数据不是可执行文件,你得把 ELF 结构重新拼起来,修正偏移、段表、入口点,让操作系统愿意加载它。

就算在 Ghidra 里能跑了,工作还没完。所有字符串都是加密的,必须先解密,才能理解许可系统如何工作 来源:HN。作者和评论者的最终目标,是揭露商业矿工如何隐藏开发费逻辑,并理解其许可系统 来源:YD 来源:HN。到这里,整个逆向过程才算完整。

我注意到,评论者和作者对最终目标的表述高度一致,都是揭露开发费逻辑和理解许可系统 来源:YD 来源:HN。这不是偶然,商业矿工的保护手法几乎都围着这两个点转:一是让用户不知道开发费怎么扣,二是让用户没法绕过许可。摸清这两点,商业逆向的意图也就清楚了。

如果让我给这套保护手法一个评价,它把整间房子砌成一堵墙,然后指望你数砖头。压缩帧本身并不难解,难的是识破伪装、重建结构、解密字符串。这套组合拳打下来,确实能挡住大部分好奇的人。


原文:

Defeating highly encrypted and obfuscated code – tutorial (SRBMiner-MULTI 3.7.3) · 来源:Hacker News

参考来源:

作者:itfan123 值班编辑 · 发布于 2026年11月1日

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除