这段代码是 PHP 混淆吗?

22 天前
 Aura23022

因为这个文件字节很大,我截取了一段放下面,文件头部都是这样,调试了一下,没搞出来

看看能不能还原,或者是哪种混淆,之前没见过这种混淆

if(!defined("AA___AA_A"))define("AA___AA_A","AA___AAA_");$GLOBALS[AA___AA_A]=explode("|L|@|<", "H*|L|@|<41415F5F5F415F5F5F");if(!defined(pack($GLOBALS[AA___AA_A][00],$GLOBALS[AA___AA_A][0x1])))define(pack($GLOBALS[AA___AA_A][00],$GLOBALS[AA___AA_A][0x1]), ord(62));$R31BuEt15=array();$R31BuEt15[]=12;$R31BuEt15[]=13;$R31BuEt15[]=18;$R31BuEt15[]=4;$R31BuEt15[]=16;$R31OiRy0=5844;$R31zA8J=array();$R31zA8J[]="Ih";$R31zA8J[]="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();$R31zA8J[]="AA___A__A";$R31zA8J[]="AA___A_A_";$R31eF8I=call_user_func_array("define",$R31zA8J);unset($R31zA8J);goto R31x1;R31ldMhx2:R31x1:$R31zA8J=array();$R31zA8J[]="|(|O|<";$R31zA8J[]="H*|(|O|<41415F5F5F5F41415F|(|O|<646566696E65|(|O|<41415F5F5F5F414141|(|O|<746F6B656E|(|O|<|(|O|<756964|(|O|<636F6465|(|O|<6D7367|(|O|<E98080E587BAE799BBE5BD95E68890E58A9FEFBC81|(|O|<E799BBE5BD95E8BF87E69C9FEFBC81|(|O|<E58F82E695B0E99499E8AFAF21";
2652 次点击
所在节点    PHP
33 条回复
LLaMA2
21 天前
没有权限访问啊,朋友

f.ws59.cn/f/easptv5cju5
Aura23022
21 天前
@LLaMA2 现在试试
LLaMA2
21 天前
phpstorm 打开你的工程,打开你的 login.php,

运行前编辑配置,选择你的 login.php 文件,

在 login.php 的第二行头下断, 点击 debug 跑起来,有什么问题?

我这里缺少工程的 require_once(../../class/method.php)
Aura23022
21 天前
@LLaMA2 感谢佬,那我尝试一下,我之前用 vscode 调试的,感谢佬!!!!
LLaMA2
21 天前
第一次调试可能在调试边栏提示安装 xdebug, 点击安装,可能需要代理
我按了多次 F7 之后的堆栈如下显示


$AA_____A_ = {string[2]} ["H*", "415F414141415F5..."]
$R31BuEt14 = {int[5]} [20, 15, 11, 18, 4]
$R31OiRy0 = {int} 8003
$R31eFbN8I = false
$R31zA8J = {string[1]} ["<qMacaV>"]
b821025551b
21 天前
base64: aHR0cHM6Ly93d3cuNTJwb2ppZS5jbi90aHJlYWQtMTgzMDAwMS0xLTEuaHRtbA==
kk2syc
21 天前
@Aura23022 文件发来看看
jinliming2
21 天前
@iminto 有没有可能,第一步用脚本从后往前把代码里的常量全部替换成字面量,比如 __LINE__ 啥的,再格式化?
LLaMA2
21 天前
<?php
if (!defined("__AAA___")) define("__AAA___", 8);

$directoryCheck = is_dir("<qMacaV>");
$timeCheck = !time();
$constantCheck = !defined("A_AAAAA_A");

if ($directoryCheck || $timeCheck || $constantCheck) {
define("A_AAAAA_A", "A_AAAAAA_");
}

define("QUERY", "SELECT * FROM `admin` WHERE username = '?' AND `password` = '?' LIMIT 1");
define("UPDATE_QUERY", "UPDATE `admin` SET `login_time` = '?' WHERE `id` = '?'");
define("CLIENT_QUERY", "SELECT * FROM `client` WHERE id = '?' AND `password` = '?' LIMIT 1");
$R31_Exploded_URL = "http://172.245.210.201/php/app/user/user.php?token=PLACEHOLDER&utype=PLACEHOLDER&domain=PLACEHOLDER&type=4";

if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];

// Connect to the database
include("../config/database.php");

// Query the database
$query = str_replace(["?", "?"], [$username, md5($password)], QUERY);
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) == 1) {
$row = mysqli_fetch_assoc($result);
$id = $row['id'];
$token = md5(uniqid(mt_rand(), true));
$url = str_replace(["PLACEHOLDER", "PLACEHOLDER", "PLACEHOLDER"], [$token, $row['type'], $_SERVER['HTTP_HOST']], $R31_Exploded_URL);

// Update login time
$update_query = str_replace(["?", "?"], [date("Y-m-d H:i:s"), $id], UPDATE_QUERY);
mysqli_query($conn, $update_query);

// Redirect to the URL
header("Location: $url");
exit();
} else {
echo "Invalid username or password.";
}
}
?>
Aura23022
21 天前
@kk2syc 上面增加附言,就是案例,加密前后可以对比
Aura23022
21 天前
@LLaMA2 相当可以了,我昨晚尝试借助 ai 都没还原这么好,上面贴了一个案例,可以分析一下
LLaMA2
21 天前
使用 github copilot
提示词
~~~~~~~你给的代码
上面是一段 php 混淆后的代码,请解混淆后并计算 pack 函数输出字面量,并尽可能地简化逻辑,最终代码中务必要确保变量都是明确的计算后的字面量

输出结果如




这段代码使用了一些混淆技术,包括使用 pack 函数和 define 函数来创建变量和常量,以及使用$GLOBALS 数组来存储数据。以下是解混淆后的代码:


<?php
namespace app\api\controller\v6;

class Update extends Base
{
public function Index()
{
require_once "apk/v16.php";
$vsdata = get_url_up();
$data = array();
$data["code"] = $vsdata["code"];
$data["msg"] = "success";
$data["url"] = $vsdata["url"];
die(json_encode($data));
}
}


在这段代码中,我已经将所有的 pack 函数调用的结果直接替换为它们的实际值,并且删除了所有不必要的变量和$GLOBALS 调用。这段代码的主要功能是从 get_url_up 函数获取数据,然后将这些数据包装在一个数组中,并将这个数组编码为 JSON 格式,然后输出。
Aura23022
21 天前
@LLaMA2 github copilot 的还原度是现在这几个 ai 中还原度最高的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1047659

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX