这段代码是 PHP 混淆吗?

查看 106|回复 9
作者:Aura23022   
因为这个文件字节很大,我截取了一段放下面,文件头部都是这样,调试了一下,没搞出来
看看能不能还原,或者是哪种混淆,之前没见过这种混淆
if(!defined("AA___AA_A"))define("AA___AA_A","AA___AAA_");$GLOBALS[AA___AA_A]=explode("|L|@|
Felldeadbird   
可以把代码丢给 AI 去还原处理。
Aura23022
OP
  
@Felldeadbird 试过了 他说它不能够帮我还原
cbasil   
这个 PHP 代码使用了混淆和编码技术,使得代码看起来很复杂。为了理解这个代码的真正意图,我们需要一步一步地解码和解释它。
首先,代码的第一部分定义了一个常量,并通过 explode 函数对一个字符串进行拆分,然后将拆分后的数组元素进行 pack 处理。让我们一步一步还原这些操作。
1. 定义常量和初始化全局数组
php
if(!defined("AA___AA_A")) define("AA___AA_A","AA___AAA_");
$GLOBALS[AA___AA_A] = explode("|L|@| "AAA___AAA"
ord(62) 返回 62 。所以这部分代码等价于:
php
if(!defined("AAA___AAA")) define("AAA___AAA", 62);
3. 初始化数组和变量
php
$R31BuEt15 = array(12, 13, 18, 4, 16);
$R31OiRy0 = 5844;
$R31zA8J = array("Ih", "mUN");
这段代码初始化了三个数组和一个变量。
4. 调用 strpos 函数
php
$R31eFbN8I = call_user_func_array("strpos", $R31zA8J);
这相当于:
php
$R31eFbN8I = strpos("Ih", "mUN");
strpos 查找子字符串在字符串中首次出现的位置。显然,"mUN" 在 "Ih" 中不存在,所以 strpos 返回 false 。
5. 检查常量和变量的存在性
php
if($R31eFbN8I) goto R31eWjgx2;
$R318I = !defined("AA___A__A");
if($R318I) goto R31eWjgx2;
if(isset($_J3zIUZr)) goto R31eWjgx2;
goto R31ldMhx2;
这里,由于 $R31eFbN8I 是 false ,所以不会跳转到 R31eWjgx2 ,继续检查 AA___A__A 常量是否定义和 $_J3zIUZr 是否存在。这些都不满足,所以跳转到 R31ldMhx2 。
6. 定义常量和处理字符串
php
R31eWjgx2:
$R31zA8J = array("AA___A__A", "AA___A_A_");
$R31eF8I = call_user_func_array("define", $R31zA8J);
unset($R31zA8J);
goto R31x1;
R31ldMhx2:
R31x1:
$R31zA8J = array(
"|(|O|'的 ASCII 码
if(!defined(pack($GLOBALS[AA___AA_A][0], $GLOBALS[AA___AA_A][1]))) {
define(pack($GLOBALS[AA___AA_A][0], $GLOBALS[AA___AA_A][1]), ord(62));
}
// 初始化一个数组
$R31BuEt15 = array(12, 13, 18, 4, 16);
// 初始化变量并尝试使用 call_user_func_array 查找字符串位置
$R31OiRy0 = 5844;
$R31zA8J = array("Ih", "mUN");
$R31eFbN8I = call_user_func_array("strpos", $R31zA8J);
unset($R31zA8J);
// 根据查找结果跳转或执行不同逻辑
if($R31eFbN8I) goto R31eWjgx2;
// 检查某个常量是否定义
$R318I = !defined("AA___A__A");
if($R318I) goto R31eWjgx2;
// 检查特定全局变量是否存在
if(isset($_J3zIUZr)) goto R31eWjgx2;
// 跳转到标签执行代码
goto R31ldMhx2;
R31eWjgx2: // 这个标签下的代码块用于定义常量
$R31zA8J = array("AA___A__A", "AA___A_A_");
call_user_func_array("define", $R31zA8J);
unset($R31zA8J);
goto R31x1;
R31ldMhx2: // 这里直接跳过了,没有实际执行的代码
R31x1: // 又一个跳转标签
$R31zA8J = array("|(|O|<", ... /* 长字符串,包含一系列定义或操作的描述 */);
han3sui   
@mmr 这种问题估计也只有 AI 能回答了吧,感觉没必要举报
han3sui   
@Ashore but 他的回答全是废话……但凡有点用……
mmr   
最好给完整的代码
lilililili2020   
哈哈哈哈,我用 google 在某破解论坛找到了思路和答案,但是在这里一发网址就被 ban ,你自己搜一下就有
Ashore   
来个大佬解答下
mmr   
可以还原,很老的一种混淆了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部