如何将每个文件重写为可读代码?
例如在源代码中有这样的变量:
${"\x47\x4c\x4f\x42\x41\x4cS"}["y\x61\x72\x64s\x70\x71"]="va\x6cu\x65";
如何将其转换为可读代码,例如:
$somevariable = "somevalue";
答案 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";
答案 3 :(得分:0)
我认为没有任何脚本可以“清理”混淆代码。
对于你的朋友来说,那条线与
之类的“相等”$array["key"] = 'value';
答案 4 :(得分:0)
我会使用PHP de-obfuscators(反向PHP编码处理器)...
搜索“PHP deobfuscator”你可能会发现很多,随着从被黑网站注入的文件中找到这样的内容,这个列表越来越普遍。
这种注射通常是大规模处理的,因此在大多数情况下,专家可能会找到解决方案。