360技术联盟

魔方加密解密测试调试方法

作者:360技术联盟   发布时间:2018-03-15 13:45   回复数:20   浏览数:689
360技术联盟
68920360技术联盟终身ViP
热门 2018-03-15 13:45:26
68920 热门 2018-03-15 13:45:26
[color=rgb(36, 41, 46)][font=-apple-system, BlinkMacSystemFont, &quot]魔方加密解密测试
[color=rgb(36, 41, 46)][font=-apple-system, BlinkMacSystemFont, &quot]调试方法可见文档内注释。
<?php

define(\"DEBUG\", \"vv\");

/**
 * # DEBUG 调试说明
 *
 * ## 基础设置:
 *     DEBUG 设置为v输出eval的指令,vv输出全部虚拟机指令,vvv输出更多扩展信息
 *
 * ## DEBUG 日志代码缩写对应表
 *     s2p String to Pointer, 字符串转指针
 *     push 压入堆栈
 *     pop 出栈
 *     mov 赋值
 *     eval执行代码
 *
 * # 日志格式对应意义
 *     $src_index           $method         $code
 *     当前代码执行位置     方法缩写        相关信息
 *
 */

// Discuz 内部模拟
// define(\"IN_DISCUZ\", true);
// define(\"IN_ADMINCP\", true);
// define(\"DISCUZ_ROOT\", 'C:\Users\computer\PhpstormProjects\untitled');
[color=rgb(36, 41, 46)][font=-apple-system, BlinkMacSystemFont, &quot][color=rgb(3, 102, 214)][backcolor=rgb(246, 248, 250)]kvm.php
<?php
define(\"DEBUG\", \"vv\");
/**
 * # DEBUG 调试说明
 *
 * ## 基础设置:
 *     DEBUG 设置为v输出eval的指令,vv输出全部虚拟机指令,vvv输出更多扩展信息
 *
 * ## DEBUG 日志代码缩写对应表
 *     s2p String to Pointer, 字符串转指针
 *     push 压入堆栈
 *     pop 出栈
 *     mov 赋值
 *     eval执行代码
 *
 * # 日志格式对应意义
 *     $src_index           $method         $code
 *     当前代码执行位置     方法缩写        相关信息
 *
 */
// Discuz 内部模拟
// define(\"IN_DISCUZ\", true);
// define(\"IN_ADMINCP\", true);
// define(\"DISCUZ_ROOT\", 'C:\Users\computer\PhpstormProjects\untitled');
/**
 * @param $obj object
 * @return array
 */
function object_to_array($obj)
{
    $obj = (array)$obj;
    foreach ($obj as $k => $v) {
        if (gettype($v) == 'object' || gettype($v) == 'array') {
            $obj[$k] = (array)object_to_array($v);
        }
    }
    return $obj;
}
$var_dict = object_to_array(json_decode('{\"$_var_0\": \"JLWMyIuD\", \"$file_namespace\": \"JLWMyJ/D\", \"$_var_2\": \"JLWMyJPw\", \"$file_ns_index\": \"JLWMyNag\", \"$_var_4\": \"JLWMyLfF\", \"$src_index\": \"JLWMyLTk\", \"$encoded_src\": \"JLWMyOmV\", \"$tmp\": \"JLWMyOSx\", \"$plain_src\": \"JLWMyPz6\", \"s_eval(\": \"ZXZhbCg=\"}'));
foreach ($var_dict as $var_key => $var_value) {
    $var_dict[$var_key] = base64_decode($var_value);
}
function s_eval($code)
{
    global $var_dict;
    /** @noinspection PhpUnusedLocalVariableInspection */
    global $_var_0, $file_namespace, $_var_2, $file_ns_index, $_var_4, $src_index, $encoded_src, $tmp, $plain_src;
    foreach ($var_dict as $var_key => $var_value) {
        if (strpos($code, $var_value) === false) {
            continue;
        } else {
            $code = str_replace($var_value, $var_key, $code);
        }
    }
    write_log_line('eval', $code);
    dump_vminfo();
    dump_memory();
    $eval_result = eval($code);
    dump_vminfo();
    dump_memory();
    return $eval_result;
}
function write_log_line($method, $code)
{
    if (!defined('DEBUG') || substr_count(DEBUG, 'v') < 1) return;
    if ($method != 'eval' && substr_count(DEBUG, 'v') < 2) return;
    global $src_index;
    print(sprintf('0x%08s', dechex($src_index)) . \"\t$method\t $code \r\n\");
    return;
}
function dump_memory()
{
    if (!defined('DEBUG') || substr_count(DEBUG, 'v') < 3) return;
    global $file_namespace, $file_ns_index;
    for ($i = 0; $i <= $file_ns_index; $i++)
        echo \"  \$file_namespace[$i]: $file_namespace[$i]\n\";
    return;
}
function dump_vminfo()
{
    if (!defined('DEBUG') || substr_count(DEBUG, 'v') < 3) return;
    global $file_ns_index, $src_index;
    echo \"  \$file_ns_indexfile_ns_index\t\$src_indexsrc_index\" . sprintf('0x%08s', dechex($src_index)) . \"\r\n\";
    return;
}
if (isset($_var_0)) {
    array_push($_var_0, $file_namespace, $_var_2, $file_ns_index, $_var_4, $src_index);
} else {
    $_var_0 = array();
}
static $encoded_src = null;
if (empty($encoded_src)) {
    $encoded_src = file_get_contents('pec.vmc');
}
$file_namespace = array(__FILE__);
$_var_2 = array(0);
$file_ns_index = $_var_4 = $src_index = 0;
$tmp = $plain_src = null;
try {
    while (1) {
        while ($src_index >= 0) {
            $plain_src = $encoded_src[$src_index++];
            switch ($plain_src ^ $encoded_src[$src_index++]) {
                case '1':
                    $tmp = (int)(($plain_src ^ $encoded_src[$src_index]) . ($plain_src ^ $encoded_src[$src_index + 1]));
                    $src_index += 2;
                    break;
                case '2':
                    $tmp = (int)(($plain_src ^ $encoded_src[$src_index]) . ($plain_src ^ $encoded_src[$src_index + 1]) . ($plain_src ^ $encoded_src[$src_index + 2]) . ($plain_src ^ $encoded_src[$src_index + 3]));
                    $src_index += 4;
                    break;
                case '3':
                    $tmp = (int)(($plain_src ^ $encoded_src[$src_index]) . ($plain_src ^ $encoded_src[$src_index + 1]) . ($plain_src ^ $encoded_src[$src_index + 2]) . ($plain_src ^ $encoded_src[$src_index + 3]) . ($plain_src ^ $encoded_src[$src_index + 4]) . ($plain_src ^ $encoded_src[$src_index + 5]) . ($plain_src ^ $encoded_src[$src_index + 6]) . ($plain_src ^ $encoded_src[$src_index + 7]) . ($plain_src ^ $encoded_src[$src_index + 8]) . ($plain_src ^ $encoded_src[$src_index + 9]));
                    $src_index += 10;
                    break;
                case 'a':
                    write_log_line('pop', \"$file_ns_index: $file_namespace[$file_ns_index]\");
                    unset($file_namespace[$file_ns_index--]);
                    dump_memory();
                    continue 2;
                case 'b':
                    //花指令
                    $plain_src = null;
                    continue 2;
                case 'c':
                    write_log_line('push', 'null');
                    $file_namespace[++$file_ns_index] = null;
                    dump_memory();
                    continue 2;
                case 'd':
                    if (is_scalar($file_namespace[$file_ns_index - 1])) {
                        $plain_src = $file_namespace[$file_ns_index - 1];
                        unset($file_namespace[$file_ns_index - 1]);
                        $file_namespace[$file_ns_index - 1] = $plain_src[$file_namespace[$file_ns_index]];
                    } else {
                        if (!is_array($file_namespace[$file_ns_index - 1])) {
                            $file_namespace[$file_ns_index - 1] = array();
                        }
                        $plain_src =& $file_namespace[$file_ns_index - 1][$file_namespace[$file_ns_index]];
                        unset($file_namespace[$file_ns_index - 1]);
                        $file_namespace[$file_ns_index - 1] =& $plain_src;
                        unset($plain_src);
                    }
                    continue 2;
                case 'e':
                    //s2p String to Pointer, 字符串转指针
                    write_log_line('s2p', \"\$file_namespace[$file_ns_index]\");
                    switch ($file_namespace[$file_ns_index]) {
                        case 'this':
                            $file_namespace[$file_ns_index] =& $this;
                            break;
                        case 'GLOBALS':
                            $file_namespace[$file_ns_index] =& $GLOBALS;
                            break;
                        case '_SERVER':
                            $file_namespace[$file_ns_index] =& $_SERVER;
                            break;
                        case '_GET':
                            $file_namespace[$file_ns_index] =& $_GET;
                            break;
                        case '_POST':
                            $file_namespace[$file_ns_index] =& $_POST;
                            break;
                        case '_FILES':
                            $file_namespace[$file_ns_index] =& $_FILES;
                            break;
                        case '_COOKIE':
                            $file_namespace[$file_ns_index] =& $_COOKIE;
                            break;
                        case '_SESSION':
                            $file_namespace[$file_ns_index] =& $_SESSION;
                            break;
                        case '_REQUEST':
                            $file_namespace[$file_ns_index] =& $_REQUEST;
                            break;
                        case '_ENV':
                            $file_namespace[$file_ns_index] =& $_ENV;
                            break;
                        default:
                            $file_namespace[$file_ns_index] =& ${$file_namespace[$file_ns_index]};
                    }
                    dump_memory();
                    continue 2;
                case 'f':
                    $tmp = $plain_src ^ $encoded_src[$src_index++];
                    if ($tmp == 'd') {
                        $tmp = (int)(($plain_src ^ $encoded_src[$src_index]) . ($plain_src ^ $encoded_src[$src_index + 1]));
                        $src_index += 2;
                    } elseif ($tmp == 'q') {
                        $tmp = (int)(($plain_src ^ $encoded_src[$src_index]) . ($plain_src ^ $encoded_src[$src_index + 1]) . ($plain_src ^ $encoded_src[$src_index + 2]) . ($plain_src ^ $encoded_src[$src_index + 3]));
                        $src_index += 4;
                    } elseif ($tmp == 'x') {
                        $tmp = (int)(($plain_src ^ $encoded_src[$src_index]) . ($plain_src ^ $encoded_src[$src_index + 1]) . ($plain_src ^ $encoded_src[$src_index + 2]) . ($plain_src ^ $encoded_src[$src_index + 3]) . ($plain_src ^ $encoded_src[$src_index + 4]) . ($plain_src ^ $encoded_src[$src_index + 5]) . ($plain_src ^ $encoded_src[$src_index + 6]) . ($plain_src ^ $encoded_src[$src_index + 7]) . ($plain_src ^ $encoded_src[$src_index + 8]) . ($plain_src ^ $encoded_src[$src_index + 9]));
                        $src_index += 10;
                    } else {
                        break 2;
                    }
                    $file_namespace[++$file_ns_index] = '';
                    while ($tmp-- > 0) {
                        $file_namespace[$file_ns_index] .= $plain_src ^ $encoded_src[$src_index++];
                    }
                    write_log_line('mov', \"\$file_namespace[$file_ns_index], $file_namespace[$file_ns_index]\");
                    dump_memory();
                    continue 2;
                default:
                    break 2;
            }
            while ($tmp-- > 0) {
                $plain_src .= $plain_src[0] ^ $encoded_src[$src_index++];
            }
            s_eval(substr($plain_src, 1));
        }
        if ($src_index == -1) {
            break;
        } elseif ($src_index == -2) {
            s_eval($_var_2[$_var_4 - 1]);
            $src_index = $_var_2[$_var_4];
            $_var_4 -= 2;
        } else {
            exit('KIVIUQ VIRTUAL MACHINE ERROR : Access violation at address ' . ($src_index < 0 ? $src_index : sprintf('%08X', $src_index)));
        }
    }
} catch (Exception $plain_src) {
    if (!empty($_var_0)) {
        $src_index = array_pop($_var_0);
        $_var_4 = array_pop($_var_0);
        $file_ns_index = array_pop($_var_0);
        $_var_2 = array_pop($_var_0);
        $file_namespace = array_pop($_var_0);
    }
    /** @noinspection PhpUnhandledExceptionInspection */
    throw $plain_src;
}
if (!empty($_var_0)) {
    $src_index = array_pop($_var_0);
    $_var_4 = array_pop($_var_0);
    $file_ns_index = array_pop($_var_0);
    $_var_2 = array_pop($_var_0);
    $file_namespace = array_pop($_var_0);
}
[color=rgb(36, 41, 46)][font=-apple-system, BlinkMacSystemFont, &quot]附件下载:
[color=rgb(36, 41, 46)][font=-apple-system, BlinkMacSystemFont, &quot]
本部分内容设定了隐藏,需要回复后才能看到

cqitinfo_768
沙发cqitinfo_768步入草根 2025-11-11 02:41
6666666
非、凡
板凳非、凡步入草根 2025-11-10 23:59
支持楼主
noriter2
地板noriter2年费ViP 2018-08-09 21:16
看看
爱唯一结婚网
4楼爱唯一结婚网步入草根 2018-08-01 17:31
谢谢分享
魔神守护
5楼魔神守护步入草根 2018-06-06 00:43
看看内容可以不
胜利网
6楼胜利网终身ViP 2018-06-05 23:42
魔方加密解密测试调试方法 [修改]
小建多怪
7楼小建多怪步入草根 2018-05-19 23:44
我具体看看。
9336677
8楼9336677步入草根 2018-05-19 18:16
看侃侃卡那困难
新时代影视
9楼新时代影视禁止发言 2018-05-15 21:48
用户被禁言,该主题自动屏蔽!
曹妮全嘉
10楼曹妮全嘉步入草根 2018-05-06 21:24
#在这里当前代码执行位置快速回复#
康粑粑
11楼康粑粑步入草根 2018-05-04 16:43
RE: 魔方加密解密测试调试方法 [修改]
dinggh
12楼dinggh终身ViP 2018-04-14 16:03
啥附件呀,看看
逆念科技
13楼逆念科技步入草根 2018-03-25 05:34
 模板插件安装服务看看学习下,谢谢分享
逆念科技
14楼逆念科技步入草根 2018-03-25 05:31
魔方加密解密测试调试方法
游客
登录后才可以回帖,登录 或者 注册