解码混淆的PHP源代码

时间:2011-11-05 13:27:56

标签: php character-encoding

如何将每个文件重写为可读代码?

例如在源代码中有这样的变量:

${"\x47\x4c\x4f\x42\x41\x4cS"}["y\x61\x72\x64s\x70\x71"]="va\x6cu\x65";

如何将其转换为可读代码,例如:

$somevariable = "somevalue";

5 个答案:

答案 0 :(得分:4)

这不是UTF8,这只是某些人想到的使代码不易读的混淆。您可以将每个字符串转换为其字符表示形式。例如,\x41表示'captial A'。

您不必自己转换这些值。当您回显字符串时,它将显示其实际值。

赞誉只是一种将字符串值用于变量名称的方法,所以 ${'foo'} = 10;会将变量$foo设置为10.

在你的情况下,你得到的脚本会弄乱你的全局。

<pre><?php

//${"\x47\x4c\x4f\x42\x41\x4cS"}["y\x61\x72\x64s\x70\x71"]="va\x6cu\x65";

echo
  'It means: ' .
  '${"' . "\x47\x4c\x4f\x42\x41\x4cS" .
  '"}["' . "y\x61\x72\x64s\x70\x71" . '"]="' .
  "va\x6cu\x65" . '";<br>';

// = $GLOBALS['yardspq'] = 'value';

var_dump(${"\x47\x4c\x4f\x42\x41\x4cS"});

?>

答案 1 :(得分:4)

只需将所有\xNN替换为chr(NN)。例如:

$source = file_get_contents('obfuscated_source.php');
if (preg_match_all('/\\x(..)/', $source, $matches)) {
    for ($i = 0, $len = count($matches[0]); $i < $len; ++$i) {
        $source = str_replace($matches[0][$i], chr(hexdec($matches[1][$i])), $source);
    }
}
file_put_contents('source.php', $source);

答案 2 :(得分:2)

只需打印出简单的字符串,例如:

<pre><?php
    //${"\x47\x4c\x4f\x42\x41\x4cS"}["y\x61\x72\x64s\x70\x71"]="va\x6cu\x65";
    print_r(
        array(
            "\x47\x4c\x4f\x42\x41\x4cS",
            "y\x61\x72\x64s\x70\x71",
            "va\x6cu\x65",
        )
    );
?></pre>

对我来说,结果是:

$GLOBALS["yardspq"]="value";

See it working...

答案 3 :(得分:0)

我认为没有任何脚本可以“清理”混淆代码。

对于你的朋友来说,那条线与

之类的“相等”
$array["key"] = 'value';

答案 4 :(得分:0)

我会使用PHP de-obfuscators(反向PHP编码处理器)...

搜索“PHP deobfuscator”你可能会发现很多,随着从被黑网站注入的文件中找到这样的内容,这个列表越来越普遍。

这种注射通常是大规模处理的,因此在大多数情况下,专家可能会找到解决方案。