2012-03-26 11 views
5

Ich habe es mitten in einer Magento-Installation mit einem sehr unangenehmen Stück Code von Drittanbietern zu tun, und ich habe ein paar Probleme, seinen Threads zu folgen. Hier ist eine Fehlermeldung ich sehe:Wie zählt PHPs eval() Zeilennummern?

PHP Parse error: syntax error, unexpected ']' in /chroot/home/user/example.com/html/dev4/app/code/local/company/PluginName/Model/Module/License/Light/Performer/Reader.php(36) : eval()'d code(18) : eval()'d code(1302) : eval()'d code on line 1

ich den Beginn der eval() Kette in Reader.php identifiziert haben, und es ist auf der Linie 36. So sind die eingeklammerten Zahlen danach auch nur Linie Verweise auf innerhalb große Textblöcke? Ich neige dazu, das zu glauben, aber ich kann das nicht alleine herausfinden. Wenn das der Fall ist, scheint das eval()'d code(1302) besonders schlimm. D:

Ich würde mehr Kontext geben, aber der Lizenzstatus des Codes ist nicht super klar, so alles, was ich geben kann, ist, dass diese Triple-Eval() Kette derzeit Dinge zu brechen, und dass die zweite Schicht es wie so aufgebaut ist:

$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); 

Wenn Sie diesen Block außerhalb von Magento Programmablauf swizzle, enthält $s2 schöne Dinge wie -

if($license->getModule()->getDecode()) { 
    $source = base64_decode($source); 
} 
... 
list($source) = explode("PERFORMER_CLASS_CREATED",$source,2); 
$source .= " */"; 

ob_start(); 
eval($source); 
ob_end_clean(); 

also: wie kann ich diese Kette von eval() auf den Punkt Spuren des Codes, der eigentlich caus ist Probleme?

+1

D: tatsächlich, sehr sehr D :. – deceze

+0

Yeesh, verschleierter Code? Vielleicht sollten Sie den "Lizenzstatus" beheben und den Herausgeber nach einer Lösung fragen. – Hamish

+0

Mit "Lizenzstatus ist nicht klar", meine ich, "wir sind 100% lizenzkonform in unserer Installation, aber ich denke, dass sie ziemlich unglücklich sein würden, ihren Code auf SO zu sehen." Wir verhandeln mit ihnen über die Reparatur unserer Installation, aber ich bezweifle, dass sie ihre Chaotic Evil Software-Architektur reparieren werden. –

Antwort

1

Ein Weg, um dies zu tun, obwohl langweilig, ist, alles zu dekodieren und alles in einer einzigen Datei zusammen zu führen. Zum Beispiel, wo immer Sie eine eval() Funktion sehen, liegt es daran, dass sie ihren Code zur Auswertung entschleiert haben. Kommentieren Sie diese Zeile und legen Sie sie stattdessen auf dem Bildschirm ab, um sie zu kopieren und in eine neue Datei einzufügen (oder Sie können sie direkt in eine Datei schreiben, wenn Sie dies wünschen).

$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); 

Ich weiß, dies Zeit in Anspruch nehmen erhalten werden die Stücke dekodiert und neu geordnet werden funktionell, aber dann der Fehler klar sein.

+0

Das ist ein guter Vorschlag, ja - im Moment sind die Dinge leider so kaputt, dass das nicht funktioniert! Ich werde versuchen, diesen Thread zu ziehen. –

+0

Die Lösung des Problems bestand darin, "den Code den ursprünglichen Entwicklern zurückzugeben, wild auf den Supportvertrag zu drücken und wütende Geräusche zu machen." Diese Antwort war jedoch clever und sagte mir etwas, was ich nicht wusste, also akzeptiere ich es. –