Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование скрытых частей программы

416
02 января 2008 года
MaitreDesir
380 / / 02.01.2008
Есть проблема, очень старая - защита программы от нелегального копирования путем использования скрытой части программы. Сделал такую утанавливающую программу, которая через 256 байт от конца проверяющей программы записывает символ "0". Как в проверяющей программе прочитать этот байт (на паскале это делалось BlockRead-BlockWrite). Я сделал так:
- Открываю файл
- Перехожу в его конец
- Перехожу на 256 байт вперед
- Читаю 1 байт.
Агоритм не работает. Почему - не знаю. Если кто знает как это сделать или сталкивался с этой проблемой - помогите.
У самого три предположения:
а) Напутал с переходами
б) При переходе он не переходит дальше конца файла - надо его переписать на чтонибудь
в) Возможно это просто не работает на NTFS
1.6K
02 января 2008 года
Vov4ick
476 / / 01.02.2007
Это называется оверлей. Когда ты переходишь в конец открытого файла, ты попадаешь именно в конец, а не на 256-й байт от конца. Никакие дополнительные перемещения не нужны.
416
02 января 2008 года
MaitreDesir
380 / / 02.01.2008
Наверно я не точно сформулировал, или не понял тебя, Vov4ick. Процесс записи "фага" происходит так:
- Запоминается длина файла
- Размер файла увеличивается на 256 байт
- Файл дополняется байтом (Длинна+257) со значением 30h
- Буфер файла записывается на диск
- Файл обрезается до прежней длины
- Буфер снова записывается на диск
В ФС в таком случае должны (по идее) не стиратся старые данные, если переписываемый файл меньше их по размеру. То есть через 256 байт от конца файла в секторе будет записано 30h, но длина файла останется прежней. Вопрос в том, как потом прочитать этот байт?
1.6K
02 января 2008 года
Vov4ick
476 / / 01.02.2007
Теперь понял) Этот способ будер хоть как-то работать только на FAT, и то когда при дописывании к файлу хвоста, он не перелезет за границу блока. Читается это только дисковыми функциями более низкого уровня, чем работа с файлами, то есть надо самому организовывать работу с файловой системой. По моему мнению, овчинка выделки не стоит, особено если учесть надёжность. Защита обходится простым посекторным копированием всего диска или расковыриванием програмы.
416
02 января 2008 года
MaitreDesir
380 / / 02.01.2008
Это все понятно, но задача стоит несколько иная - особая настройка программы для очччень старых компьютеров. А все таки - как это сделать, а то я уже запутался со смещениями в прогах
1.6K
02 января 2008 года
Vov4ick
476 / / 01.02.2007
Насколько старых? современные машины по своей архитектуре ничем не отличаются от AT 386. Судя по всему ты пишешь под винду-32, на машинах с процессором старше 80386 её быть не может. И что ты имеешь в виду под "настройкой программы" и смещениями?
416
03 января 2008 года
MaitreDesir
380 / / 02.01.2008
Нет, пишу не под винду. Тестю с под винды...
Машина производства "Уральского завода вычислительной техники", на которой Win3.1 струдом поднимается, сидят из под доса с оболочками для регистрации пациентов (больница типа). пишу им небольшую прогу, которая должна знать свои настройки на каждом компе, которую нельзя напрямую копировать и прочее (чтото вроде сертификата личного).
Подскажите плиз, как быстро определить, с какого кластера начинается файл в фат 16, если он лежит в том-же каталоге, что и программа. Может есть какой-то более простой способ, чем полный перебор фат?
1.6K
03 января 2008 года
Vov4ick
476 / / 01.02.2007
Доки про такую защиту где-то пробегали, но без разбора FAT не обойтись. На всякий случай могу поискать у себя. Но в таком случае я бы посоветовал более простую и надёжную защиту. Например по серийному номеру раздела диска, версии БСУВВ, содержимому КМОП-памяти, аппаратной конфигурации и прочая и прочая. Все эти данные узнать очень легко, не более 100 строк на асме. При запуске программы генерим на основе данных о машине некие данные и сравниваем с сохранёнными. В случае несовпадения просим ввести "серийный номер". Сохранять можно в отдельном файле, в самой программе - как в оверлее, так и непосредственно в сегменте данных ехешника или комка. Вариаций может быть очень много, с динамическими алгоритмами, динамически генерируемыми серийниками и ещё много всякого такого, дело фантазии ;-) Я бы этим ограничился, поскольку вряд ли доктора будут сидеть и ковырять программу отладчиком с целью перенести на другую машину.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог