2012-03-26 18 views
5

मैं Magento इंस्टॉल के बीच में तीसरे पक्ष के कोड का गहराई से हिस्सा से निपट रहा हूं, और मुझे इसके धागे के बाद थोड़ा परेशानी हो रही है। यहाँ मैं दिखाई दे रही है एक त्रुटि संदेश है:PHP की eval() लाइन संख्याओं की गणना कैसे करता है?

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

मैं Reader.php में eval() श्रृंखला की शुरुआत की पहचान की है, और यह लाइन 36 पर है इसलिए उन parenthesized संख्या बाद में अंदर करने के लिए भी बस लाइन संदर्भ हैं, पाठ के बड़े ब्लॉक? मैं इस पर विश्वास करने के इच्छुक हूं, लेकिन मैं खुद को समझ नहीं सकता हूं। यदि ऐसा है, तो eval()'d code(1302) विशेष रूप से सख्त लगता है। डी:

मैं अधिक संदर्भ दूंगा, लेकिन कोड की लाइसेंस स्थिति सुपर स्पष्ट नहीं है, इसलिए मैं यह दे सकता हूं कि यह ट्रिपल-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() की इस श्रृंखला का पता लगा सकते वास्तव में कारण कोड है आईएनजी मुद्दे?

+1

डी: वास्तव में, बहुत बहुत डी:। – deceze

+0

येश, obfuscated कोड? शायद आपको "लाइसेंस स्थिति" तय करनी चाहिए और प्रकाशक को एक फिक्स के लिए पूछना चाहिए। – Hamish

+0

"लाइसेंस स्थिति स्पष्ट नहीं है," मेरा मतलब है, "हम अपने इंस्टॉल में 100% लाइसेंस-अनुरूप हैं, लेकिन मुझे लगता है कि वे SO पर अपने कोड को देखने के लिए काफी नाखुश होंगे।" हम उनकी स्थापना को ठीक करने के बारे में उनके साथ बातचीत कर रहे हैं, लेकिन मुझे संदेह है कि वे अपने Chaotic Evil सॉफ़्टवेयर आर्किटेक्चर को ठीक करने जा रहे हैं। –

उत्तर

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

मुझे पता है इस टुकड़े डीकोड और कार्यक्षम होने के पुन: व्यवस्थित प्राप्त करने के लिए समय लगेगा, लेकिन फिर त्रुटि स्पष्ट हो जाएगा।

+0

यह एक अच्छा सुझाव है, हाँ - दुर्भाग्य से, इस समय, चीजें इतनी टूटी हुई हैं कि यह काम न करे! मैं उस थ्रेड पर खींचने की कोशिश करूंगा, हालांकि। –

+0

समस्या का समाधान "मूल डेवलपर्स को वापस कोड लाएं, समर्थन अनुबंध पर जबरदस्त इशारा करते हुए, और क्रोधित शोर बनाते हैं।" हालांकि, यह जवाब चालाक था और मुझे कुछ ऐसा बताया जो मुझे नहीं पता था, इसलिए मैं इसे स्वीकार कर रहा हूं। –

संबंधित मुद्दे