Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 15
1

Блокирование и доступ к флешке

04.05.2012, 14:28. Просмотров 4120. Ответов 14
Метки нет (Все метки)

Добрый день!
Задача такая: необходимо закрыть доступ к флешке, но таким образом, чтобы с помощью моей программы содержимое можно было считать. То есть кроме моей программы доступа к накопителю нет ни у кого.
Вся работа выполняется в Windows 7.
Всё это необходимо для того, что бы на флешке хранить ключевую информацию, как например ЭЦП. Изначально у меня было несколько вариантов, как поступить. Самым надёжным оказался вариант с созданием ext4 раздела на флешке. Но, в таком случае необходим драйвер интерпретации Linux раздела для NTFS. Многие часы поисков в интернете дали только ext2fsd, программу как раз таки с драйвером так мне необходимым. Посмотрел я исходники, и если честно вообще ничего не понял. Затем я подумал, что возможно проще создать закрытый NTFS раздел на флешке. Но так что-то ничего вразумительного для изучения я не нашёл.
IsolatedStorage я так понял в такой ситуации не очень подходит.

P.S. пишу на C# и C++.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2012, 14:28
Ответы с готовыми решениями:

Доступ к флешке
Имеется плеер WALKMAN NWZ-B152F, когда вставляю его в usb, он отображается не как флешка, а таким...

Запретить доступ к флешке
Доброго времени суток , благодаря форумчанам я выяснил как шифровать данные на юсб никопителях , но...

Доступ к флешке на роутере
Добрый день! Есть роутер ASUS RT-AC68U с флешкой, как с WINDOWS 10 читать/записывать на флешку? ...

Доступ к событиям файлов на флешке
Может не с точки кода, а точки логики...запускаются файлы которые лежат на флешке, после их...

14
Заблокирован
Автор FAQ
04.05.2012, 19:09 2
С NTFS-ом не работал а с фатом можно "портить пару байтов в FAT_ROOT" из за этого флешка станет нечитаемой. А затем нашей софтиной эти пару байтов записывать "правильно". Концептуально такие трюки возможны и с новыми файловыми системами...
1
10210 / 6591 / 494
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
04.05.2012, 19:27 3
...а TrueCrypt не? Он с открытыми исходниками.

p.s.: вот еще вариант http://habrahabr.ru/post/126751/
1
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 15
05.05.2012, 00:44  [ТС] 4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
С NTFS-ом не работал а с фатом можно "портить пару байтов в FAT_ROOT" из за этого флешка станет нечитаемой. А затем нашей софтиной эти пару байтов записывать "правильно". Концептуально такие трюки возможны и с новыми файловыми системами...
Очень интересно, абсолютно не знал об этом. Обязательно погляжу на подобные варианты! Большое спасибо!

Цитата Сообщение от raxp Посмотреть сообщение
...а TrueCrypt не? Он с открытыми исходниками.

p.s.: вот еще вариант http://habrahabr.ru/post/126751/
К сожалению TrueCrypt абсолютно не катит.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 15
10.05.2012, 11:15  [ТС] 5
А вот тогда такой вопрос, если использовать вариант с порчей FAT_ROOT, то не получится ли такая ситуация, что при восстановлении флешка определится для ВСЕЙ системы? То есть в моём случае необходимо получить доступ только из моей программы. Ну как файловый менеджер для закрытого диска.
0
Заблокирован
Автор FAQ
10.05.2012, 11:37 6
Цитата Сообщение от nonick666 Посмотреть сообщение
А вот тогда такой вопрос, если использовать вариант с порчей FAT_ROOT, то не получится ли такая ситуация, что при восстановлении флешка определится для ВСЕЙ системы?
- да при восстановлении FAT_ROOT съёмный носитель будет доступен в системе. Впринципе в твою програмулину(или в какой либо доп файл) можно зашивать корректный FAT_ROOT и ей же по этой карте читать файлы с флешки (тебе же ведь цепочки кластеров нужны - они и так будут а вот как выйти на первый кластер будешь знать только ты). Т.е. я думал твоя програмка работает по принципу, скрыли, а затем флеш для всех открыли. Если же надо конфиденциальность, то скрыли данные, и нашей програмулинкой (которая знает корректный FAT_ROOT) читаем кластеры и воссоздаём из них файлы в том месте где необходимо.
1
10210 / 6591 / 494
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
10.05.2012, 12:11 7
К сожалению TrueCrypt абсолютно не катит.
аргументируйте.

