Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
21 / 21 / 4
Регистрация: 30.01.2011
Сообщений: 119

Защитить файл от копирования

05.05.2012, 00:17. Показов 7828. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
файл .doc
подскажите что можно сделать чтобы файл нельзя было скопировать.
(чтобы его можно было просматривать только на флешке через мою программу т.е. моя программа запускает этот файл)
Возможно его следует поместить в ресурсы, но для просмотра его надо сохранять на диск...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.05.2012, 00:17
Ответы с готовыми решениями:

Коммерческо-тайное ПО: защитить exe-файл
Разрабатываю для фирмы ПО. Недаано начальство сказало, дескать надо от конкурентов защититься, что бы они не смогли, имея exe-шник, понять...

защитить от копирования
мне нужно защитить от копирования программу,саму программу я сделала это цифровая подпись dsa.создаю файл data. компилирую оба файла и...

защитить от копирования
здравствуйте очень нужна помощь.на программу нужно сделать защиту от копирования.программу я написала сдала и вот теперь нужно на эту...

8
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.05.2012, 02:00
Как вариант пусть программа шифрует его каким то шифром, а когда надо расшифровывает.
Дополнительно можно поменять атрибут файла на скрытый.
Файл можно будет найти и скопировать, но инфа в нем будет нечитаема
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.05.2012, 03:14
В любом случае будет создан или временный файл, или участок памяти, в котором будет ваш супер секретный файл.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
05.05.2012, 07:17
Да, можно запихать его в ресурсы и открывать своей программой прямо из оперативки, но что мешает кому-то скопировать саму программу? Защита паролем? Тогда куда как проще прямо из Word'a запаролить файл.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.05.2012, 07:25
И потом хранить пароль от файла в программе ? Или на бумажке, которую тайно предавать каждому следующему пользователю ?

Файл с картинками? Содержимое файла секретно?
Смысл? Зачем мне копировать файл, если после открытия в ворде я могу просто скопировать текст ?

Запрет/блокировка доступа к директории, файлу

