因为这个文件字节很大,我截取了一段放下面,文件头部都是这样,调试了一下,没搞出来 看看能不能还原,或者是哪种混淆,之前没见过这种混淆 if(!defined("AA___AA_A"))define("AA___AA_A","AA___AAA_");$GLOBALS[AA___AA_A]=explode("|L|@|
这个 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|<", ... /* 长字符串,包含一系列定义或操作的描述 */);