hutav.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <?php
  2. error_reporting(0);
  3. ini_set("memory_limit","-1");
  4. $commands=getopt('h:f:d:s:n:l:i:m:z:c:j:v:b:');
  5. $name='HutAV';
  6. $ver='1.0.0';
  7. $prog_dir='C:\hAV';
  8. $filtermd='hashes_list';
  9. $filtersd='domains_list';
  10. if(strpos(php_uname(),'Windows')!==false){
  11. $sobs="\\";
  12. }else{
  13. $sobs='/';
  14. }
  15. if($commands['h']=="c"){
  16. echo "$name -------------------------------------------------------------------------------------------\n";
  17. echo "-h c Команды\n";
  18. echo "-f [имя файла] Сканировать файл\n";
  19. echo "-d [директория] Сканировать все файлы на выбранном директории\n";
  20. echo "-s cd Сканировать все файлы на текущем директории\n";
  21. echo "-n [домен или IP] Сканировать веб-сайт\n";
  22. echo "-l [файл списка доменов] Сканировать веб-сайты из списка доменов\n";
  23. echo "-i sigs Информация о списков хэшов от вредоносных файлов, вредоносных сайтов\n";
  24. echo "-m [хэш MD5] Сканировать хэш MD5\n";
  25. echo "-z [файл списка хэшов] Сканировать хэши файлов MD5 из списка хэшов MD5\n";
  26. echo "-с delinfected При сканировании удалять вредоносные файлы\n";
  27. echo "-j Отключить лог сканирования\n";
  28. echo "-v prog Версия программы\n";
  29. die();
  30. }
  31. if(isset($commands['b'])){
  32. if(strpos(php_uname(),'Windows')!==false){
  33. }else{
  34. echo "Ошибка антивируса: Это только для Windows!";
  35. die();
  36. }
  37. $filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
  38. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
  39. fclose($filter);
  40. $md5 = md5_file($commands['b']);
  41. if(empty($md5)){
  42. system("mshta \"javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Файл не найден', 10, '$name', 64 );close()\"");
  43. die();
  44. }
  45. if(strpos($filterc,$md5)!==false){
  46. system("mshta \"javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Файл [".basename($commands['b'])."] вредоносный\\nMD5-хэш файла: ".$md5."', 10, '$name', 64 );close()\"");
  47. }else{
  48. system("mshta \"javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Файл [".basename($commands['b'])."] чистый\\nMD5-хэш файла: ".$md5."', 10, '$name', 64 );close()\"");
  49. }
  50. die();
  51. }
  52. if($commands['v']=='prog'){
  53. echo $name.' '.$ver;
  54. die();
  55. }
  56. if(isset($commands['z'])){
  57. $filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
  58. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
  59. fclose($filter);
  60. $infected = 0;
  61. $clean = 0;
  62. $list = file($commands['z']);
  63. if(isset($commands['j'])==false){
  64. $log = "Дата сканирования: ".date("Y-m-d h:i:s")."\n";
  65. $log .= "-----------------------------------------------------\n";
  66. }
  67. foreach($list as $hash){
  68. $hash = preg_replace('~[\r\n]+~','',$hash);
  69. $hash = strtolower($hash);
  70. if(preg_match('/^[a-f0-9]{32}$/i', $hash)){
  71. if(strpos($filterc,$hash)!==false){
  72. echo "Хэш файла [".$hash."] - опасен\n";
  73. if(isset($commands['j'])==false){
  74. $log .= "Хэш файла [".$hash."] - опасен\n";
  75. }
  76. $infected++;
  77. }else{
  78. echo "Хэш файла [".$hash."] - чистый\n";
  79. if(isset($commands['j'])==false){
  80. $log .= "Хэш файла [".$hash."] - чистый\n";
  81. }
  82. $clean++;
  83. }
  84. }
  85. }
  86. if(isset($commands['j'])==false){
  87. $log .= "-----------------------------------------------------\n";
  88. $log .= "Найдено $infected опасных хэшов\n";
  89. $log .= " $clean чистых хэшов\n";
  90. $logf = fopen($prog_dir.$sobs.'dav_scan.log','w') or die('Ошибка антивируса: Не удалось создать лог сканировании');
  91. fwrite($logf,$log);
  92. fclose($logf);
  93. echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
  94. }
  95. echo "Найдено $infected опасных хэшов\n";
  96. echo " $clean чистых хэшов\n";
  97. die();
  98. }
  99. if(isset($commands['m'])){
  100. $filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
  101. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
  102. fclose($filter);
  103. if(strpos($filterc,$commands['m'])!==false){
  104. echo "Хэш файла [".$commands['m']."] - опасен\n";
  105. }else{
  106. echo "Хэш файла [".$commands['m']."] - безопасен\n";
  107. }
  108. die();
  109. }
  110. if($commands['i']=='sigs'){
  111. echo "Список хэшов от вредоносных файлов\n";
  112. echo "В списке: ".number_format(count(file($prog_dir.$sobs.$filtermd)))." хэшов\n\n";
  113. echo "Список вредоносных сайтов\n";
  114. echo "В списке: ".number_format(count(file($prog_dir.$sobs.$filtersd)))." доменов";
  115. die();
  116. }
  117. if(isset($commands['l'])){
  118. $filter = fopen($prog_dir.$sobs.$filtersd,'r')or die('Ошибка антивируса: Не удалось открыть базу вредоносных сайтов');
  119. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtersd));
  120. fclose($filter);
  121. $list = file($commands['l']);
  122. $dangerous = 0;
  123. $clean = 0;
  124. foreach($list as $domain){
  125. $domain = str_replace('www.','',$domain);
  126. $domainws = preg_replace('~[\r\n]+~','',$domain);
  127. $domainws = strtolower($domainws);
  128. if(preg_match('/([a-zA-Z0-9\-_]+\.)?[a-zA-Z0-9\-_]+\.[a-zA-Z]{2,5}/',$domainws)){
  129. if(strpos($filterc,$domainws)!==false){
  130. echo "Сайт [".$domainws."] - опасен\n";
  131. if(isset($commands['j'])==false){
  132. $log .= "Сайт [".$domainws."] - опасен\n";
  133. }
  134. $dangerous++;
  135. }else{
  136. echo "Сайт [".$domainws."] - безопасен\n";
  137. if(isset($commands['j'])==false){
  138. $log .= "Сайт [".$domainws."] - безопасен\n";
  139. }
  140. $clean++;
  141. }
  142. }elseif(filter_var($domainws,FILTER_VALIDATE_IP)){
  143. if(strpos($filterc,$domainws)!==false){
  144. echo "Сайт [".$domainws."] - опасен\n";
  145. if(isset($commands['j'])==false){
  146. $log .= "Сайт [".$domainws."] - опасен\n";
  147. }
  148. $dangerous++;
  149. }else{
  150. echo "Сайт [".$domainws."] - безопасен\n";
  151. if(isset($commands['j'])==false){
  152. $log .= "Сайт [".$domainws."] - безопасен\n";
  153. }
  154. $clean++;
  155. }
  156. }
  157. }
  158. if(isset($commands['j'])==false){
  159. $log .= "-----------------------------------------------------\n";
  160. $log .= "Найдено $dangerous опасных сайтов\n";
  161. $log .= " $clean безопасных сайтов\n";
  162. $logf = fopen($prog_dir.$sobs.'dav_scan.log','w') or die('Ошибка антивируса: Не удалось создать лог сканировании');
  163. fwrite($logf,$log);
  164. fclose($logf);
  165. echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
  166. }
  167. echo "Найдено $dangerous опасных сайтов\n";
  168. echo " $clean безопасных сайтов\n";
  169. die();
  170. }
  171. if(isset($commands['n'])){
  172. $filter = fopen($prog_dir.$sobs.$filtersd,'r')or die('Ошибка антивируса: Не удалось открыть базу вредоносных сайтов');
  173. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtersd));
  174. fclose($filter);
  175. $commands['n'] = strtolower($commands['n']);
  176. if(strpos($filterc,$commands['n'])!==false){
  177. echo "Сайт [".$commands['n']."] - опасен\n";
  178. }else{
  179. echo "Сайт [".$commands['n']."] - безопасен\n";
  180. }
  181. die();
  182. }
  183. if(isset($commands['f'])){
  184. $filter = fopen($prog_dir.$sobs.$filtermd,'r')or die('Ошибка антивируса: Не удалось открыть базу вирусов');
  185. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
  186. fclose($filter);
  187. $md5 = md5_file($commands['f']);
  188. if(empty($md5)){
  189. echo "Ошибка антивируса: Файл не найден.";
  190. die();
  191. }
  192. if(strpos($filterc,$md5)!==false){
  193. echo "Файл [".basename($commands['f'])."] - вредоносный\n";
  194. if($commands['c']=="delinfected"){
  195. unlink($commands['f']);
  196. }
  197. }else{
  198. echo "Файл [".basename($commands['f'])."] - чистый\n";
  199. }
  200. echo "MD5-хэш файла: ".$md5;
  201. die();
  202. }
  203. if($commands['s']=='cd'){
  204. $filter = fopen($prog_dir.$sobs.$filtermd,'r') or die('Ошибка антивируса: Не удалось открыть базу вирусов');
  205. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
  206. fclose($filter);
  207. $infected = 0;
  208. $clean = 0;
  209. $files = array_filter(glob('*'),'is_file');
  210. if(isset($commands['j'])==false){
  211. $log = "Сканировано ".count($files)." файлов, в директории: ".getcwd()."\nДата сканирования: ".date("Y-m-d h:i:s")."\n";
  212. $log .= "-----------------------------------------------------\n";
  213. }
  214. foreach($files as $file){
  215. $md5 = md5_file($file);
  216. if(strpos($filterc,$md5)!==false){
  217. echo "Файл [".basename($file)."] - вредоносный\n";
  218. if(isset($commands['j'])==false){
  219. $log .= "Файл [".basename($file)."] - вредоносный\n";
  220. }
  221. if($commands['c']=="delinfected"){
  222. unlink(getcwd().$sobs.$file);
  223. }
  224. $infected++;
  225. }else{
  226. echo "Файл [".basename($file)."] - чистый\n";
  227. if(isset($commands['j'])==false){
  228. $log .= "Файл [".basename($file)."] - чистый\n";
  229. }
  230. $clean++;
  231. }
  232. }
  233. if(isset($commands['j'])==false){
  234. $log .= "-----------------------------------------------------\n";
  235. $log .= "Найдено $infected вредоносных файлов\n";
  236. $log .= " $clean чистых файлов\n";
  237. $logf = fopen($prog_dir.$sobs."dav_scan.log","w") or die('Ошибка антивируса: Не удалось создать лог сканировании');
  238. fwrite($logf,$log);
  239. fclose($logf);
  240. }
  241. echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
  242. echo "Найдено $infected вредоносных файлов\n";
  243. echo " $clean чистых файлов\n";
  244. die();
  245. }
  246. if(isset($commands['d'])){
  247. $filter = fopen($prog_dir.$sobs.$filtermd,'r') or die('Ошибка антивируса: Не удалось открыть базу вирусов');
  248. $filterc = fread($filter,filesize($prog_dir.$sobs.$filtermd));
  249. fclose($filter);
  250. $infected = 0;
  251. $clean = 0;
  252. $files = array_filter(glob($commands['d'].$sobs.'*'),'is_file');
  253. if(isset($commands['j'])==false){
  254. $log = "Сканировано ".count($files)." файлов, в директории: ".$commands['d']."\nДата сканирования: ".date("Y-m-d h:i:s")."\n";
  255. $log .= "-----------------------------------------------------\n";
  256. }
  257. foreach($files as $file){
  258. $md5 = md5_file($file);
  259. if(strpos($filterc,$md5)!==false){
  260. echo "Файл [".basename($file)."] - вредоносный\n";
  261. if(isset($commands['j'])==false){
  262. $log .= "Файл [".basename($file)."] - вредоносный\n";
  263. }
  264. if($commands['c']=="delinfected"){
  265. unlink($file);
  266. }
  267. $infected++;
  268. }else{
  269. echo "Файл [".basename($file)."] - чистый\n";
  270. if(isset($commands['j'])==false){
  271. $log .= "Файл [".basename($file)."] - чистый\n";
  272. }
  273. $clean++;
  274. }
  275. }
  276. if(isset($commands['j'])==false){
  277. $log .= "-----------------------------------------------------\n";
  278. $log .= "Найдено $infected вредоносных файлов\n";
  279. $log .= " $clean чистых файлов\n";
  280. $logf = fopen($prog_dir.$sobs.'dav_scan.log','w') or die('Ошибка антивируса: Не удалось создать лог сканировании');
  281. fwrite($logf,$log);
  282. fclose($logf);
  283. echo "Лог файл: $prog_dir"."$sobs"."dav_scan.log\n";
  284. }
  285. echo "Найдено $infected вредоносных файлов\n";
  286. echo " $clean чистых файлов\n";
  287. die();
  288. }
  289. ?>