3 Commits
1.0.5 ... 1.0.7

Author SHA1 Message Date
Gabor Gyorvari
2b1a0c1266 Signature update from new infections 2020-10-01 11:26:02 +02:00
Gabor Gyorvari
c495cc822c Signature update for a pattern $_uU(101).$_uU(118).$_uU(97) 2020-09-30 17:02:33 +02:00
Gabor Gyorvari
e9a45d4bdc Allowing multiple use of -d option and braces in path syntax, closes #56 2020-08-18 15:36:52 +02:00
4 changed files with 57 additions and 19 deletions

View File

@@ -1,7 +1,7 @@
#This file contains raw strings that will be matched case-insensitive. # This file contains raw strings that will be matched case-insensitive.
#Comments and whitespace are possible, but comments must have '#' at the first character of the line. # Comments and whitespace are possible, but comments must have '#' at the first character of the line.
#List of security service providers that phishers often block. # List of security service providers that phishers often block.
abovenet abovenet
avira avira
bitdefender bitdefender
@@ -17,3 +17,6 @@ phishtank
sophos sophos
surfright surfright
symantec symantec
# SEO poison, pharmacy redirect
dealonline.su

View File

@@ -371,3 +371,7 @@ ZeroByte
# JS escaped: String.fromCharCode( # JS escaped: String.fromCharCode(
83, 116, 114, 105, 110, 103, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40 83, 116, 114, 105, 110, 103, 46, 102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101, 40
# SEO poisoning control site call
"http://$xxx
?useragent=$botbotbot

View File

@@ -4,10 +4,13 @@ eval\/\*[a-z0-9]+\*\/
# #
eval\([a-z0-9]{4,}\(\$[a-z0-9]{4,}, \$[0-9a-z]{4,}\)\); eval\([a-z0-9]{4,}\(\$[a-z0-9]{4,}, \$[0-9a-z]{4,}\)\);
# # chr(101).chr(118).chr(97)
(chr\(\d+\^\d+\)\.){4,} (chr\(\d+\^\d+\)\.){4,}
# # $_uU(101).$_uU(118).$_uU(97)
(\$\_[a-z0-9]{2,}\(\d+\)\.){4,}
# $uUx[101].$uUx[118].$uUx[97]
(\$[a-z0-9]{3,}\[\d+\]\.){4,} (\$[a-z0-9]{3,}\[\d+\]\.){4,}
# #
@@ -37,6 +40,9 @@ Googlebot['"]{0,1}\s*\)\){echo\s+file_get_contents
#execute base64 code #execute base64 code
eVaL\(\s*trim\(\s*baSe64_deCoDe\( eVaL\(\s*trim\(\s*baSe64_deCoDe\(
# execute escaped code
exec\("(\\[0-9a-fx]{2,3}){3,}
# #
if\s*\(\s*mail\s*\(\s*\$mails\[\$i\]\s*,\s*\$tema\s*,\s*base64_encode\s*\(\s*\$text if\s*\(\s*mail\s*\(\s*\$mails\[\$i\]\s*,\s*\$tema\s*,\s*base64_encode\s*\(\s*\$text
@@ -107,4 +113,7 @@ function\s+_[0-9]{8,}\(
@include ".*?(\\x[0-9a-f]{2,}.*?){2,}.*?"; @include ".*?(\\x[0-9a-f]{2,}.*?){2,}.*?";
# create_function is dangerous as like eval() see http://php.net/manual/en/function.create-function.php # create_function is dangerous as like eval() see http://php.net/manual/en/function.create-function.php
create_function\s*\(\s*['"]{2} create_function\s*\(\s*['"]{2}
# control concated from cookie at the call
(\$[a-z]{2,}=urldecode\(\$_COOKIE\['[a-z]{2,}'\]\);){3,}

View File

@@ -69,16 +69,31 @@ class MalwareScanner
if ($cli === true) { if ($cli === true) {
//Read Run Options //Read Run Options
$this->parseArgs(); $this->parseArgs();
$this->dir = realpath($this->dir);
$dirs = array();
if (is_array($this->dir)) {
// allow multiple directory aka. array
foreach ($this->dir as $path) {
$dirs[] = realpath($path);
}
} elseif ($bpos = strpos($this->dir, '{')) {
// Check path has a "brace", expand it to subdirectories
foreach (glob($this->dir, GLOB_BRACE) as $path) {
$dirs[] = realpath($path);
}
} else {
// only one directory specified
$dirs = array (realpath($this->dir));
}
//Make sure a directory was specified. //Make sure a directory was specified.
if ($this->dir === '') { if (empty($dirs)) {
$this->error('No directory specified or directory doesn\'t exist'); $this->error('No directory specified or directory doesn\'t exist');
exit(-1); exit(-1);
} }
//Initiate Scan //Initiate Scan
if (!$this->run($this->dir)) { if (!$this->run($dirs)) {
exit(-1); exit(-1);
} }
} }
@@ -592,18 +607,11 @@ class MalwareScanner
* - Fetch and load combined whitelist * - Fetch and load combined whitelist
* - Calls the process and report functions. * - Calls the process and report functions.
* *
* @param $dir * @param string|array $dir A directory path or a list of paths in array
* @return bool * @return bool
*/ */
public function run($dir) public function run($dir)
{ {
// Make sure the input is a valid directory path.
$dir = rtrim($dir, '/');
if (!is_dir($dir)) {
$this->error('Specified path is not a directory: ' . $dir);
return false;
}
$this->initializePatterns(); $this->initializePatterns();
$this->loadWhitelist(); $this->loadWhitelist();
@@ -613,9 +621,23 @@ class MalwareScanner
} }
$start = time(); $start = time();
$this->process($dir . '/');
if (!is_array($dir)) {
$dir = array ($dir);
}
foreach ($dir as $path) {
// Make sure the input is a valid directory path.
$path = rtrim($path, '/');
if (!is_dir($path)) {
$this->error('Specified path is not a directory: ' . $path);
return false;
}
$this->process($path . '/');
}
if (!$this->flagDisableStats) { if (!$this->flagDisableStats) {
$this->report($start, $dir . '/'); $this->report($start, implode(', ', $dir));
} }
return true; return true;
} }