簡體   English   中英

解碼混淆的PHP源代碼

[英]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"});

?>

只需將所有出現的\\xNNchr(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM