一段php混淆加密代码,想知道这是什么加密的

查看 72|回复 6
作者:最新的   
原帖:https://www.52pojie.cn/thread-1830001-1-1.html
看了这个帖子,想知道这个是什么加密算法,或者有什么其他解密思路吗?
可以有直接解密的程序,或者开源库
代码示例如下:
加密前:
[PHP] 纯文本查看 复制代码 $vsdata['code'], 'msg' => 'success', 'url' => $vsdata['url']);
        die(json_encode($data));
    }
}
加密后:
[PHP] 纯文本查看 复制代码

代码, 想知道

pxhzai   

这段代码使用了一些混淆和编码技巧来隐藏实际的逻辑和文件路径,但我们可以逐步解析它。
首先,它定义了一些全局变量和常量,这些变量和常量包含了经过编码的信息。例如:
- `A_AA_AAAAAA_AAA__` 和 `A_AA_AAAAAA_A___A` 是定义的常量,它们的值是编码过的字符串。
- `A_AA_AAAAAA_AAA__` 的值解码后为 `"H*415F41415F4141414141415F5F4141415F"`,这看起来像是一些乱码,但实际上是编码后的数据。
- `A_AA_AAAAAA_A___A` 的值解码后为 `"H*61706B2F7631362E706870|r|y||636F6465|r|y||6D7367|r|y||73756363657373|r|y||75726C"`,同样看起来是乱码,但实际上包含了一些文件路径和字符串信息。
然后,代码中创建了数组 `$C3zBuEt1402`,其中填充了一些数字,这些数字可能用于后续的解码操作。
在 `Update` 类的 `Index` 方法中,它继续定义了更多的数组和使用之前定义的全局变量和函数来执行一些操作。这里的关键点在于使用 `pack` 函数和 `require_once` 来加载一个文件,以及调用 `get_url_up()` 函数。
`require_once` 的参数是通过 `pack` 函数从全局变量中解码出来的,这意味着它将加载一个特定的文件(在这个例子中,可能是 `'apk/v16.php'`),而 `get_url_up()` 函数的调用则获取了一些数据。
整个代码的设计是为了避免直接显示其真实意图,通常这种做法是为了保护代码不被轻易阅读或修改。但是,通过对代码进行逐步解码和分析,我们仍然可以理解其基本功能。具体到加密算法,这段代码并没有直接使用标准的加密算法,而是使用了自定义的编码和混淆技术。
kof21411   


pxhzai 发表于 2024-6-8 14:57
这段代码使用了一些混淆和编码技巧来隐藏实际的逻辑和文件路径,但我们可以逐步解析它。
首先,它定义了 ...

你这个ai回答没有意义啊
pxhzai   

