2012-03-26 25 views
5

Estoy lidiando con un trozo muy desagradable de código de terceros en medio de una instalación de Magento, y estoy teniendo un pequeño problema para seguir sus hilos. Aquí hay un mensaje de error que estoy viendo:¿Cómo evalúa PHP() los números de línea?

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

He identificado el inicio de la cadena eval() en Reader.php, y está en la línea 36. Así son esos números entre paréntesis después, también acaba de referencias dentro de la línea a grandes bloques de texto? Me inclino a creerlo, pero no puedo entenderlo por mi cuenta. Si ese es el caso, ese eval()'d code(1302) parece particularmente grave. D:

Daría más contexto, pero el estado de la licencia del código no es muy claro, así que todo lo que puedo dar es que esta cadena triple-eval() está actualmente rompiendo cosas, y que la segunda capa de se construye de esta manera:

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

Cuando SWIZZLE ese bloque fuera del flujo del programa de Magento, $s2 contiene cosas preciosas como -

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

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

así que: ¿cómo puedo rastrear esta cadena de eval() al punto del código que es en realidad causa problemas de ing.

+1

D: de hecho, muy, muy D :. – deceze

+0

Yeesh, código ofuscado? Tal vez debería arreglar el "estado de la licencia" y pedirle al editor una solución. – Hamish

+0

Por "el estado de la licencia no es claro", quiero decir, "somos 100% compatibles con la licencia en nuestra instalación, pero creo que no estarían contentos de ver su código en SO". Estamos negociando con ellos para arreglar nuestra instalación, pero dudo que vayan a arreglar su arquitectura de software Chaotic Evil. –

Respuesta

1

Una forma de hacer esto, aunque tedioso, es decodificar todo y ejecutarlo todo junto en un solo archivo. Por ejemplo, donde sea que vea una función eval(), es porque desactivaron su código para ser evaluado. Comente esa línea y en su lugar, colóquela en la pantalla para copiarla y pegarla en un archivo nuevo (o puede simplemente escribirla directamente en un archivo, si lo prefiere).

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

que se dan cuenta de esto tomará tiempo para obtener las piezas descodifican y se han reorganizado para ser funcional, pero entonces el error será claro.

+0

Esa es una buena sugerencia, sí. Desafortunadamente, por el momento, las cosas se han roto lo suficiente como para que eso no funcione. Sin embargo, intentaré tirar de ese hilo. –

+0

La solución al problema terminó siendo "devolver el código a los desarrolladores originales, gesticular violentamente en el contrato de soporte y hacer ruidos de enojo". Sin embargo, esta respuesta fue inteligente y me dijo algo que no sabía, así que lo acepto. –

Cuestiones relacionadas