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