gpt
这个代码使用了一种混淆技术来使代码难以阅读和理解。混淆代码的主要目的是通过修改变量名称、函数名称和使用复杂的结构来隐藏代码的原始逻辑。
下面是一些解密思路和步骤:
1. **识别常量定义和使用**:首先识别和解码被混淆的常量和变量。
2. **还原原始字符串**:解码被混淆的字符串常量。
3. **重构代码逻辑**:根据解码的字符串和变量,还原代码的逻辑结构。
### 解密步骤
#### 1. 识别常量定义和使用
代码中使用了多个 `define` 和 `$GLOBALS` 来存储常量和变量。
```php
$GLOBALS[A_AA_AAAAAA_AAA__] = explode("|E|`|k", "H*|E|`|k415F41415F4141414141415F5F4141415F");
$GLOBALS[A_AA_AAAAAA_A___A] = explode("|r|y||", "H*|r|y||61706B2F7631362E706870|r|y||636F6465|r|y||6D7367|r|y||73756363657373|r|y||75726C");
```
首先解析这些变量。
```php
$GLOBALS["A_AA_AAAAAA_AAA__"] = explode("|E|`|k", "H*|E|`|k415F41415F4141414141415F5F4141415F");
// 结果是 ["H*", "415F41415F4141414141415F5F4141415F"]
$GLOBALS["A_AA_AAAAAA_A___A"] = explode("|r|y||", "H*|r|y||61706B2F7631362E706870|r|y||636F6465|r|y||6D7367|r|y||73756363657373|r|y||75726C");
// 结果是 ["H*", "61706B2F7631362E706870", "636F6465", "6D7367", "73756363657373", "75726C"]
```
#### 2. 还原原始字符串
使用 `pack` 函数和 `hex` 解码还原原始字符串。
```php
$pack = "pack";
echo $pack("H*", "415F41415F4141414141415F5F4141415F"); // "_AA_AAAAAA_AAA__"
echo $pack("H*", "61706B2F7631362E706870"); // "apk/v16.php"
echo $pack("H*", "636F6465"); // "code"
echo $pack("H*", "6D7367"); // "msg"
echo $pack("H*", "73756363657373"); // "success"
echo $pack("H*", "75726C"); // "url"
```
#### 3. 重构代码逻辑
把还原后的字符串替换回原始代码中。
```php
$vsdata['code'], 'msg' => 'success', 'url' => $vsdata['url']);
        die(json_encode($data));
    }
}
```
这样还原后的代码就变得易读了。
### 自动化解密
要实现自动化解密,可以使用脚本来解析和还原字符串。下面是一个简单的 Python 示例:
```python
import re
def decode_hex(hex_str):
    return bytes.fromhex(hex_str).decode('utf-8')
# 示例代码
code = """
$GLOBALS[A_AA_AAAAAA_AAA__] = explode("|E|`|k", "H*|E|`|k415F41415F4141414141415F5F4141415F");
$GLOBALS[A_AA_AAAAAA_A___A] = explode("|r|y||", "H*|r|y||61706B2F7631362E706870|r|y||636F6465|r|y||6D7367|r|y||73756363657373|r|y||75726C");
"""
# 解析 explode 语句
matches = re.findall(r'explode\("[^"]*"\s*,\s*"[^"]*"\)', code)
for match in matches:
    parts = match.split(',')
    delimiter = parts[0].split('"')[1]
    encoded_str = parts[1].split('"')[1]
    decoded_parts = encoded_str.split(delimiter)
   
    decoded_hex = [decode_hex(part.strip()) for part in decoded_parts]
    print(decoded_hex)
```
通过这个 Python 脚本,你可以自动解析和解码混淆代码中的字符串。
最新的
OP
  


pxhzai 发表于 2024-6-8 15:28
gpt
这个代码使用了一种混淆技术来使代码难以阅读和理解。混淆代码的主要目的是通过修改变量名称、函数 ...

我昨天也是用gpt和bing都试过,要想完整的还原只能手动,但是有10多个,我不想一个个手动解
JavaUser   

