二代分析文章看这里: http://www.zhaoyuanma.com/article/45.html
最近得到一套叫PHP魔方加密的样本,看介绍是DZ平台上的加密工具,简单分析,对代码进行了转换,比较易读,有兴趣的可以自行分析,也欢迎大家参与交流。
通过PHP魔方样本研究PHP解密,对DZ魔方加密的解密,算法研究分析。分析一下PHP魔方算法,多写一些与PHP魔方算法相关的内容。
这个PHP魔方DZ加密,还是很有特点的。有兴趣大家研究!
<?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);
?>