Защита файла от копирования
От: white_znake  
Дата: 30.06.04 17:11
Оценка:
Задача такая: Есть зашифрованный файл данных, при запуске программы он дешифруется, но как в таком случае запретить пользователю скопировать не зашифрованный файл??? И такое возможно.
Re: Защита файла от копирования
От: Аноним  
Дата: 30.06.04 18:31
Оценка: -1
Здравствуйте, white_znake, Вы писали:

_> Задача такая: Есть зашифрованный файл данных, при запуске программы он дешифруется, но как в таком случае запретить пользователю скопировать не зашифрованный файл??? И такое возможно.


Все можно сломать. Для простоты пусть либо программа в памяти хранит расшифрованный файл, либо создай его где нибудь в каталоге temp.
Re: Защита файла от копирования
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 01.07.04 00:15
Оценка:
Hello white_znake, you wrote:

> Задача такая: Есть зашифрованный файл данных, при запуске

> программы он дешифруется, но как в таком случае запретить пользователю
> скопировать не зашифрованный файл???

Открыть его (расшифрованную версию) с эксклюзивными правами на
чтение/запись.

> И такое возможно.


Защититься на 100% не получится.

ЗЫ: А на NTFS можно расшифрованные данные писать не в файл, а прицепиться
к какому-нибудь файлу и писать в stream (или как там это называется).
Что-то типа такого:
================================
procedure TForm1.Button1Click(Sender: TObject);
var
   Filter: IFilter;
   Storage: IStorage;
   Res: HRESULT;
begin
   Res:= LoadIFilter('C:\Test.mp3', Storage, Filter);
   Caption:= IntToHex(Res, 1);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
   hFileStream: THandle;
   Num: Cardinal;
   Buf: array[0..2048] of Char;
begin
   hFileStream:= CreateFile('C:\Test.mp3:mystream',
                   GENERIC_READ or GENERIC_WRITE,
                   0,
                   nil,
                   OPEN_ALWAYS,
                   0,
                   0);
   if hFileStream <> INVALID_HANDLE_VALUE then
     try
       WriteFile(hFileStream, 'Hello World', Length('Hello World'), Num,  
nil);
       SetFilePointer(hFileStream, 0, nil, FILE_BEGIN);
       ReadFile(hFileStream, Buf, SizeOf(Buf)-1, Num, nil);
       Buf[Num]:= #0;
       MessageBox(0, Buf, 'File Stream Test', MB_OK);
     finally
       CloseHandle(hFileStream);
     end;
end;


--
Всего хорошего, Слава
http://slava.users.otts.ru
Posted via RSDN NNTP Server 1.9 beta
Re[2]: Защита файла от копирования
От: white_znake  
Дата: 01.07.04 06:37
Оценка:
Здравствуйте, Slava Antonov, Вы писали:

SA>Hello white_znake, you wrote:


>> Задача такая: Есть зашифрованный файл данных, при запуске

>> программы он дешифруется, но как в таком случае запретить пользователю
>> скопировать не зашифрованный файл???

SA>Открыть его (расшифрованную версию) с эксклюзивными правами на

SA>чтение/запись.

>> И такое возможно.


SA>Защититься на 100% не получится.


SA>ЗЫ: А на NTFS можно расшифрованные данные писать не в файл, а прицепиться

SA>к какому-нибудь файлу и писать в stream (или как там это называется).
SA>Что-то типа такого:
SA>================================
SA>
SA>procedure TForm1.Button1Click(Sender: TObject);
SA>var
SA>   Filter: IFilter;
SA>   Storage: IStorage;
SA>   Res: HRESULT;
SA>begin
SA>   Res:= LoadIFilter('C:\Test.mp3', Storage, Filter);
SA>   Caption:= IntToHex(Res, 1);
SA>end;

SA>procedure TForm1.Button3Click(Sender: TObject);
SA>var
SA>   hFileStream: THandle;
SA>   Num: Cardinal;
SA>   Buf: array[0..2048] of Char;
SA>begin
SA>   hFileStream:= CreateFile('C:\Test.mp3:mystream',
SA>                   GENERIC_READ or GENERIC_WRITE,
SA>                   0,
SA>                   nil,
SA>                   OPEN_ALWAYS,
SA>                   0,
SA>                   0);
SA>   if hFileStream <> INVALID_HANDLE_VALUE then
SA>     try
SA>       WriteFile(hFileStream, 'Hello World', Length('Hello World'), Num,  
SA>nil);
SA>       SetFilePointer(hFileStream, 0, nil, FILE_BEGIN);
SA>       ReadFile(hFileStream, Buf, SizeOf(Buf)-1, Num, nil);
SA>       Buf[Num]:= #0;
SA>       MessageBox(0, Buf, 'File Stream Test', MB_OK);
SA>     finally
SA>       CloseHandle(hFileStream);
SA>     end;
SA>end;
SA>


SA>--

SA>Всего хорошего, Слава
SA>http://slava.users.otts.ru
Вообще идея хороша, но файл может быть размером до 10 Мб., а твое решение это фактически держать в памяти расшифрованный файл. Мне бы хотелось узнать о том, можно ли перехватить пользовательское обращение к защищаемому файлу на уровне Win API, или это не возможно(придется копать в DDK)?
Re[3]: Защита файла от копирования
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 01.07.04 06:55
Оценка:
_>Вообще идея хороша, но файл может быть размером до 10 Мб., а твое решение это фактически держать в памяти расшифрованный файл.
а где Slava такое написал? нет не так

_>Мне бы хотелось узнать о том, можно ли перехватить пользовательское обращение к защищаемому файлу на уровне Win API, или это не возможно(придется копать в DDK)?

только через фильтр, т.е. только через DDK . и в поиске это есть
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: Защита файла от копирования
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 01.07.04 07:53
Оценка:
Hello white_znake, you wrote:

> Вообще идея хороша, но файл может быть размером до 10 Мб., а твое

> решение это фактически держать в памяти расшифрованный файл.

Нет. Это запись/чтение на диск. В NTFS файлы — набор атрибутов.
Среди них выделяется такой атрибут — как основной поток (возможно я
напутал с названиями, но это не важно, смысл тот же). Так вот, основной
поток — это то, что мы привыкли считать файлом. Но никто не мешает создать
дополнительные потоки, что и делает мой код.
Прикол собственно в том, что функция GetFileSize возвращает размер
основного потока (какой функцией узнать размер всех потоков — не знаю).
Поэтому если смотреть размер файла из проводника, far или т.п. то кажется,
то размер файла остался прежним.

--
Всего хорошего, Слава
http://slava.users.otts.ru
Posted via RSDN NNTP Server 1.9 beta
Re[4]: Защита файла от копирования
От: SergH Россия  
Дата: 01.07.04 09:09
Оценка:
Здравствуйте, Slava Antonov, Вы писали:

SA>Прикол собственно в том, что функция GetFileSize возвращает размер

SA>основного потока (какой функцией узнать размер всех потоков — не знаю).

Одной функции, вроде, нет, их перебрать можно. См. функции Stg*.
Делай что должно, и будь что будет
Re[5]: Защита файла от копирования
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 01.07.04 09:18
Оценка:
SH>Одной функции, вроде, нет, их перебрать можно. См. функции Stg*.
ну и пример от русиновича:
http://www.sysinternals.com/ntw2k/source/misc.shtml#streams
... << Rsdn@Home 1.1.4 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.