2012-03-26 17 views
5

Ho a che fare con un pezzo di codice di terze parti profondamente malvagio nel bel mezzo di un'installazione di Magento, e sto avendo un piccolo problema a seguire i suoi thread. Ecco un messaggio di errore che sto vedendo:In che modo PHP eval() conta i numeri di riga?

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

ho identificato l'inizio della catena eval() in Reader.php, ed è on line 36. Quindi sono quei numeri tra parentesi dopo, anche solo riferimenti di linea entro grandi blocchi di testo? Sono incline a crederlo, ma non riesco a capirlo da solo. Se questo è il caso, quello eval()'d code(1302) sembra particolarmente terribile. D:

Vorrei dare più contesto, ma lo stato della licenza del codice non è molto chiaro, quindi tutto quello che posso dare è che questa catena triple-eval() sta attualmente rompendo le cose, e che il secondo strato di è costruito in questo modo:

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

Quando si SWIZZLE quel blocco al di fuori del flusso del programma di Magento, $s2 contiene cose belle come -

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

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

quindi: come posso tracciare questa catena di eval() al punto del codice che è in realtà causa problemi?

+1

D: anzi, molto molto D :. – deceze

+0

Yeesh, codice offuscato? Forse dovresti correggere lo "stato della licenza" e chiedere una soluzione all'editore. – Hamish

+0

Per "stato della licenza non è chiaro", intendo, "siamo al 100% conformi alla licenza nella nostra installazione, ma penso che sarebbe abbastanza scontato vedere il proprio codice su SO". Stiamo negoziando con loro per correggere la nostra installazione, ma dubito che risolveranno la loro architettura del software Chaotic Evil. –

risposta

1

Un modo per farlo, seppur noioso, è decodificare tutto ed eseguirlo tutto insieme in un unico file. Ad esempio, ovunque vedi una funzione eval(), è perché hanno de-offuscato il loro codice per essere valutato. Commenta l'allineamento e scaricalo invece sullo schermo per essere copiato e incollato in un nuovo file (oppure puoi semplicemente farlo scrivere direttamente su un file se preferisci).

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

Mi rendo conto che ci vorrà del tempo per ottenere i pezzi decodificati e riorganizzati per essere funzionale, ma poi l'errore sarà chiaro.

+0

Questo è un buon suggerimento, sì - purtroppo, al momento, le cose sono rotte abbastanza da non funzionare! Proverò a tirare su quel filo, però. –

+0

La soluzione al problema è stata "restituire il codice agli sviluppatori originali, fare gesti selvaggi al contratto di assistenza e emettere rumori rabbiosi". Tuttavia, questa risposta è stata intelligente e mi ha detto qualcosa che non sapevo, quindi lo accetto. –

Problemi correlati