что бы на флешке хранить ключевую информацию, как например ЭЦП
это разные по принципу действия примеры. В этих используется спецИМС для шифровки-дешифровки аппаратно.
1
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 15
10.05.2012, 18:58  [ТС] 8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- да при восстановлении FAT_ROOT съёмный носитель будет доступен в системе. Впринципе в твою програмулину(или в какой либо доп файл) можно зашивать корректный FAT_ROOT и ей же по этой карте читать файлы с флешки (тебе же ведь цепочки кластеров нужны - они и так будут а вот как выйти на первый кластер будешь знать только ты). Т.е. я думал твоя програмка работает по принципу, скрыли, а затем флеш для всех открыли. Если же надо конфиденциальность, то скрыли данные, и нашей програмулинкой (которая знает корректный FAT_ROOT) читаем кластеры и воссоздаём из них файлы в том месте где необходимо.
Спасибо! А нигде примера в инете не болтается? А то я что-то не нашёл.

Цитата Сообщение от raxp Посмотреть сообщение
аргументируйте.
1. Необходима полностью своя разработка
2. В исходниках TrueCrypt пытался было дело разобраться ещё на 3м курсе, да так и не вышло у меня ((


это разные по принципу действия примеры. В этих используется спецИМС для шифровки-дешифровки аппаратно.
Это я знаю. В том то и задача, чтоб попробовать осуществить это программно. На данном этапе просто для пробы.

Добавлено через 1 час 53 минуты
-=ЮрА=- будьте так любезны, подскажите пожалуйста как на С++ подобраться низкоуровнево к разделу. В идеале конечно на C#, но подкрадывается сомнение, что это едва ли =)
0
1197 / 828 / 180
Регистрация: 16.03.2008
Сообщений: 3,962
Записей в блоге: 1
10.05.2012, 19:11 9
Цитата Сообщение от nonick666 Посмотреть сообщение
подскажите пожалуйста как на С++ подобраться низкоуровнево к разделу.
А винда позволит это сделать?
Точно не помню, но вроде в проекте OpenPGP была возможность шифровать диски/папки и т.д.
0
10210 / 6591 / 494
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
10.05.2012, 19:36 10
Цитата Сообщение от voral
А винда позволит это сделать?
надо знать как ...CreateFile() и DeviceIOControl()

Цитата Сообщение от nonick666
как на С++ подобраться низкоуровнево к разделу. В идеале конечно на C#
это WinAPI, язык не имеет значения.

Вот кусок низкоуровневого чтения-записи в терминах Delphi (это из mxAPI):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
type
  TDiskGeometry = packed record
    Cylinders: Int64;           // количество цилидров
    MediaType: DWORD;           // тип носителя
    TracksPerCylinder: DWORD;   // дорожек на цилиндре
    SectorsPerTrack: DWORD;     // секторов на дорожке
    BytesPerSector: DWORD;      // байт в секторе
  end;
  TPartitionTableEntry = packed record
    BootIndicator: Byte;          // $80, если активный (загрузочный) раздел
    StartingHead: Byte;
    StartingCylAndSect: Word;
    SystemIndicator: Byte;
    EndingHead: Byte;
    EndingCylAndSect: Word;
    StartingSector: DWORD;        // начальный сектор
    NumberOfSects: DWORD;         // количество секторов
  end;
  TPartitionTable = packed array [0..3] of TPartitionTableEntry;
  PDriveInfo = ^TDriveInfo;
  TDriveInfo = record
    PartitionTable: TPartitionTable;
    LogicalDrives: array [0..3] of PDriveInfo;
  end;
  TPhysicalDrives = array of TDriveInfo;
 
const
  PartitionTableOffset = $1be;
  ExtendedPartitions = [5,$f];
 
  IOCTL_DISK_GET_DRIVE_GEOMETRY = $70000;
 
function ReadSectorsNT(DriveNumber: Byte; StartingSector, SectorCount: DWORD;
  Buffer: Pointer): DWORD;
var
  hFile: THandle;
  br,TmpLo,TmpHi: DWORD;
begin
  Result := 0;
  hFile := CreateFile(PChar('\\.\PhysicalDrive'+IntToStr(DriveNumber)),
    GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hFile = INVALID_HANDLE_VALUE then Exit;
  TmpLo := __Mul(StartingSector,
    PhysicalDrives[DriveNumber].DiskGeometry.BytesPerSector,TmpHi);
  if SetFilePointer(hFile,TmpLo,@TmpHi,FILE_BEGIN) = TmpLo then
  begin
    SectorCount := SectorCount*PhysicalDrives[DriveNumber].DiskGeometry.BytesPerSector;
    if not ReadFile(hFile,Buffer^,SectorCount,br,nil) then Exit;
    Result := br;
  end;
  CloseHandle(hFile);
 
end;
 
 
procedure InitializeIO;
begin
 if WIN32PLATFORM <> VER_PLATFORM_WIN32_NT then
  begin
    CurDir := GetCurrentDir;
    SetLength(MyName,MAX_PATH);
    GetModuleFileName(hInstance,PChar(MyName),MAX_PATH);
    SetCurrentDir(ExtractFileDir(MyName));
    RawIoLib := LoadLibrary('RAWIO32.BIN');
    SetCurrentDir(CurDir);
    Finalize(MyName);
    EI13GetDriveParameters := GetProcAddress(RawIoLib,'EI13GetDriveParameters');
    EI13ReadSector := GetProcAddress(RawIoLib,'EI13ReadSector');
    EI13WriteSector := GetProcAddress(RawIoLib,'EI13WriteSector');
    ReadSectors := ReadSectors9x;
    WriteSectors := WriteSectors9x;
  end else
  begin
    ReadSectors := ReadSectorsNT;
    WriteSectors := WriteSectorsNT;
  end;
  GetDrivesInfo(PhysicalDrives);
end;
 
 
function __Mul(a,b: DWORD; var HiDWORD: DWORD): DWORD; // Result = LoDWORD
asm
  mul edx
  mov [ecx],edx
end;
 
 
function WriteSectors(DriveNumber: Byte; StartingSector, SectorCount: DWORD;
  Buffer: Pointer; BytesPerSector: DWORD = 512): DWORD;
var
  hFile: THandle;
  bw,TmpLo,TmpHi: DWORD;
begin
  Result := 0;
  hFile := CreateFile(PChar('\\.\PhysicalDrive'+IntToStr(DriveNumber)),
    GENERIC_WRITE,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hFile = INVALID_HANDLE_VALUE then Exit;
  TmpLo := __Mul(StartingSector,BytesPerSector,TmpHi);
  if SetFilePointer(hFile,TmpLo,@TmpHi,FILE_BEGIN) = TmpLo then
  begin
    SectorCount := SectorCount*BytesPerSector;
    if not WriteFile(hFile,Buffer^,SectorCount,bw,nil) then Exit;
    Result := bw;
  end;
  CloseHandle(hFile);
end;
Цитата Сообщение от nonick666
1. Необходима полностью своя разработка
2. В исходниках TrueCrypt пытался было дело разобраться ещё на 3м курсе, да так и не вышло у меня ((
1- плагин полностью будет ваш, чем плохо? И проект солидный. Велосипед изобретать с нуля без знаний, без наработок?
2- не вы первый, не вы последний, люди же как то разбираются (пример таких могу в личку)

Цитата Сообщение от nonick666
Это я знаю. В том то и задача, чтоб попробовать осуществить это программно. На данном этапе просто для пробы.
это нельзя сэмулировать программно, там аппаратный контроллер с вшитым алгоритмом, он взаимодействует со своим драйвером ...а вы всего лишь хотите свою файловую систему создать, это не одно и то же.
1
1197 / 828 / 180
Регистрация: 16.03.2008
Сообщений: 3,962
Записей в блоге: 1
10.05.2012, 19:53 11
Цитата Сообщение от raxp Посмотреть сообщение
надо знать как ...CreateFile() и DeviceIOControl()
Даже без админских прав?
0
10210 / 6591 / 494
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
10.05.2012, 20:43 12
...разумеется с админскими, но тут дело не в политиках.
0
-=ЮрА=-
10.05.2012, 23:30
  #13

Не по теме:

Цитата Сообщение от raxp Посмотреть сообщение
...разумеется с админскими, но тут дело не в политиках.
- с ограниченной политикой CreateFile 100% не даёт доступ к FS носителя(проверено на практике)

0
10210 / 6591 / 494
Регистрация: 28.12.2010
Сообщений: 21,165
Записей в блоге: 1
11.05.2012, 07:04 14
...так никто и не спорит.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 15
11.05.2012, 10:47  [ТС] 15
Цитата Сообщение от raxp Посмотреть сообщение
это нельзя сэмулировать программно, там аппаратный контроллер с вшитым алгоритмом, он взаимодействует со своим драйвером ...а вы всего лишь хотите свою файловую систему создать, это не одно и то же.
Про устройство работы таких штук я знаю =) На данном этапе хватит файловой системы. Ну а дальше будет больше. Большое спасибо за рекомендации!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2012, 10:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как получить доступ к флешке в виртуальной системе?
У меня vb не видит флешку хотя галки где надо стоят и экстеншпак установил.А фильтр не...

Портиться инфа на флешке! На флешке винда находит битые кластеры!
Записываю на работе на флешку проект и контрольные суммы (MD5) его файлов. Прихожу домой через 2...

Вирус создает на флешке ярлык на скрытую папку на флешке
Доброго времени суток. Словил вирус на флэшку,который создает скрытую папку на флешке с названием...

Вирус создает на флешке ярлык на скрытую папку на флешке
Здравствуйте. Поймал вирус на флешку и заразил свой ноут. Вирус создает скрытую папку на флешке с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.