代码定义了一些常量和全局变量,并对字符串进行了加密和解密操作。if (!defined("A_AA_AAAAAA_AAA__")) {
    define("A_AA_AAAAAA_AAA__", "A_AA_AAAAAA_AAA_A");
}
$GLOBALS[A_AA_AAAAAA_AAA__] = explode("|E|`|k", "H*|E|`|k415F41415F4141414141415F5F4141415F");
if (!defined("A_AA_AAAAAA_A___A")) {
    define("A_AA_AAAAAA_A___A", "A_AA_AAAAAA_A__A_");
}
$GLOBALS[A_AA_AAAAAA_A___A] = explode("|r|y||", "H*|r|y||61706B2F7631362E706870|r|y||636F6465|r|y||6D7367|r|y||73756363657373|r|y||75726C");
这个代码片段定义了一些常量和全局变量,并对字符串进行了加密和解密操作。
解密
全局变量解码:
explode("|E||k", "H|E||k415F41415F4141414141415F5F4141415F")
结果为:["H", "415F41415F4141414141415F5F4141415F"]
explode("|r|y||", "H|r|y||61706B2F7631362E706870|r|y||636F6465|r|y||6D7367|r|y||73756363657373|r|y||75726C")
结果为:["H", "61706B2F7631362E706870", "636F6465", "6D7367", "73756363657373", "75726C"]
使用 pack 函数解码:
pack("H", "415F41415F4141414141415F5F4141415F") 解码为:_AA_AAAA_AAA
pack("H", "61706B2F7631362E706870") 解码为:apk/v16.php
pack("H", "636F6465") 解码为:code
pack("H", "6D7367") 解码为:msg
pack("H", "73756363657373") 解码为:success
pack("H", "75726C") 解码为:url
使用解码后的变量和常量来定义新常量,并包含文件:
if (!defined(pack($GLOBALS[A_AA_AAAAAA_AAA__][0], $GLOBALS[A_AA_AAAAAA_AAA__][1]))) {
    define(pack($GLOBALS[A_AA_AAAAAA_AAA__][0], $GLOBALS[A_AA_AAAAAA_AAA__][1]), ord(63));
}
pack($GLOBALS[A_AA_AAAAAA_AAA__][0],$GLOBALS[A_AA_AAAAAA_AAA][1]) 解码为 "_AA_AAAAAAA_",即常量值 _AA_AAAA_AAA。
接下来,代码定义了一个类 Update,其中包含一个 Index 方法:
class Update extends Base
{
    public function Index()
    {
        $C3zBuEt1403 = array();
        $C3zBuEt1403[] = 4;
        $C3zBuEt1403[] = 20;
        $C3zBuEt1403[] = 3;
        $C3zBuEt1403[] = 14;
        $C3zBuEt1403[] = 11;
        $A_AA_AAAAAA_A__AA = "pack";
        $C3zeF8H = $A_AA_AAAAAA_A__AA($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][1]);
        $C3z8H = (require_once $C3zeF8H);
        unset($C3ztI8H);
        $C3ztI8H = get_url_up();
        $vsdata = $C3ztI8H;
        $A_AA_AAAAAA_A_A__ = "pack";
        $C3zeFvP8H = $A_AA_AAAAAA_A_A__($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][2]);
        $A_AA_AAAAAA_A_A_A = "pack";
        $C3zeFvPvP8I = $A_AA_AAAAAA_A_A_A($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][2]);
        $A_AA_AAAAAA_A_AA_ = "pack";
        $C3zeFvP8J = $A_AA_AAAAAA_A_AA_($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][3]);
        $A_AA_AAAAAA_A_AAA = "pack";
        $C3zeFvP8K = $A_AA_AAAAAA_A_AAA($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][4]);
        $A_AA_AAAAAA_AA___ = "pack";
        $C3zeFvP8L = $A_AA_AAAAAA_AA___($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][5]);
        $A_AA_AAAAAA_AA__A = "pack";
        $C3zeFvPvP8M = $A_AA_AAAAAA_AA__A($GLOBALS[A_AA_AAAAAA_A___A][0], $GLOBALS[A_AA_AAAAAA_A___A][5]);
        $C3zzA8N = array();
        $C3zzA8N[$C3zeFvP8H] = $vsdata[$C3zeFvPvP8I];
        $C3zzA8N[$C3zeFvP8J] = $C3zeFvP8K;
        $C3zzA8N[$C3zeFvP8L] = $vsdata[$C3zeFvPvP8M];
        unset($C3ztI8H);
        $C3ztI8H = $C3zzA8N;
        $data = $C3ztI8H;
        die(json_encode($data));
    }
}
将所有解码操作展开后的简化代码如下:
class Update extends Base
{
    public function Index()
    {
        // 包含 apk/v16.php 文件
        $filePath = "apk/v16.php";
        require_once $filePath;
        // 调用 get_url_up 函数并存储结果
        $urlData = get_url_up();
        // 构建响应数据
        $response = array();
        $response['code'] = $urlData['code'];
        $response['msg'] = "success";
        $response['success'] = $urlData['url'];
        // 返回 JSON 编码的响应数据
        die(json_encode($response));
    }
}
hc3w   


hc3w 发表于 2024-6-10 16:00

按理来讲是可以完整还原的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部