找源码首页 - 技术文章

php魔方加密|dz魔方加密|php魔方加密破解|dz魔方加密破解|dz魔方加密算法

更新日期:2016-01-26 21:28:24

二代分析文章看这里: http://www.zhaoyuanma.com/article/45.html

最近得到一套叫PHP魔方加密的样本,看介绍是DZ平台上的加密工具,简单分析,对代码进行了转换,比较易读,有兴趣的可以自行分析,也欢迎大家参与交流。

通过PHP魔方样本研究PHP解密,对DZ魔方加密的解密,算法研究分析。分析一下PHP魔方算法,多写一些与PHP魔方算法相关的内容。

这个PHP魔方DZ加密,还是很有特点的。有兴趣大家研究!



mofang.rar



<?php
$fun_array = array(
    "\xbc\xae\xc2\x87\x80\x83\x86" => "fun_1",
    "\xbc\xae\xc2\xd7\x8a\x85\x83" => "fun_2",
    "\xbc\xae\xc2\x82\x92\x82\x80" => "fun_3",
    "\xbc\xae\xc2\x8b\x9a\x80\x80" => "fun_4",
    "\xbc\xae\xc2\xc0\xa0\x84\x80" => "fun_5",
    "\xbc\xae\xc2\xa2\xaa\x86\x83" => "fun_6",
    "\xbc\xae\xc2\xad\xb1\x83\x83" => "fun_7",
    "\xbc\xae\xc2\xcf\xbe\x85\x87" => "fun_8",
    "\xbc\xae\xc2\xb9\xc2\x80\x84" => "fun_9",
    "\xbc\xae\xc2\xbb\xce\x81\x85" => "fun_10",
    "\xbc\xae\xc2\xc0\x87\x8f\x80" => "fun_11",
    "\xbc\xae\xc2\xc7\x8f\x8b\x83" => "fun_12",
    "\xbc\xae\xc2\x80\x96\x8b\x86" => "fun_13",
    "\xbc\xae\xc2\xc2\x98\x8e\x86" => "fun_14",
    "\xbc\xae\xc2\x90\xa2\x8d\x84" => "fun_15",
    "\xbc\xae\xc2\x9b\xa9\x8a\x80" => "fun_16",
    "\xbc\xae\xc2\xdc\xb5\x89\x85" => "fun_17",
    "\xbc\xae\xc2" => "fun_18"
);
function fixstr($mystr)
{
    global $fun_array;
    foreach ($fun_array as $k => $v) {
        $mystr = str_ireplace($k, $v, $mystr);
    }
    return $mystr;
}
function fun_1(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[$v_4] = !$v_3[$v_4];
}
function fun_2(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[$v_4] =& $_GET;
}
function fun_3(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[$v_4 - 1] = $v_3[$v_4 - 1] == $v_3[$v_4];
}
function fun_4(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[$v_4 + 1] = NULL;
    $v_4           = $v_4 + 1;
}
function fun_5(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[$v_4] = "";
    $var_1     = (int) ($v_1[$v_2++]);
    $var_2     = $v_1[$v_2++];
    for ($var_3 = 0; $var_3 < $var_1; $var_3++) {
        $v_3[$v_4] .= $v_1[$v_2++] ^ $var_2;
    }
}
function fun_6(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[++$v_4] = NULL;
}
function fun_7(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $var_4 = $v_3[$v_4];
    unset($v_3[$v_4]);
    $v_3[$v_4] = $var_4;
}
function fun_8(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    if ($v_3[$v_4]) {
        $var_5 = $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++];
        $v_2 += (int) $var_5;
    } else {
        $v_2 += 12;
    }
}
function fun_9(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_4 = $v_4 + ((int) $v_1[$v_2++]);
}
function fun_10(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $var_6 = $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++] . $v_1[$v_2++];
    $v_2 += (int) $var_6;
}
function fun_11(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $var_7 =& $v_3[$v_4 - 1];
    unset($v_3[$v_4 - 1]);
    $v_3[$v_4 - 1] =& $var_7[$v_3[$v_4]];
}
function fun_12(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_3[$v_4] = "";
    $var_8     = (int) ($v_1[$v_2++] . $v_1[$v_2++]);
    $var_9     = $v_1[$v_2++];
    for ($var_10 = 0; $var_10 < $var_8; $var_10++) {
        $v_3[$v_4] .= $v_1[$v_2++] ^ $var_9;
    }
}
function fun_13(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    echo $v_3[$v_4];
}
function fun_14(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    unset($v_3[$v_4]);
    $v_4 = $v_4 - 1;
}
function fun_15(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_4       = $v_4 + 1;
    $v_3[$v_4] = NULL;
}
function fun_16(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    unset($v_3[$v_4--]);
}
function fun_17(&$v_1, &$v_2, &$v_3, &$v_4, &$v_5, &$v_6, &$v_7)
{
    $v_2 = $v_3[$v_5 - 1];
    $v_5 = $v_3[$v_5];
}
function fun_18($v_1, $v_2)
{
    static $var_11;
    if (strlen($var_11) == 0) {
        $var_11 = "\x12\xab\xd0\x14\x92\x96\x30\xa0+\x3a\xa6\x20\x20\x1a\xcd\x90\x1c\x9f\x99\x9c\x17\x06\x9a\x1c\x1c\xe9)I\xefmi\x36\x23NLEBMD\xdb\x1b\x5c\xddT\x5bF\xdd\xef\x40\xcc\xc6\xba\x17\x0b\xbc\x39\x39d\xf4\xc6b\xe9\xe0\xf9\x39Y\xff}y\x33\xcf\xb6\xaa\xbc\x06\x84\x94\x00\x84\x86\x0b\x90\xa2\x0d\x81\x8bj\xed\xeal\xe9\xec\xed\x22S\xebhj\x36\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1Zh\xc7KA\xa5\x35\x07\xa3(\x21i\xae\xe6o\xe2\xea\x31\x30u\xa3\xd0\xb7\x9c\xa7\xa4\xca\xdf\xb6\xb0\x15\x95\x83\x13\x9e\x93\xbe\x7c\x26\xb8\x30\x38h\xd3\xa6n\xe9\xed\x35\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00i\xab\xf1o\xe7\xef\x9e\x15\x04\x98\x1e\x1e\xc7\x00H\xc1LD\x32\x30/\xe5\x9d\xec\x9b\x9d\xe1\xe5\xd2\x9d\xea\xeb\xf3\x9b\xdd\x90\x85\xe1\xfd\xeb\xf7\xa4\x24\x32\xa2/\x22\xf1jX\xf7{q\x8c.\x26\x8a\x0a\x0f\xa8j\x30\xae\x26.\x3c\x9e\x96\x3a\xba\xbf\xb9e\x0c\xbf\x30\x3c";
    }
    $var_12 = array();
    $var_13 = array();
    $var_14 = $var_15 = 0;
    foreach ($v_1 as $var_16) {
        $var_12[++$var_14] = $var_16;
    }
    $var_12[++$var_14] = count($v_1);
    $var_12[++$var_14] = -1;
    $var_12[++$var_14] = 0;
    $var_17            = $var_14;
    while ($v_2 >= 0) {
        $var_16 = "\xbc\xae\xc2" . ($var_11[$v_2] ^ $var_11[$v_2 + 1]) . ($var_11[$v_2] ^ $var_11[$v_2 + 2]) . ($var_11[$v_2] ^ $var_11[$v_2 + 4]) . ($var_11[$v_2] ^ $var_11[$v_2 + 5]);
        $v_2 += ord($var_11[$v_2] ^ $var_11[$v_2 + 3]);
        $var_16 = fixstr($var_16);
        $var_16($var_11, $v_2, $var_12, $var_14, $var_17, $var_13, $var_15);
    }
    return $var_12[$var_14];
}
fun_18(array(), 0);
?>