ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Anti AutoRUN для флешек в FAT32
  #1  
Старый 15.06.2009, 23:46
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Anti AutoRUN для флешек в FAT32

Anti AutoRUN для флешек в FAT32

Прочитал вот коменты к статейке https://forum.antichat.ru/threadnav52056-3-10.html

Понравился метод связанный с установкой атрибута файлу 0x40 в FAT32 и вот было по быстренькому реализовано ПО.
Возможности:
1) получение буквы диска из командной строки или ввод вручную
2) Поддержка только FAT32 (а больше и не надо)
3) определение файловой системы (чтобы случайно не попортить другую ФС)
4) автоматически создает файл autorun.inf
5) Лочит и унлочит файл autorun.inf

Алгоритм работы:
1) Если буква диска не передана через командную строку, то попросит её ввести
2) Получит тип файловой системы на этом диске
3) Если файловая система не FAT32 то завершит работу
4) создаст файл autorun.inf
5) откроет диск на чтение/запись
6) будит читать по 2 килобайта пока ненайдет текст AUTORUN INF или не будет достигнут конец флешки.
По хорошему нужно было бы брать из бутсектора номер кластера где находится корневой каталог, затем искать где этот кластер физически находится на флешке и далее начинать парсить записи FAT( но увы было очень влом это делать ))).
7) Если нашел файл AUTORUN INF то:
Если он залочен, то разлочит
Если разлочен, то залочит

А вот и непосредственно исходник. Ко/v\пилится в VC++ 6.0 без проблем (писался в нем)

Код:
#include "windows.h"
#include "stdio.h"
#include "conio.h"

// поиск участка памяти в буфере
char * memmem(char *buf, char *pattern, size_t buflen, size_t len)
{
 size_t i, j;
 char * bf=buf;
 char * pt = pattern;
 if (len>buflen) return NULL;
 for (i = 0; i <= (buflen - len); ++i)
  {
   for (j = 0; j < len; ++j)
    {
     if (pt[j] != bf[i + j]) break;
    }
   if (j == len) return (bf + i);
   }
 return NULL;
}

int main(int argc, char* argv[])
{
 HANDLE h;
 char c;
 DWORD rb;
 char* p;
 int x;
 char buf[2048];
 char VolumeName[256];
 char tmp[256];
 char FSName[256];
 ULONG MaximumFNameLength,FileSystemFlags,SerialNum;
 
 printf("Anti AutoRun (C) SLESH\n");
 if (argc==1) // если буква диск на введена
 {
   printf("Enter Driver Latter: ");
   c=getch(); // спросим букву диска
   printf("%c\n",c);
   sprintf(buf,"\\\\.\\%c:",c);
   sprintf(tmp,"%c:\\",c);
 }
 else  // если буква диска введена в командной строке
 {
   sprintf(buf,"\\\\.\\%s:",argv[1]);
   sprintf(tmp,"%s:\\",argv[1]);
   c=0x00;
 }
 // получим тип ФС
 if (GetVolumeInformation(tmp,VolumeName, 256,&SerialNum,&MaximumFNameLength,&FileSystemFlags, FSName, 256))
 {
  printf("FileSystem Type: %s\n",FSName);
 } 
 else 
 {
  printf("Get FileSystem Type Error\n");
  return 0;
 }
 // проверим ФС
 if (strcmp(FSName,"FAT32"))
 {
  printf("UNSUPPORT FileSystem\n");
  return 0;
 }

 strcat(tmp,"autorun.inf");
// создадим пустой файл autorun.inf
 h=CreateFile(tmp,GENERIC_WRITE,0, 0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
 if (h!=INVALID_HANDLE_VALUE)
 {
  CloseHandle(h);
 }
 
// откроем диск h=CreateFile(buf,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 if (h==INVALID_HANDLE_VALUE) 
 {
  printf("Open Drive Error\n");
 }
 else
 {
  x=0;
  printf("Search File\n");
  // читаем пока есть что читать
  while (ReadFile(h,buf,2048,&rb,NULL)&&rb==2048)
  {
   printf("%i\r",x);
   // ишем нужную нам запись
   if (p=memmem(buf,"AUTORUN INF",rb,11))
   {
	 if (p[11]==0x40) // если файл залочен
	 {
	  printf("Autorun.inf UNLOCKED\n");
	  p[11]=0x20; // разлочем его
	 }
	 else // сли незалочен
	 {
	  printf("Autorun.inf LOCKED\n");
	  p[11]=0x40; // залочим
	 }
     SetFilePointer(h,x,NULL,FILE_BEGIN); // передвинем указатель на начало считанного блока
	 WriteFile(h,buf,2048,&rb,NULL); // запишем измененные данные
	 break; //прервем выполнение дальнейшего чтения
   } else x+=rb; // счетчик считанных байт
  }
  CloseHandle(h); // закроем дескриптор открытого диска
 }
 if (c) getch(); // если имя диска получили не в виде командной строки. Сделано это чтобы неисчезло сразу с экрана окошко
 return 0;
}
ВАЖНО!!!!!
1) Вы используете прожку на свой страх и риск и я не отвечаю за то, что хз по какой причине у вас могут быть повреждены данные на флешке.
2) Как видно запись в FAT ищется банальным перебором, так что могут быть ошибки, когда случайно будет найден нужный текст но в другом месте

P.S. Тестил на двух флешках - вроде норм работает.

(C) SLESH 2009

Последний раз редактировалось slesh; 16.06.2009 в 00:09..
 
Ответить с цитированием

  #2  
Старый 16.06.2009, 00:02
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Для тех у кого нету компилятора или влом компилить, вот уже откомпилинная версия.
Вложения
Тип файла: rar AAR.rar (12.7 Кб, 11 просмотров)
 
Ответить с цитированием

  #3  
Старый 16.06.2009, 10:43
Аватар для Gar|k
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

Ну надо по умному ) чтобы правильно файл искало ) недавича мучался с FAT12
время будет может сделаю хотя вот тут есть готовые примеры

FAT 12, поиск файла

еще помню есть PDF на статью в журнале системный администратор там под UNIX описаны примеры на Си чтения, записи, удаления во всх FAT (12,16,32) сцылку чет не нашел...
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с Autorun FindNIks Болталка 3 03.02.2009 00:39
Anti Trojan Elite 3.6.6 KoTeG Soft - Windows 4 07.05.2006 09:43
Anti Porno err0rFrost АнтиАдмин 6 06.09.2005 11:43
Создание Autorun и меню к CD »»» NoNaMeR Болталка 1 24.08.2005 14:28



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