Скрипт для отправки файлов на проверку на wwwvirustotal.com автор Chaak
спец релиз для Antichat, поскольку лицензией не завешено, а автарство я сохранил, считаю возможным выложить на анализ, доработку, может кто что позаимствует.
<?php
error_reporting(0);
set_time_limit(0);
ob_implicit_flush(1);
/**
* @name Virustotal File-Checker
* @author Chaak
* @version 1.0
*/
#~~~~~~~~~~~~~~~~~~~~Настройки~~~~~~~~~~~~~~~~~~~~~~#
$updir = 'files'; #папка для загрузки файлов
$maxfsize = 2048; #максимальный размер файла в КБ
$sleep = 5; #задержка обновлений в секундах(рекомендуется 5)
$abort = 180; #максимальное время проверки в секундах
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
set_time_limit($abort);
function deltree($folder)
{
if(is_dir($folder))
{
$handle = opendir($folder);
while($subfile = readdir($handle))
{
if($subfile == '.' or $subfile == '..') continue;
if(is_file($subfile)) unlink("{$folder}/{$subfile}");
else deltree("{$folder}/{$subfile}");
}
closedir($handle);
rmdir($folder);
}
else unlink($folder);
}
class fileWorks
{
private $md5;
private $filename;
private $updir;
/**
* Закачивает файл в опр. дирректорию
* @access public
* @return void
*/
public function localUpload($updir,$max)
{
$this->updir = $updir;
if($_FILES['file']['error'] == 0)
{
if($_FILES['file']['size'] <= $max * 1024)
{
$md5 = md5_file($_FILES['file']['tmp_name']);
$this->md5 = $md5;
$this->filename = dirname(__file__)."/$updir/$md5/".$_FILES['file']['name'];
if(@mkdir(dirname(__file__)."/$updir/$md5"))
{
if(move_uploaded_file($_FILES['file']['tmp_name'],$this->filename))
{
}
else
{
$this->printError('Загрузка не удалась');
}
} elseif(file_exists($this->filename))
{
}
else
{
$this->printError('Внутренняя ошибка');
}
}
else
{
$this->printError('Размер файла превышен');
}
}
else
{
$this->printError('Внутренняя ошибка');
}
}
/**
* Закачивает файл на вир. тотал
* @access public
* @return void
*/
public function uploadTotal($sleep)
{
$recept = trim(file_get_contents('http://www.virustotal.com/vt/ru/identificador'));
$postdata = array('archivo' => "@".$this->filename);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.virustotal.com/vt/ru/recepcion?'.$recept);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,0);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postdata);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,300);
$res = curl_exec($ch);
curl_close($ch);
if(preg_match('#([0-9a-f]{32})#',$res,$id))
{
$id = $id['0'];
file_get_contents('http://www.virustotal.com/vt/ru/reanaliza?'.$id);
file_get_contents('http://www.virustotal.com/ru/analisis/'.$id);
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Virustotal File-Checker</title>
<style>
.od{
background-color: #56C6F4;
}
</style>
</head>
<body>
<center><table border="0">
<tr><td colspan="4" id="nvis"><b>Идет проверка....</b></td></tr>
<tr><td colspan="4" id="nvis1"><img src="http://www.virustotal.com/img/loader.gif" /></td></tr>
<tr style="background-color: #EEEEEE;">
<td align="center"><b>Антивирус</b></td>
<td align="center"><b>Версия</b></td>
<td align="center"><b>Обновление</b></td>
<td align="center"><b>Результат</b></td>
</tr>';
flush();
ob_flush();
sleep(25);
$ok = 0;
$in_arr = array();
while(true)
{
$temp = file_get_contents('http://www.virustotal.com/vt/ru/resultado?'.$id.'-0-0');
preg_match_all('#\[".+"\,".+"\,".+"\,".+"\]#UiS',$temp,$resarr);
for($i = 0,$c = sizeof($resarr['0']); $i < $c; $i++)
{
if(!strstr($resarr['0'][$i],'ANALIZANDO') && !strstr($resarr['0'][$i],'TERMINADO'))
{
if(!in_array($resarr['0'][$i],$in_arr))
{
$in_arr[] = $resarr['0'][$i];
preg_match('#\["(.*?)"\,"(.*?)"\,"(.*?)"\,"(.*?)"\]#mi',$resarr['0'][$i],$view);
echo (($ok % 2) == 0)?('<tr class="od">')'<tr>');
$vir = (trim($view['4']) == '-')?($view['4'])'<font color="red"> '.$view['4'].' </font>');
echo '
<td>'.$view['1'].'</td>
<td>'.$view['2'].'</td>
<td>'.$view['3'].'</td>
<td>'.$vir.'</td>
</tr>';
flush();
ob_flush();
$ok++;
}
}
$in_arr = array_unique($in_arr);
}
if(sizeof($resarr['0']) > 35)
{
break;
}
sleep($sleep);
}
echo '<tr><td colspan="4">MD5: '.$this->md5.'</td></tr>';
echo '</table></center>
<script>document.getElementById("nvis").style.display = "none";document.getElementById("nvis1").style.display = "none";</script></body></html>';
}
else
{
$this->printError('ID сессии не передано...');
}
}
/**
* Выводит сообщение об ошибке
*
* @access private
* @return void
*/
private function printError($text)
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Virustotal File-Checker</title>
<style>
.main{
width: 400px;
height: 130px;
margin: 0px auto;
border: 15px red solid;
}
</style>
</head>
<body>
<div class="main">
<center><br />
<h1 style="color: red"><a href="'.$_SERVER["PHP_SELF"].'""'.$text.'</h1>
</center> </div>
<center> © Virustotal File - Checker by Chaak </center>
</body>
</html> ';
exit;
}
}
if(!isset($_POST['send']))
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Virustotal File-Checker</title>
<style>
.main{
width: 400px;
height: 220px;
margin: 0px auto;
border: 15px #EEEEEE solid;
}
</style>
</head>
<body>
<div class="main">
<center><img src="http://www.virustotal.com/img/VirusTotal-logo.png"/><br /><br />
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file"/><br /><br />
<input type="submit" style="background-image: url('http://www.virustotal.com/images/ru_boton-enviar.png'); height: 45px; width: 188px; border: 0" name="send" value=""/>
</form >
</center></div>
<center> © Virustotal File - Checker by Chaak </center></body></html>
<?php
}
else
{
$fw = new fileWorks();
$fw->localUpload($updir,$maxfsize);
$fw->uploadTotal($sleep);
}
#Special for Antichat 2008
?>
ТАМ ГДЕ ВЫ ВИДИТЕ, ЕСЛИ ВИДИТЕ, РОЖИЦУ ДОЛЖНО СТОЯТЬ: : ( - без пробелов (двоеточие и скобка)
Отредактировано DatatraveLL (2009-11-22 13:47:06)