Чтобы она запускалась только с флешки, а при копировании на другой носитель становилась неработоспособной. Как это можно реализовать?
Первое, что приходит на ум, это привязка к MBR. А туда в неиспользуемую область можно еще пару байт записать, а в проге проверить всё совпадает или нет.
Проверять, что программа запускается с removable device, + сверять вендора, продукт ид и серийник флешки с эталонными. Только это все лишь до тех пор, пока кому-нибудь действительно не понадобится запустить программу с другого носителя
хранить прогу в зашифрованом виде, ключ - какая-нибудь строка в служебной области - бутсекторе, мбр и др. или серийник флэшки. и написать запускальщик, который будет ее расшифровывать и запускать, а дождавшись завершения - затирать и удалять.
Stariy Так делали программиста еще в 80-x годах, чтобы защитить свои программы от копирования. А затем появилась прога побайтного копирования дискет, и методу пришел абзац. jangle Не лезь в служебную область флешки - УГРОБИШЬ!!! по твоей защите расскажу все на практическом примере: Защита была очень слабой, но есть множество нюансов, учтя которые можно сделать вполне достойную защиту: 1. Не использовать для таких целей стандартные базы данных, тут надо что-то свое. 2. Сбор информации о носителе лучше переложить на компонент защиты уровня ядра. (если возможно) 3. и 4. Эталонный и полученные хэши, не должны сравниваться в целом виде. В моем случае эталонный хэш хранился как строка в базе данных,а процедура сравнения хэшей представляла из себя не более, чем сравнение строк. Это тупо!!! Сравнение хэшей не нужно проводить за одну процедуру, сравнивать их необходимо параллельно с другими задачами это сильно усложнит анализ программы. 5. КОНТРОЛЬ ИСКЛЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ!!! Автор описываемой мною защиты не предусмотрел того, что функция GetVolumeInformation в буфере серийного номера выдает 0, если вызвана без админовских прав, либо если запрашиваемый диск - сетевой. поэтому у него получался хэш и сравнивался с эталонным даже в том случае если серийника на входе небыло вообще. Это позволяло записать в базу нулевой хэш и запускать ее вообще откуда взбрендит. Хорошая защита должна адекватно реагировать на подобные ситуации. Можно даже и не заморачиваться о переносе сбора информации о носителе на уровень ядра. Не всегда это возможно и не всегда это оправдывает себя. Но в остальном промахов быть не должно. Все это не так уж сложно и не требует глубоких знаний архитектуры ОС
А зачем вообще сравнивать хэши? Надо на основании серийного номера генерить ключ, на котором шифровать программу. Тогда уже как минимум нужно купить одну рабочую версию, чтобы сдампить расшифрованный образ
gilg Ну первая-то копия покупается всегда как правило А от сдампливания проги еще никто не умирал (хех кроме самой проги). Тут не в методе дело. Они все слабые по сути. В хорошей защите сильная сторона одного из методов не дает воспользоваться слабой строной другого.
Задача неразрешима и это можно доказать математически. Пусть А - программа, запускающаяся только с определенной флэшки, А2 - программа, выполняющая те же действия, но запускающаяся с любого носителя. Программа А существует по определению. Программа А2 также существует, так как А2 = А - К, где К - код, деляющий возможным запуск только с заданной флэшки. Далее, в фонНемановской архитектуре код также может рассматриваться как данные, следовательно существует программа П, преобразующая А в А2. Весь вопрос лишь в стоимости преобразования А->А2.
Ss_oO0 Да это ежу понятно. Никто и не пытается создать неломаемую защиту. Хорошая защита не значит неломаемая.
А какую защиту можно сделать от сдапливания? По моему, первое что приходит на ум, испортить формат зашифрованного файла.
шифровать отдельные участки кода различными способами. расшифровывается часть кода - выполняется, чтобы несколько участков кода одновременно не были открыты.
Хмм. а если сделать немного по-другому? к примеру, как у вебманей - никто не задумывался? Генерится файл ключей.. и доступ к нему закрывается.. Только там нужно будет извратиться. К примеру, у каждой проги свой идент. И для каждого идента свой файл ключей делается. При установке. Да и такую дуру фиг подберешь.. т.е. для этого не нужно узнавать ни id, никакие суммы в ПЗУ БИОС не нужны. Чем не вариант? Хотя распространить можно до установки, например, но что-то по этому методу сделать вприниципе возможно.