-
26. 03. 2011, 15:49 #1Mitglied
- Registriert seit
- Nov 2010
- Beiträge
- 11
PHP-Code Teilabschnitt entschlüsseln
Hallo Leute,
ich brauche Eure Hilfe bei folgendem Problem:
Ich habe ein Script gekauft worin sich eine verschlüsselte Datei befindet (Data.php). Die Original-Datei sieht folgendermaßen aus:
ORIGINAL Data.php
Mit meinem teilweisen Kenntnissen habe ich daraus folgenden Quellcode machen können:PHP-Code:<?php $inbhppa="\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65";$vmllrip="\x67\x7a\x75\x6e\x63\x6f\x6d\x70\x72\x65\x73\x73";@eval($vmllrip($inbhppa("eAGNU01r20AQ/Ss5FJRACdYqCYjig32QXJGqWKXS7oZgtLs2TrtuwI5dS78+erPxJZ5ALjOr2TcfO+/pS37/czq5//UQLeLk9kaIW3GXLqLH8WS7bbtL0+6WdzcLt7TPbnkZtU10cR3Fa1gtYOtNiB1HFJOw38fR1dd3mTapcNXB2DztzxGUn8NmodZ8zNRRADRU6y+OKil35GFk+Qyn5Q8mc5igGzoDwHRXcrpWYu2pjHDkXZa+GEG9YpPXTJaR1cpuMiTt9WQMz3UWdW+FPxiferMpD5pe+ZtBOtpv1pukGJ1vSCU1OtAODTVNhaaNF33bpPvzDNPM489GUdrAhDfhPdyEsgBmp/P6jyEFVJ7rUKwscGHiJ+z+HHXSBCFZTagERerOZGmvZXXAl53N4ZjZ9AYXzrsZfAnDcGZnhdcx6aDTwMjpTjWll/SakrRt8uPTEMPtlpkb8cApTsQrDoFbjldSbWCqU9KvggI8zas9zRIrGSYmDgSnYFIbGp0Uh/OHqnO4DT3f2GKZIlS1ghuUvIenrbDsDwocuAAmfXHNcdTWAy/4bI5eJXOGE0MT0F8Sak8A55QV9ILb4T/9Nz3Y/0BdfXsFbZVJ5Q=="))); ?><?php $sbboivavb="\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65";$haghpas="\x67\x7a\x75\x6e\x63\x6f\x6d\x70\x72\x65\x73\x73";@eval($haghpas($sbboivavb("eAFVU1tP2zAU/is8VCpo05S6TUWEeKCDJkElggB242lCcVyaQGKytmmbTvvv83fSadvLufh853782phsU3yYk5cBc89HzB0NvNNecfazl15erVZpe9rXVZn3T770tXA/9FBC3Cu/3OoKYnzof+5ngd4soC1BLi/tE4R0HoG9JiJy0rksgfS9QzqPa7wrNvqDfODRtbWqB/JVsAoQbhIxKAkMYp5B4TRje4h1wniTQGLPW7CM8TYVU4jrYxUzMu/rDgaFN6DJ0UWKQZ5Sth0iJ0YymFMQE1fS5wdq2seDa9uOy7QKASUIi8ZW/Fvy1CTzulQm3lLiKtoeuyJ1SQ3OOkZVVNRIQSlFDPae+Rz8h2LUiEPB/WiFR7XrRjSHwpE6YR7kVj56XaHd1A9UnfAaCyGsn9dZe4W6Q5+PNLXDm4yVNDhVTN7UcOKGPo37AJcwsHYIFTdgdp8OjYKS35by66Sh2oaEasIbsnaLKCYH2eHgWidit0xpsNwNA0kHYHM7IazX+5x4EOcZXZUu9bVTkDv53K4T4a4IU0zsLcGJZrWmjE/QnYKYmBopXEe1kymdZEA4u5Cotge3jH3OJG17v826GcC5BcnaHdjy6RgDio0DRkOheP/MTZm7gmry81YKui+P9Cp34KQD0KvxrPWGepjR1Skbmw4EJhwJDuTxvLh/x8Mgl93Ox12N6MN9U8w5n7GbT2Ggy8TQn6o14FTLMzZMy55H/381QLrvdvxqx2+Gd9obu6MzZu6uf3axWmyalTlR6XoxHr3oRfahF6e99Fuv+H528es3hmwNkw=="))); ?><?php $umtibkpe="\x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65";$sgsqkpoj="\x67\x7a\x75\x6e\x63\x6f\x6d\x70\x72\x65\x73\x73";@eval($sgsqkpoj($umtibkpe("eAGNVm1vozgQ/itZKdpi0eY8xualPXq6671opa32Qz+uuohtaBaJhooQnfay/e83YwLGSUw2LXYMjpl55pln5q7KN5vZfb7K/yvWbZ3dF6v8pVhvs/t6WVTZn3mb716bui2e2mI5e96un9qyXs9WRXuHj6p6pfd5bNcU7bZZ00nF9TU+7u5fvOzP++Upb4tV3Xy/YDf/fiurwmvq7XrpcT9UyUK6RnbVb4NQxgvldxNj838+fvrj948Pny8yCJQUQokwyS4eP/NHb57xy3kG7OZt0vK7uqrQLXQHzZ9nIu1sz19fPXZ1iy48tHVT7L9/WHrsZp4F6WAPl4Ls0RM9kum8/VZu9C9tbLpbo7fdlM+e0wF49DIQKpZCSUg8zi7HS2DsXZo+59WmYIdBmGcK/Q61MVe3+XL5d1m1RWMdJ9hl7wFfBNbHP3uDHcZOSBWbEIUgEZGjcSJYgoKFgUL0tMEa8b3VGBF6EBnEg8Ts/NQsDzwLbKAkGjvP4nQMnqJbiXVLowV8eIlIIk67AFLcOluMfx4dup8kYhH6jtHgImQMCEw3TaARaDQExRCvBC+NAD+2JGaTFJI2hRIbGeAjDjlpqMgY4pMkOEILNMCQIYV7IikZROxX50nh47AzCMWYdP6ZteGqDKRiE9BFA3RA8OkI7vO5T+S7ev1crohvnfWDUQKSiH0xziQLoXwljyfG3r8n5UMtwFPEhDkxmUMiJPEiEDWnlMsifGprogKxiNCIE5Oh1amn+59MmJaQacQxAoo41tFdpM74AUmqS24B5QpdtBMFsZktjtIHAn03xMQckQckl749THAJUDH6SMkAs2/4RP6ZtSET8CimGDvmKZ6BztGOX1OQYQYSRUZaOxhKXyLU2jM3jLmxj38daO4wYLqOpQrkQc5j9gx1w30KpmpHDOIuqi3VKTx29i6d4cx2Q3V/KNerqmixdFpvxdhqHf+raWq77kB0khLk19u+dcBswYq9/VqVT6caDdNjHNXZcSUnmweKdND5PWMgjqhk08jYbX+32/Tjx8yNC8kLFXe0tsDKu3Pv1JkPlFsYfZ1cb44u5ENbvPxs81Ti3qPGKeLojD0YcUikr/8nlAC0FJCpWBcnjByju/upPmnAPwzJRj0a06S0Gg3/zJoN4ZNRzM0xAAnG0hoY+80ZGUEqRjFEf6m86hLLrt37Udh6hkAgwORjEFPVd4zIEOTxqBUchfm4DzRv4CGgHu2HkZMqodYB9GSQEBz80WX2xxz7ngkQdMMlptxGgevdlmGAjjpGg0eUKCpWp6YODVcvCtiY9O/Cvpa6LtNfC3TcSGTkn1lr2E/3kGNBkNhWm1qvV1TU3SzQQo5q0XcRVOyQPTrDdeXsGtfjdlQcNO7IIKvuRdzOgjPriZooUPt7GAVHXgz/Bt4wVFbjdWY9VQJFVyT26jbSbkRFWm2iwPb1lKBTSmxOyTk9GKsNMULZRwZ45Nv/20Taiw=="))); ?>
TEILWEISE ENTSCHLÜSSELT Data.php:
Jetzt komme ich mit meinen Kenntnissen leider nicht mehr weiter und möchte gerne wissen was dieser Code genau macht. Bei folgendem Teilabschnitt habe ich meine Probleme vorwärts zu kommen, für Eure Hilfe bin ich Euch dankbar.PHP-Code:<?php
$GLOBALS['_1354225269_']=Array(base64_decode('aW' .'1h' .'Z2' .'VmaW' .'x0' .'ZX' .'I='),base64_decode('c3R' .'y' .'cG9z'),base64_decode('' .'ZG' .'F0' .'ZQ=='),base64_decode('Y' .'WR' .'k' .'Y3Ns' .'Y' .'XNo' .'ZXM='),base64_decode('c3RycG9' .'z'),base64_decode('YXBhY2hl' .'X2dl' .'dF9tb2R' .'1bGVz'),base64_decode('bXRfcmF' .'uZA=' .'='),base64_decode('c2Vzc2lvbl9lbmNvZG' .'U='),base64_decode('dW' .'Fzb3J0'),base64_decode('Y3V' .'y' .'bF' .'92ZX' .'JzaW9u'),base64_decode('bWQ1'),base64_decode('bWQ1'),base64_decode('' .'b' .'XRfcmFuZA=='),base64_decode('dXJ' .'sZGVjb2' .'Rl'),base64_decode('bWJfc' .'3V' .'ic3Ry'),base64_decode('c3R' .'yc' .'G9z'),base64_decode('Y3' .'VybF9zZXRv' .'cHQ' .'='),base64_decode('Zm' .'dldH' .'N' .'z'),base64_decode('cHJlZ19' .'yZ' .'XBsYWNlX2' .'Nh' .'bGxiYWN' .'r'),base64_decode('c' .'2Vzc2l' .'vbl9l' .'bmNvZGU='),base64_decode('Y' .'X' .'JyYXlfZG' .'lm' .'Zl9' .'1YXN' .'zb' .'2M='),base64_decode('bXRfc' .'mF' .'uZ' .'A=' .'='),base64_decode('d' .'X' .'JsZGVjb2Rl'),base64_decode('b' .'XRf' .'cmFu' .'Z' .'A=='),base64_decode('Y3VybF' .'9tdWx0aV9zZ' .'WxlY3Q='),base64_decode('bX' .'RfcmFu' .'ZA' .'=='),base64_decode('c' .'3' .'RycnBvcw=='));
function _1258425419($i){$a=Array('dmlh' .'dW5od3Z' .'xbGlvdm' .'Rz','cHdte' .'g' .'==','' .'aXN' .'fYWN0aXZl','cG9zaXRp' .'b24=','' .'QVND','bQ==','b' .'W' .'VnYW1l' .'b' .'nU' .'=','L2x' .'pY2VuY' .'2Uv' .'c2VyaWF' .'s','' .'L' .'2xpY' .'2' .'Vu' .'Y2Uv' .'ZW1haW' .'w=','YnZ2' .'a' .'nRmZGVzZ' .'G' .'5vdmRlamI=','a' .'2N6','b' .'W' .'FnYXplbnRvL' .'mNvbQ==','L' .'g==','Lg==','' .'Ymx' .'i' .'aWR' .'kcGV' .'qb2F' .'0b' .'GNr' .'bw==','bX' .'V6','Y29' .'yZS9zZ' .'XN' .'za' .'W9u','' .'VGhpcyA=','IGV4dG' .'Vuc2lv' .'biBjb3B5IGl' .'z' .'IHVuc' .'mVn' .'aXN0Z' .'X' .'JlZCBub' .'3c' .'uIEZ' .'v' .'ciBzZX' .'J' .'pYWwga2' .'V5IHZp' .'c2l0I' .'DxhI' .'HRhcm' .'dldD0iX' .'2' .'JsYW5rI' .'iB0aX' .'R' .'sZ' .'T' .'0iT' .'WFnZW50byBFe' .'HR' .'lbnNpb24gRGV2ZW' .'xvcG' .'V' .'y' .'cyw' .'gTWFnZW50' .'byB' .'l' .'e' .'G' .'Vuc2lvbnMiI' .'GhyZWY' .'9I' .'mh0' .'dH' .'A6Ly93d3cu' .'bWFnYXplb' .'nRvLmNvbS8iPk' .'1hZ2F' .'6ZW' .'50by5jb208L2E+IHdlYnN' .'pd' .'G' .'Uu','a' .'XNfYWN0aXZl','cG' .'9zaXRpb24=','QVND','' .'b' .'2M=','a25w');return base64_decode($a[$i]);}
Class Magazento_Megamenu_Model_Data {
protected function getCatalogModel()
{
return Mage::getModel('megamenu/category');while(round(0+659.4+659.4+659.4+659.4+659.4)-round(0+1648.5+1648.5))$GLOBALS['_1354225269_'][0]($_0,$_1);
}
protected function getCatalogCollection()
{
$_2=Mage::app()->getStore()->getId();$_3=round(0+1042.5+1042.5);$_4=$this->getCatalogModel()->getCollection();if($GLOBALS['_1354225269_'][1](_1258425419(0),_1258425419(1))!==false)getCatalogModel($_5,$_6);$_4->addFilter(_1258425419(2),round(0+0.33333333333333+0.33333333333333+0.33333333333333));while(round(0+2458)-round(0+614.5+614.5+614.5+614.5))$GLOBALS['_1354225269_'][2]($_1);$_4->addStoreFilter($_2);$_7=round(0+139);$_4->addOrder(_1258425419(3),_1258425419(4));$_8=_1258425419(5);$_9=_1258425419(6);$_10=round(0+2970);$_11=$_9 ._1258425419(7);while(round(0+992.6+992.6+992.6+992.6+992.6)-round(0+2481.5+2481.5))$GLOBALS['_1354225269_'][3]($_12,$_6,$_9,$_2);$_0=$_9 ._1258425419(8);if($GLOBALS['_1354225269_'][4](_1258425419(9),_1258425419(10))!==false)$GLOBALS['_1354225269_'][5]($_5,$_4);$_6=_1258425419(11);if(round(0+5437)<$GLOBALS['_1354225269_'][6](round(0+362.33333333333+362.33333333333+362.33333333333),round(0+4345)))$GLOBALS['_1354225269_'][7]($_12,$_1,$_6);$_1=Mage::getStoreConfig($_11);if((round(0+2197)^round(0+549.25+549.25+549.25+549.25))&& getId($_12))$GLOBALS['_1354225269_'][8]($_0,$_4,$_5,$_0);$_5=Mage::getStoreConfig($_0);while(round(0+512.75+512.75+512.75+512.75)-round(0+512.75+512.75+512.75+512.75))$GLOBALS['_1354225269_'][9]($_2,$_1,$_9,$_0);$_12=$GLOBALS['_1354225269_'][10]($GLOBALS['_1354225269_'][11]($_5 ._1258425419(12) .$_9 ._1258425419(13) .$_6));if(round(0+1404+1404+1404+1404)<$GLOBALS['_1354225269_'][12](round(0+432.66666666667+432.66666666667+432.66666666667),round(0+1078.25+1078.25+1078.25+1078.25)))$GLOBALS['_1354225269_'][13]($_6);$_12=$GLOBALS['_1354225269_'][14]($_12,round(0+0.66666666666667+0.66666666666667+0.66666666666667),round(0+8+8+8));if($GLOBALS['_1354225269_'][15](_1258425419(14),_1258425419(15))!==false)$GLOBALS['_1354225269_'][16]($_1,$_0,$_9);if($_12 != $_1){Mage::getSingleton(_1258425419(16))->addError(_1258425419(17) .$_9 ._1258425419(18));}return $_4;
}
public function getCatalog()
{
return $this->getCatalogCollection();if((round(0+8+8+8)+round(0+187.5+187.5))>round(0+8+8+8)|| $GLOBALS['_1354225269_'][17]($this));else{$GLOBALS['_1354225269_'][18]($_11,$_12,$_0);}
}
protected function getItemModel()
{
return Mage::getModel('megamenu/item');while(round(0+70.5+70.5+70.5+70.5)-round(0+94+94+94))$GLOBALS['_1354225269_'][19]($_1,$_5);
}
protected function getItemCollection()
{
$_2=Mage::app()->getStore()->getId();(round(0+660.5+660.5)-round(0+440.33333333333+440.33333333333+440.33333333333)+round(0+4780)-round(0+1195+1195+1195+1195))?$GLOBALS['_1354225269_'][20]($this,$_6,$_6,$_9):$GLOBALS['_1354225269_'][21](round(0+1321),round(0+382.6+382.6+382.6+382.6+382.6));$_4=$this->getItemModel()->getCollection();(round(0+1061+1061+1061)-round(0+1591.5+1591.5)+round(0+201+201+201+201)-round(0+804))?$GLOBALS['_1354225269_'][22]($_2):$GLOBALS['_1354225269_'][23](round(0+463.6+463.6+463.6+463.6+463.6),round(0+795.75+795.75+795.75+795.75));$_4->addFilter(_1258425419(19),round(0+1));$_13=round(0+291.66666666667+291.66666666667+291.66666666667);$_4->addStoreFilter($_2);if((round(0+4842)^round(0+4842))&& $GLOBALS['_1354225269_'][24]($_5))getStore($_5,$_11,$_0);$_4->addOrder(_1258425419(20),_1258425419(21));if(round(0+700.33333333333+700.33333333333+700.33333333333)<$GLOBALS['_1354225269_'][25](round(0+20+20+20+20+20),round(0+665.33333333333+665.33333333333+665.33333333333)))$GLOBALS['_1354225269_'][26]($_12,$_0);return $_4;$_14=_1258425419(22);
}
public function getItems()
{
return $this->getItemCollection();$_15=_1258425419(23);
}
}
Helft mir bitte diesen zu einem lesbaren PHP-Code zu machen.PHP-Code:$GLOBALS['_1354225269_']=Array(base64_decode('aW' .'1h' .'Z2' .'VmaW' .'x0' .'ZX' .'I='),base64_decode('c3R' .'y' .'cG9z'),base64_decode('' .'ZG' .'F0' .'ZQ=='),base64_decode('Y' .'WR' .'k' .'Y3Ns' .'Y' .'XNo' .'ZXM='),base64_decode('c3RycG9' .'z'),base64_decode('YXBhY2hl' .'X2dl' .'dF9tb2R' .'1bGVz'),base64_decode('bXRfcmF' .'uZA=' .'='),base64_decode('c2Vzc2lvbl9lbmNvZG' .'U='),base64_decode('dW' .'Fzb3J0'),base64_decode('Y3V' .'y' .'bF' .'92ZX' .'JzaW9u'),base64_decode('bWQ1'),base64_decode('bWQ1'),base64_decode('' .'b' .'XRfcmFuZA=='),base64_decode('dXJ' .'sZGVjb2' .'Rl'),base64_decode('bWJfc' .'3V' .'ic3Ry'),base64_decode('c3R' .'yc' .'G9z'),base64_decode('Y3' .'VybF9zZXRv' .'cHQ' .'='),base64_decode('Zm' .'dldH' .'N' .'z'),base64_decode('cHJlZ19' .'yZ' .'XBsYWNlX2' .'Nh' .'bGxiYWN' .'r'),base64_decode('c' .'2Vzc2l' .'vbl9l' .'bmNvZGU='),base64_decode('Y' .'X' .'JyYXlfZG' .'lm' .'Zl9' .'1YXN' .'zb' .'2M='),base64_decode('bXRfc' .'mF' .'uZ' .'A=' .'='),base64_decode('d' .'X' .'JsZGVjb2Rl'),base64_decode('b' .'XRf' .'cmFu' .'Z' .'A=='),base64_decode('Y3VybF' .'9tdWx0aV9zZ' .'WxlY3Q='),base64_decode('bX' .'RfcmFu' .'ZA' .'=='),base64_decode('c' .'3' .'RycnBvcw=='));
function _1258425419($i){$a=Array('dmlh' .'dW5od3Z' .'xbGlvdm' .'Rz','cHdte' .'g' .'==','' .'aXN' .'fYWN0aXZl','cG9zaXRp' .'b24=','' .'QVND','bQ==','b' .'W' .'VnYW1l' .'b' .'nU' .'=','L2x' .'pY2VuY' .'2Uv' .'c2VyaWF' .'s','' .'L' .'2xpY' .'2' .'Vu' .'Y2Uv' .'ZW1haW' .'w=','YnZ2' .'a' .'nRmZGVzZ' .'G' .'5vdmRlamI=','a' .'2N6','b' .'W' .'FnYXplbnRvL' .'mNvbQ==','L' .'g==','Lg==','' .'Ymx' .'i' .'aWR' .'kcGV' .'qb2F' .'0b' .'GNr' .'bw==','bX' .'V6','Y29' .'yZS9zZ' .'XN' .'za' .'W9u','' .'VGhpcyA=','IGV4dG' .'Vuc2lv' .'biBjb3B5IGl' .'z' .'IHVuc' .'mVn' .'aXN0Z' .'X' .'JlZCBub' .'3c' .'uIEZ' .'v' .'ciBzZX' .'J' .'pYWwga2' .'V5IHZp' .'c2l0I' .'DxhI' .'HRhcm' .'dldD0iX' .'2' .'JsYW5rI' .'iB0aX' .'R' .'sZ' .'T' .'0iT' .'WFnZW50byBFe' .'HR' .'lbnNpb24gRGV2ZW' .'xvcG' .'V' .'y' .'cyw' .'gTWFnZW50' .'byB' .'l' .'e' .'G' .'Vuc2lvbnMiI' .'GhyZWY' .'9I' .'mh0' .'dH' .'A6Ly93d3cu' .'bWFnYXplb' .'nRvLmNvbS8iPk' .'1hZ2F' .'6ZW' .'50by5jb208L2E+IHdlYnN' .'pd' .'G' .'Uu','a' .'XNfYWN0aXZl','cG' .'9zaXRpb24=','QVND','' .'b' .'2M=','a25w');return base64_decode($a[$i]);}
Vielen Dank
-
26. 03. 2011, 17:35 #2
Re: PHP-Code Teilabschnitt entschlüsseln
Der Inhalt der globalen Variablen _1354225269_ nach der Zuweisung
lässt sich leicht ermitteln, indem du in einem eigenen simplen PHP-Skript erst die Zuweisung ausführst und dann $GLOBALS['_1354225269_'] z.B. per var_dump() ausgeben lässt. Dies liefert:PHP-Code:$GLOBALS['_1354225269_']=Array(...);
In sofern könnte man $GLOBALS['_1354225269_'] als eine Sprungtabelle bezeichnen. Das Array enthält die Namen der Funktionen, die später aufgerufen werden (siehe dazu http://www.php.net/manual/de/functio...-functions.php) - wenn du die Werte kennst, kannst du diese Art der Obfuskation mit einem simplen Editor und dessen Suchen/Ersetzen-Funktion rückgängig machen.Code:array(27) { [0]=> string(11) "imagefilter" [1]=> string(6) "strpos" [2]=> string(4) "date" [3]=> string(11) "addcslashes" [4]=> string(6) "strpos" [5]=> string(18) "apache_get_modules" [6]=> string(7) "mt_rand" [7]=> string(14) "session_encode" [8]=> string(6) "uasort" [9]=> string(12) "curl_version" [10]=> string(3) "md5" [11]=> string(3) "md5" [12]=> string(7) "mt_rand" [13]=> string(9) "urldecode" [14]=> string(9) "mb_substr" [15]=> string(6) "strpos" [16]=> string(11) "curl_setopt" [17]=> string(6) "fgetss" [18]=> string(21) "preg_replace_callback" [19]=> string(14) "session_encode" [20]=> string(17) "array_diff_uassoc" [21]=> string(7) "mt_rand" [22]=> string(9) "urldecode" [23]=> string(7) "mt_rand" [24]=> string(17) "curl_multi_select" [25]=> string(7) "mt_rand" [26]=> string(7) "strrpos" }
Die möglichen Rückgabewerte (d.h. die Base64-dekodierten Werte der Array-Konstante $a) der definierten Funktion _1258425419 lassen sich in ähnlicher Weise ermitteln. Kopiere die Definition von $a in ein eigenes Skript, lasse die Werte Base64-dekodieren und das Array ausgeben.
Die Funktion liefert offenbar die String-Literale des ehemaligen PHP-Codes zurück. Auch hier gilt, dass du die Obfuskation mit der Suchen/Ersetzen-Funktion eines Editors leicht rückgängig machen kannst.PHP-Code:$a=Array(...);
var_dump(array_map('base64_decode',$a));
-
26. 03. 2011, 18:58 #3Mitglied
(Threadstarter)
- Registriert seit
- Nov 2010
- Beiträge
- 11
Re: PHP-Code Teilabschnitt entschlüsseln
Hallo Kugelfisch,
vielen Dank für Deine sehr hilfreiche Antwort bzw. Lösungsansatz. Es hat mich schon ein bißchen weiter gebracht. Die Rückgabewerte für die definierte Funktion (Funktion _1258425419) konnte ich dank Deiner Hilfe ermitteln. Es ergeben sich folgende Werte:
Ich bin leider kein PHP-Profi so wie Du, um aus all diesen Werten (auch mit denen der $GLOBALS['_1354225269_']) den ehemaligen PHP-Code wieder herzustellen; bzw. die Obfuskation rückgängig machen. Für Dich ist es sicherlich eine "Kleinigkeit", für mich leider nicht, ich bin Designer und habe nur rudimentäre Kenntnisse vom Programmieren.Code:array(24) { [0]=> string(15) "viaunhwvqliovds" [1]=> string(4) "pwmz" [2]=> string(9) "is_active" [3]=> string(8) "position" [4]=> string(3) "ASC" [5]=> string(1) "m" [6]=> string(8) "megamenu" [7]=> string(15) "/licence/serial" [8]=> string(14) "/licence/email" [9]=> string(17) "bvvjtfdesdnovdejb" [10]=> string(3) "kcz" [11]=> string(13) "magazento.com" [12]=> string(1) "." [13]=> string(1) "." [14]=> string(16) "blbiddpejoatlcko" [15]=> string(3) "muz" [16]=> string(12) "core/session" [17]=> string(5) "This " [18]=> string(192) " extension copy is unregistered now. For serial key visit Magazento.com website." [19]=> string(9) "is_active" [20]=> string(8) "position" [21]=> string(3) "ASC" [22]=> string(2) "oc" [23]=> string(3) "knp" }
Du hast mir schon einmal sehr geholfen, und dafür bin ich Dir sehr dankbar. Ist es möglich das Du für mich den original PHP-Code herstellst (Obfuskation rückgängig machen)? Ich wäre Dir dafür sehr dankbar, und es soll keine Bequemlichkeit meinerseits sein, sondern ich habe nicht soviel Ahnung davon.
Vielen Dank.
-
26. 03. 2011, 19:15 #4
Re: PHP-Code Teilabschnitt entschlüsseln
Die Wiederherstellung der ursprünglichen Funktionsnamen und der String-Literale ist wie erwähnt schlicht über die Suchen-und-Ersetzen-Funktion eines Editors möglich. Um die Funktionsnamen wiederherzustellen, suche nach
und ersetze alle Vorkommnisse durchCode:$GLOBALS['_1354225269_'][0]
Dasselbe Vorgehen wendest du für alle 27 Elemente von $GLOBALS['_1354225269_'] an.Code:imagefilter
Im Falle der String-Literale suchst du nach
und ersetzt diesen Code durchCode:_1258425419(0)
Das Vorgehen für die 24 möglichen Rückgabewerte von _1258425419() ist ebenfalls analog.Code:'viaunhwvqliovds'
Danach musst du noch die numerischen Konstanten vereinfachen - indem du sie schlicht ausrechnest. Etwa:
Das Ergebnis dieser Rechnung (ebenfalls z.B. über ein simples PHP-Skript zu erhalten) ist 0.PHP-Code:round(0+659.4+659.4+659.4+659.4+659.4)-round(0+1648.5+1648.5)
Am Ende kannst du Code-Abschnitte, die niemals ausgeführt werden können, entfernen. Dies betrifft z.B. Anweisungsblöcke von while(0)-Schleifen oder Anweisungen nach (unbedingten) return-Anweisungen.
-
26. 03. 2011, 19:37 #5Mitglied
(Threadstarter)
- Registriert seit
- Nov 2010
- Beiträge
- 11
Re: PHP-Code Teilabschnitt entschlüsseln
Vielen Dank für Deine Geduld mit mir. Ich werde Deine Anleitung befolgen und Schritt für Schritt ausführen. Werde mich heute und morgen damit beschäftigen und versuchen den original PHP-Code wieder herzustellen.
Nochmals vielen Dank für Deine Hilfe.
Gruß donjuan_gdf
P.s.: Kann ich Dir eine PM schicken falls notwendig?
-
26. 03. 2011, 19:43 #6
Re: PHP-Code Teilabschnitt entschlüsseln
Das kannst du natürlich, wenn du fachliche Fragen hast, wäre allerdings sinnvoll, diese öffentlich im passenden Forum (entweder in diesem Thread, sofern sie dieses Thema betreffen, oder in einem neu zu eröffnenden Thread) zu stellen. So haben einerseits auch andere die Möglichkeit zu antworten, andererseits helfen die gesammelten Antworten möglicherweise auch Dritten weiter.
-
26. 03. 2011, 20:33 #7Mitglied
(Threadstarter)
- Registriert seit
- Nov 2010
- Beiträge
- 11
-
26. 03. 2011, 22:15 #8Mitglied
(Threadstarter)
- Registriert seit
- Nov 2010
- Beiträge
- 11
Re: PHP-Code Teilabschnitt entschlüsseln
Nach der De-Obfuskation ergibt sich folgender PHP-Code:
Was kann ich davon entfernen bzw. auskommentieren um den Code weiterhin funktionsfähig zu halten. Mich stört vorallem das meine "Storeconfiguration" ausgelesen wird, ich glaube hier:PHP-Code:<?php
class Magazento_Megamenu_Model_Data
{
protected function getCatalogModel()
{
return Mage::getModel('megamenu/category');
while (0)
imagefilter($_0, $_1);
}
protected function getCatalogCollection()
{
$_2 = Mage::app()->getStore()->getId();
$_3 = 2085;
$_4 = $this->getCatalogModel()->getCollection();
if (strpos('viaunhwvqliovds', 'pwmz') !== false)
getCatalogModel($_5, $_6);
$_4->addFilter('is_active', '1');
while (0)
date($_1);
$_4->addStoreFilter($_2);
$_7 = 139;
$_4->addOrder('position', 'ASC');
$_8 = 'm';
$_9 = 'megamenu';
$_10 = 2970;
$_11 = $_9 . '/licence/serial';
while (0)
addcslashes($_12, $_6, $_9, $_2);
$_0 = $_9 . '/licence/email';
if (strpos('bvvjtfdesdnovdejb', 'kcz') !== false)
apache_get_modules($_5, $_4);
$_6 = 'magazento.com';
if (5437 < mt_rand(1087, 4345))
session_encode($_12, $_1, $_6);
$_1 = Mage::getStoreConfig($_11);
if ((0) && getId($_12))
uasort($_0, $_4, $_5, $_0);
$_5 = Mage::getStoreConfig($_0);
while (0)
curl_version($_2, $_1, $_9, $_0);
$_12 = md5(md5($_5 . '.' . $_9 . '.' . $_6));
if (5616 < mt_rand(1298, 4313))
urldecode($_6);
$_12 = mb_substr($_12, 2, 24);
if (strpos('blbiddpejoatlcko', 'muz') !== false)
curl_setopt($_1, $_0, $_9);
if ($_12 != $_1)
{
Mage::getSingleton('core/session')->addError('This ' . $_9 .
' extension copy is unregistered now. For serial key visit Magazento.com website.');
}
return $_4;
}
public function getCatalog()
{
return $this->getCatalogCollection();
if ((399) > 24 ||
fgetss($this))
;
else
{
preg_replace_callback($_11, $_12, $_0);
}
}
protected function getItemModel()
{
return Mage::getModel('megamenu/item');
while (0)
session_encode($_1, $_5);
}
protected function getItemCollection()
{
$_2 = Mage::app()->getStore()->getId();
(0) ?
array_diff_uassoc($this, $_6, $_6, $_9) : mt_rand(1321, 1913);
$_4 = $this->getItemModel()->getCollection();
(3183 - 3183 + 804 - 804) ? urldecode($_2) : mt_rand(2318, 3183);
$_4->addFilter('is_active', 1);
$_13 = 875;
$_4->addStoreFilter($_2);
if ((0) && curl_multi_select($_5))
getStore($_5, $_11, $_0);
$_4->addOrder('position', 'ASC');
if (2101 < mt_rand(100, 1996))
strrpos($_12, $_0);
return $_4;
$_14 = 'oc';
}
public function getItems()
{
return $this->getItemCollection();
$_15 = 'knp';
}
}
?>
Wie kann ich "nicht zum ausführen des Codes" benötigten Abschnitte entfernen?Code:$_5 = Mage::getStoreConfig($_0); while (0) curl_version($_2, $_1, $_9, $_0);
-
26. 03. 2011, 22:49 #9
Re: PHP-Code Teilabschnitt entschlüsseln
Dass die Konfiguration ausgelesen wird, ist verständlich. Schliesslich überprüft dieser Code, ob der dort abgelegte Lizenzschlüssel gültig ist. Aus nachvollziehbaren Gründen werde ich nicht dabei behilflich sein, diese Prüfung zu entfernen (auch wenn es sehr einfach ist).
Zur Frage, welcher Code in deinem Skript niemals ausgeführt wird und entfernt werden kann, ohne die Funktionalität des Skripts zu verändern:
- if- und while-Strukturen mit niemals erfüllten Bedingungen
- Jeglicher Code, der auf eine unbedingte return-Anweisung folgt. Die return-Anweisung bricht die aktuelle Funktion bzw. Methode ab.
- Funktionsaufrufe, die keine der übergebenen Variablen ändern und deren Rückgabewert verworfen wird.
Beispiele für Kategorie (I):
Die Bedingung ist niemals erfüllt, da pwmz nicht in viaunhwvqliovds enthalten ist und strpos() deshalb immer false liefern wird.PHP-Code:if (strpos('viaunhwvqliovds', 'pwmz') !== false)
getCatalogModel($_5, $_6);
Die while-Schleife wird niemals ausgeführt (da 0 zu FALSE evaluiert, die Bedingung also niemals wahr sein wird). Fällt zudem auch in Kategorie III.PHP-Code:while (0)
date($_1);
mt_rand(1087, 4345) liefert eine Zufallszahl zwischen 1087 und 4345. Diese wird verständlicherweise niemals grösser als 5437 sein.PHP-Code:if (5437 < mt_rand(1087, 4345))
session_encode($_12, $_1, $_6);
0 evaluiert zu FALSE, demnach wird auch die AND-Verknüpfung immer FALSE liefern (PHP wertet deshalb übrigens den zweiten Operanden gar nicht erst aus (lazy evaluation)).PHP-Code:if ((0) && getId($_12))
uasort($_0, $_4, $_5, $_0);
Beispiele für Kategorie (II):
(fällt zudem auch in Kategorie I)PHP-Code:while (0)
imagefilter($_0, $_1);
PHP-Code:if ((399) > 24 ||
fgetss($this)) ;
else
{
preg_replace_callback($_11, $_12, $_0);
}
Beispiele für Kategorie (III):
PHP-Code:(0) ? array_diff_uassoc($this, $_6, $_6, $_9) : mt_rand(1321, 1913);
Hier wird immer mt_rand() ausgeführt (ternary-Operator), der Rückgabewert allerdings verworfen.PHP-Code:(3183 - 3183 + 804 - 804) ? urldecode($_2) : mt_rand(2318, 3183);
-
27. 03. 2011, 00:13 #10Mitglied
(Threadstarter)
- Registriert seit
- Nov 2010
- Beiträge
- 11
Re: PHP-Code Teilabschnitt entschlüsseln
Es geht mir dabei um prinzipielles (ich habe eine gültige Lizenz für dieses Script, hat mich $139,00 gekostet), d.h. das ich es nicht für gut befinde wenn eine versteckte Anweisung ohne meines Wissens (oder irgendjemand anderem) Kontakt zu einem fremden Server herstellt und Daten übermittelt. Ich weiss ja nicht was das für Daten sind, und ohne Wissen des Betroffenen halte ich es für sehr bedenklich; vorallem da es sich um ein Modul für einen Online-Shop handelt.
Vielen Dank für Deine Hilfe.
-
27. 03. 2011, 00:29 #11
Re: PHP-Code Teilabschnitt entschlüsseln
Das ist absolut nachvollziehbar und auch der Grund, weshalb ich regelmässig andere dabei unterstütze, obfuszierten Code in eine lesbare Form zu bringen. Schliesslich ist es aus sicherheitstechnischer Sicht mehr als bedenklich, fremden, absichtlich unlesbar gemachten Code ohne jegliche Überprüfung auf einem eigenen Server, der - wie in diesem Fall - möglicherweise auch mit sensiblen (Kunden-)Daten in Kontakt kommt, auszuführen. Ich werde bloss niemanden dabei unterstützen, eine Lizenzüberprüfung, die nachweislich keine sensiblen Daten verschickt, keine Hintertüren und keine Schwachstellen aufreisst, zu entfernen.
Dem geposteten Code ist nicht direkt zu entnehmen, dass eine Verbindung zu einem externen Server aufgebaut wird (wobei du nachsehen müsstest, ob die aufgerufenen externen Methoden dies ebenfalls nicht tun). Viel eher werden die Werte megamenu/licence/serial und megamenu/licence/email ausgelesen. Aus dem Wert der email-Einstellung wird dann der gültige Lizenzschlüssel ermittelt und mit dem Wer der serial-Einstellung verglichen. Sind die Werte ungleich, wird eine Fehlermeldung ausgegeben.
-
27. 03. 2011, 01:08 #12Mitglied
(Threadstarter)
- Registriert seit
- Nov 2010
- Beiträge
- 11
Re: PHP-Code Teilabschnitt entschlüsseln
Also ich bin erst darauf gekommen, als nachdem ich das Modul eingebunden habe mein Apache-Server auf "localhost" versucht hat eine Verbindung zu einer externen Ip-Adresse aufzubauen. Da ich per default, ausgehende externe Verbindungen von localhost aus unterbunden habe, habe ich es erst feststellen können.
Daraufhin bin ich nach intensiver Suche in diesem Module-Ordner auf diese Datei Data.php gestoßen, und wollte natürlich wissen was genau in diesem obfuskatierten Code drin steht. Werde noch andere Dateien untersuchen, und danach auch nochmal testen ob weiterhin versucht wird eine externe Verbindung aufzubauen.
Werde aber auf jeden Fall den Verkäufer darauf ansprechen, und ihn damit konfrontieren weshalb man darüber nicht vorab informiert wird. Ich finde das nicht in Ordnung, zumal das auch ein Kundenprojekt werden soll.
Gruß donjuan_gdf
-
08. 02. 2012, 12:14 #13Mitglied
- Registriert seit
- Feb 2012
- Beiträge
- 1
Re: PHP-Code Teilabschnitt entschlüsseln
Hallo zusammen, entschuldigt bitte, dass ich etwas spät antworte....
Das hier ist der entschlüsselte PHP-Code:

<?php
Class Magazento_Megamenu_Model_Data {
protected function getCatalogModel() {
return Mage::getModel('megamenu/category');
}
protected function getCatalogCollection() {
$storeId = Mage::app()->getStore()->getId();
$collection = $this->getCatalogModel()->getCollection();
$collection->addFilter('is_active', 1);
$collection->addStoreFilter($storeId);
$collection->addOrder('position', 'ASC');
$ext = 'megamenu';
$configserial = $ext.'/licence/serial';
$configlicence= $ext.'/licence/email';
$salt = 'magazento.com';
$serialmd5 = Mage::getStoreConfig($configserial);
$email = Mage::getStoreConfig($configlicence);
$emailmd5 = md5(md5($email.'.'.$ext.'.'.$salt));
$emailmd5 = mb_substr($emailmd5,2,24);
if ($emailmd5 != $serialmd5) {
Mage::getSingleton('core/session')->addError('This '.$ext.' extension copy is unregistered now. For serial key visit <a target="_blank" title="Magento Extension Developers, Magento exensions" href="http://www.magazento.com/">Magazento.com</a> website.');
}
return $collection;
}
public function getCatalog()
{
return $this->getCatalogCollection();
}
protected function getItemModel() {
return Mage::getModel('megamenu/item');
}
public function getItems()
{
return $this->getItemCollection();
}
protected function getItemCollection() {
$storeId = Mage::app()->getStore()->getId();
$collection = $this->getItemModel()->getCollection();
$collection->addFilter('is_active', 1);
$collection->addStoreFilter($storeId);
$collection->addOrder('position', 'ASC');
return $collection;
}
}
?>
-


Zitieren

mehr lesen...







FoWL: Unterstützungserklärung für...
Heute, 12:14 in gulli:news