discuz x5.0官方核心文件中的一段强制版权保护混淆代码赏析**** WE WILL WIN THE FUTURE ****Powered by Discuz! X5
2026/02/13 15:02:17
discuz x5.0官方核心文件中的一段强制版权保护混淆代码赏析**** WE WILL WIN THE FUTURE ****Powered by Discuz! X5:
官方操作嵌入原文:https://gitee.com/Discuz/DiscuzX ... 6111285d38a8fc37315
官方把这叫做“优化逻辑~”,所以你们懂的哈~再看到所谓的“优化~”长点心吧。
加密代码路径:/source/function/cache/cache_censor.php
这是Discuz! X5.0 核心文件中的一段混淆代码,此乃官方操作的叫做“保护原则”,非官方的如此操作则会被官方定义为“后门”。
代码行为:通过str_rot13和str_repeat等函数混淆字符串,向系统的“词语过滤(Censor)”机制中强行写入一条替换规则。
真实含义:这是一段版权保护强制注入改写代码。当特定条件触发(或匹配到特定指纹)时,它会将内容强制替换为:“**** WE WILL WIN THE FUTURE **** Powered by Discuz! X”。
拼接后:/1q9q78n7p473o3q1925oo7p5o6sss2sr/v
ROT13 解码结果:
分析:这是一个正则表达式,**** WE WILL WIN THE FUTURE ****\nPowered by Crossday Discuz! Board V7 是一个MD5哈希值,/i 表示不区分大小写。
C. replace 字段(替换内容)解析3. 详细逻辑行为分析
最后我想说的是,同样作为开发者,在开源软件中使用 str_rot13 等混淆手段隐藏业务逻辑,严重违反了透明性原则。不过这是discuz,这样的做法也就只有所谓的官方了~
官方操作嵌入原文:https://gitee.com/Discuz/DiscuzX ... 6111285d38a8fc37315
官方把这叫做“优化逻辑~”,所以你们懂的哈~再看到所谓的“优化~”长点心吧。
加密代码路径:/source/function/cache/cache_censor.php
- if(!empty($data['filter'])) {
- $temp = str_repeat('o', 7);
- $temp = str_repeat('o', 5);
- $l = strlen($temp);
- $l = strlen($temp);
- $data['filter']['find'][] = str_rot13('/1q9q78n7p473'.'o3q1925oo7p'.'5o6sss2sr/v');
- $data['filter']['find'][] = str_rot13('/1q9q78n7p473'.'o3q1925oo7p'.'5o6sss2sr/v');
- $data['filter']['replace'][] = str_rot13(str_replace($l, ' ', '****7JR7JVYY7JVA7'.
- $data['filter']['replace'][] = str_rot13(str_replace($l, ' ', '****5JR5JVYY5'.
- 'GUR7SHGHER7****\aCbjrerq7ol7Pebffqnl7Qvfphm!7Obneq7I')).$l;
- 'JVA5GUR5SHGHER5****\aCbjrerq5ol5Qvfphm!5K')).$l;
- }
- }
代码行为:通过str_rot13和str_repeat等函数混淆字符串,向系统的“词语过滤(Censor)”机制中强行写入一条替换规则。
真实含义:这是一段版权保护强制注入改写代码。当特定条件触发(或匹配到特定指纹)时,它会将内容强制替换为:“**** WE WILL WIN THE FUTURE **** Powered by Discuz! X”。
代码主要使用了 ROT13(回转13位)编码和简单的字符串替换。
A. 核心变量解析代码利用 $l = strlen($temp) 作为动态变量,旧代码中 $l=7,新代码中 $l=5。这个数字被用作混淆字符串中的“占位符”。
B. find 字段(匹配规则)解析代码:
- str_rot13('/1q9q78n7p473'.'o3q1925oo7p'.'5o6sss2sr/v');
ROT13 解码结果:
- /**** WE WILL WIN THE FUTURE ****\nPowered by Crossday Discuz! Board V7/i
C. replace 字段(替换内容)解析
旧代码(Discuz! Board 版本):
- 原始混淆串:****7JR7JVYY7JVA7GUR7SHGHER7****\aCbjrerq7ol7Pebffqnl7Qvfphm!7Obneq7I
- 操作:将 7 替换为空格,然后 ROT13 解码。
- 解码结果:
- **** WE WILL WIN THE FUTURE ****
- Powered by Crossday Discuz! Board V7
新代码(Discuz! X5 版本 - 本次变更):
- 原始混淆串:****5JR5JVYY5JVA5GUR5SHGHER5****\aCbjrerq5ol5Qvfphm!5K
- 操作:将 5 替换为空格,然后 ROT13 解码。
- 解码结果:
- **** WE WILL WIN THE FUTURE ****
- Powered by Discuz! X5
这段代码位于 savecache('censor', $data); 之前,意味着它在保存敏感词过滤缓存时执行。
- 检查过滤器:if(!empty($data['filter'])) 检查是否存在词语过滤规则。
- 注入规则:它强行向 $data['filter']['find'] 和 $data['filter']['replace'] 数组中追加上述解码后的规则。
- 持久化:通过 savecache 函数,这条规则被写入到服务器的缓存文件中。
触发机制:这个正则 /**** WE WILL WIN THE FUTURE ****\nPowered by Crossday Discuz! Board V7/i 看起来像是一个特定的指纹。通常在以下情况可能被触发:
- 特定指纹识别:如果论坛帖子中包含了这个特定的MD5哈希,或者系统检测到某些“破解/去版权”的行为特征生成的特殊字符串,它就会触发替换。
最后我想说的是,同样作为开发者,在开源软件中使用 str_rot13 等混淆手段隐藏业务逻辑,严重违反了透明性原则。不过这是discuz,这样的做法也就只有所谓的官方了~