2012-03-26 36 views
5

Tôi đang xử lý một đoạn mã khó chịu của mã bên thứ ba ở giữa cài đặt Magento, và tôi đang gặp một chút rắc rối sau các chủ đề của nó. Dưới đây là một thông báo lỗi tôi nhìn thấy:Số dòng đếm eval() của PHP như thế nào?

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

tôi đã xác định sự bắt đầu của chuỗi eval() trong Reader.php, và đó là trên dòng 36. Vì vậy, là những con số ngoặc sau đó, cũng chỉ là dòng tham chiếu đến trong vòng khối văn bản lớn? Tôi có xu hướng tin như vậy, nhưng tôi không thể tự mình hiểu ra điều đó. Nếu đó là trường hợp, rằng eval()'d code(1302) có vẻ đặc biệt nghiêm trọng. D:

Tôi sẽ cung cấp thêm ngữ cảnh, nhưng trạng thái giấy phép của mã không phải là siêu rõ ràng, vì vậy tất cả tôi có thể đưa ra là chuỗi ba-eval() này hiện đang phá vỡ mọi thứ và lớp thứ hai nó được xây dựng như sau:

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

Khi bạn sự gian lận khối bên ngoài của dòng chương trình Magento, $s2 chứa vật đáng yêu như thế nào -

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

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

vì vậy: làm thế nào tôi có thể theo dõi chuỗi này eval() đến điểm của mã thực sự là nguyên nhân ing vấn đề?

+1

D: thực sự, rất rất D :. – deceze

+0

Yeesh, mã obfuscated? Có thể bạn nên sửa "trạng thái giấy phép" và yêu cầu nhà xuất bản sửa chữa. – Hamish

+0

Bởi "trạng thái giấy phép không rõ ràng", ý tôi là, "chúng tôi tuân thủ 100% giấy phép trong bản cài đặt của mình, nhưng tôi nghĩ rằng họ sẽ không vui khi thấy mã của họ trên SO." Chúng tôi đang đàm phán với họ về việc sửa chữa cài đặt của chúng tôi, nhưng tôi nghi ngờ họ sẽ sửa chữa kiến ​​trúc phần mềm Chaotic Evil của họ. –

Trả lời

1

Một cách để làm điều này, mặc dù tẻ nhạt, là giải mã mọi thứ và chạy tất cả cùng nhau trong một tệp duy nhất. Ví dụ: bất cứ nơi nào bạn nhìn thấy hàm eval(), đó là vì chúng đã làm giảm bớt mã của chúng để được đánh giá. Bình luận rằng dòng ra và thay vào đó đổ nó vào màn hình để được sao chép và dán vào một tập tin mới (hoặc bạn chỉ có thể có nó được viết thẳng vào một tập tin nếu bạn thích).

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

Tôi nhận thấy điều này sẽ mất thời gian để các phần được giải mã và sắp xếp lại hoạt động, nhưng lỗi sẽ rõ ràng.

+0

Đó là một gợi ý tốt, vâng - thật không may, hiện tại, mọi thứ đã bị phá vỡ đủ để có thể không hoạt động! Tôi sẽ thử kéo sợi chỉ đó. –

+0

Giải pháp cho vấn đề đã kết thúc là "đá lại mã cho các nhà phát triển ban đầu, cử chỉ dữ dội trong hợp đồng hỗ trợ và gây ra những tiếng động giận dữ." Tuy nhiên, câu trả lời này là thông minh và nói với tôi điều gì đó tôi không biết, vì vậy tôi chấp nhận nó. –

Các vấn đề liên quan