Для того, чтобы запретить любые обращения к файлу (на время работы программы) используйте код:
C++
1
CreateFile("c:/t.txt",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Проверено на Windows XP
1
21 / 21 / 4
Регистрация: 30.01.2011
Сообщений: 119
05.05.2012, 09:40  [ТС]
проясню ситуацию

Файл мне надо показать с флешки человеку, причем он не должен знать что там стоит пароль. и если он захочет этот файл скопировать себе (текст он не будет копировать т.к. расчитывает что достаточно скопировать файл), то у него этот файл не откроется.

Думаю поместить файл в ресурсы и проверять откуда файл запускается, если не с моего компа или не с моей флешки, то просить пароль.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.05.2012, 12:56
Как я понимаю поместить в ресурсы значит запихать его в exe-шник.
0
21 / 21 / 4
Регистрация: 30.01.2011
Сообщений: 119
05.05.2012, 14:29  [ТС]
Avazart, как я понимаю его надо поместить в exe файл.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.05.2012, 14:35
Как засунуть файл в ресурсы и достать его оттуда
(например *.wav или *.exe).

Самый простой способ включить какой-либо файл в ресурсы, это добавить в файл описания ресурсов (*.rc) строку
C++
1
ResurceName ТИП_РЕСУРСА "Имя файла"
Здесь:
ResurceName - уникальное имя ресурса, им мы будем пользоваться, когда будем загружать ресурс. В принципе здесь может стоять и числовой индентификатор ресурса (можно и определенный через #define, но тогда необходимо, чтобы из того места кода, где мы будем грузить ресурс, это определение тоже было видно; в таком случае обычно эти определения выносятся в заголовочный файл ресурсов- для них (файлов) принято использовать расширение *.rh).
ТИП_РЕСУРСА - идентификатор типа ресурса. RCDATA - специальный тип для бинарных ресурсов (грубо говоря, массив байт лежит как есть). *.wav тоже можно объявить как RCDATA, но принято его "регистрировать" как WAVE.
"Имя файла" - полное имя подключаемого файла вместе с расширением (директории разделяются одиночным '\').

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

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

Вот пример кода:
C++
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
    //Получаем хэндл модуля (исполняемого файла, *.exe или *.dll), в
    // котором лежит ресурс. NULL означает модуль, ассоциированный
    //с текущим процессом, хотя в этом случае можно сразу вызывать
    //FindResource, передавая первым параметром NULL,
    // а под VCL можно использовать глобальную HInstance
    HMODULE hMod=GetModuleHandle(NULL);
    // если ресурс лежит в другом файле, то параметр для GetModuleHandle
    // можно получить с помощью LoadLibrary(...);
    if(!hMod) {
        //Обработка ошибки
    }
    //Получаем дескриптор информационного блока нашего ресурса
    HRSRC hRes=FindResource(hMod,"ResurceName",RT_RCDATA);
    //Если ResurceName не было определено как число, то ResurceName
    //берется в кавычках. Иначе надо (LPSTR)ResurceName
    //Если тип ресурса был задан как WAVE, то последний параметр должен
    // быть "WAVE" - в кавычках!
    if(!hRes){
        //Обработка ошибки
    }
    //Теперь загружаем ресурс в память, получая дескриптор загру-
    //женного блока памяти.
    HGLOBAL hGlob=LoadResource(hMod,hRes);
    //Опять же, для ресурса в "текущем" модуле, первым параметром можно
    //передавать NULL
    if(!hGlob) {
        //Обработка ошибки
    }
    //И, наконец, последнее - получаем указатель на начало массива
    BYTE *lpbArray=(BYTE*)LockResource(hGlob);
    if(!lpbArray) {
        //Обработка ошибки
    }
Мы представили ресурс как массив байт - и можем делать с ним то, что хотели. Записать на диск как файл: (способов куча, я использую те функции, к которым привык)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//где то наверху должны быть подключены
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
 
    //Получаем размер массива (размер файла)
    DWORD dwFileSize=SizeofResource(hMod,hRes);
    if(!dwFileSize) {
        //Обработка ошибки
    }
 
    int
    hFile=open("AnyFileName",O_BINARY|O_CREAT|O_WRONLY,S_IWRITE);
 
    if(k==-1) {
        //Обработка ошибки
    }
    if(write(hFile,lpbArray,dwFileSize)==-1) {
        close(hFile);
        //Обработка ошибки;
    }
    close(hFile);
Проиграть ресурс, (если, конечно, это был *.wav файл; причем не важно, как мы его объявляли - WAVE или RC_DATA)
C++
1
2
3
4
5
6
7
//где то наверху должен быть подключен
#include <mmsystem.h>
 
    DWORD fdwSound=SND_NOSTOP | SND_ASYNC | SND_NODEFAULT | SND_MEMORY;
    PlaySound(lpbArray, hMod, fdwSound);
    // в контексте данного топика важным является флаг SND_MEMORY:
    // образ звука храниться в памяти
Под "// Обработка ошибки" подразумевалось некоторое сообщение, если хочется, и, главное, НЕ выполнение последующего кода, иначе, в лучшем случае, при последующих вызовах функций API будут возвращаться ошибки (NULL), а могут случиться и более плачевные последствия
В приведенном коде использовались только функции API Windows и из стандартной сишной библиотеки, поэтому все должно работать и под VC, и под Builder'ом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2012, 14:35
Помогаю со студенческими работами здесь

Защитить программу от копирования
Привет коллеги программисты! Нужен совет от опытных кодеров. Хочу написать одну программулину, что она будет делать - не важно, но важно...

Защитить проект от копирования
Гуру, подскажите, в ноде хоть какая-та защита от кражи возможна? Пишу минисайт-&quot;инструмент отладки&quot; (под задачи фирмы). ...

Как защитить DVD-R от копирования?
Уважаемые форумчане! Подскажите, как можно защитить DVD-R от копирования, с помощью каких прог это можно сделать?

Как защитить программу от копирования
Как защитить программу от копирования?

Защитить папку от копирования паролем
Вообщем, лазил в просторах инета, искал решение проблемы. Нужно защитить папку от копирования паролем таким образом, чтобы пароль был с...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 15.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru