hutav.php 12 KB

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