我在Magento安装过程中处理了一大堆非常讨厌的第三方代码,我在跟踪它的线程时遇到了一些麻烦。这是我看到的错误消息:
PHP解析错误:语法错误,意外']'在/chroot/home/user/example.com/html/dev4/app/code/local/company/PluginName/Model/Module/License/Light/Performer/ Reader.php(36):eval()'代码(18):eval()'代码(1302):第1行的eval()代码
我已经在Reader.php
中确定了eval()链的开头,并且它在第36行。那么之后是带括号的数字,还只是对大块文本中的行引用?我倾向于这么认为,但我不能完全理解这一点。如果是这种情况,eval()'d code(1302)
似乎特别可怕。 d:
我会给出更多的上下文,但是代码的许可状态并不是非常清楚,所以我能给出的是这个三重eval()链目前正在破坏它,并且它的第二层被构造像这样:
$s = "$BLOCK_OF_SCRAMBLED_TEXT"
$s2 = '';
for ($i=0;($i+0xB-1)<strlen($s);$i+=11) {
for ($k = 013-1 ; $k > -1 ; --$k) {
$s2 .= $s[$i+$k];
}
}
eval($s2);
当您在Magento的程序流程之外调整该块时,$s2
包含可爱的内容,例如 -
if($license->getModule()->getDecode()) {
$source = base64_decode($source);
}
...
list($source) = explode("PERFORMER_CLASS_CREATED",$source,2);
$source .= " */";
ob_start();
eval($source);
ob_end_clean();
那么:我如何追踪eval()
这个链到实际导致问题的代码点?
答案 0 :(得分:1)
这样做的一种方法,虽然单调乏味,但是解码所有内容并在一个文件中一起运行。例如,无论您在哪里看到eval()
函数,都是因为它们对要评估的代码进行了去混淆。注释掉线,然后将其转储到屏幕上进行复制并粘贴到新文件中(或者如果您愿意,可以将其直接写入文件)。
$s = "BLOCK_OF_SCRAMBLED_CODE";
$s2 = '';
// Decode scrambled PHP
for ($i=0;($i+0xB-1)<strlen($s);$i+=11) {
for ($k = 013-1 ; $k > -1 ; --$k) {
$s2 .= $s[$i+$k];
}
}
// Don't evaluate, instead output it via your preferred method and copy/paste
// into a new file...
// eval($s2);
var_dump($s2);
我意识到这需要花费时间来解码并重新排列才能正常运行,但错误将会很明显。