[英]Decode obfuscated PHP source code
如何將每個文件重寫為可讀代碼?
例如,在源代碼中有這樣的變量:
${"\x47\x4c\x4f\x42\x41\x4cS"}["y\x61\x72\x64s\x70\x71"]="va\x6cu\x65";
如何將其轉換為可讀代碼,例如:
$somevariable = "somevalue";
那不是UTF8,那只是人們為了使腳本的可讀性差一點而產生的混淆。 您可以將每個字符串轉換為其字符表示形式。 例如, \\x41
表示“ \\x41
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"});
?>
只需將所有出現的\\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);
只需使其打印出簡單的字符串即可,例如:
<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";
我會使用PHP去混淆器(反向PHP編碼處理器)...
在搜索“ PHP deobfuscator”時,您可能會發現很多,隨着從被黑網站注入的文件中找到此類漏洞的列表變得越來越普遍,列表也越來越多。
此類注射劑通常經過批量處理,因此在大多數情況下,專家可以找到解決方案。
我認為沒有任何腳本可以“清除”混淆的代碼。
為了您的方便,該行與“
$array["key"] = 'value';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.