Защита ПО

Nov 28, 2006 03:05

Автор: Вырва В.Е.

Снова начал писать программу. Прога будет работать как клиент к СУБД FireBird, причем база можентбыть как централизованная, так и локальная (через Embeded). Про схему работы с базой могу рассказатьпоздее, если интересно Хочу там сделать "свободную регистрацию".

Есть задача ограничить распространение ПО. Так как оно может уйти в другие фирмы, а это уже неесть хорошо. Для защиты хочу сделать такую схему:
1) Програмам вычисляет Hash от ФИО на кого регистрируется, добавляется данные по железу (ID винатс системой) и высылается регистратору.
2) Регистратор создаешь код регистрации, в котором есть что-то от инсталяционного кода и естьнабор чисел которые будут использовать для проверки и работе ПО, например 2-3 группы по 4-е числа втакой схеме:
-1: закодированная схема работы ПО
-2: дополнение до суммы
-3: закодированная схема работы ПО
-4: дополнение до суммы
То есть каждая группа в сумме дает определенное число, которое и будет использовать для проверкина клиенте, но эта проверка только для отвода глаз взломщику.
Что такое "закодированная схема работы ПО"? Это некоторое число, которое после применениянекоторой функции дает определенное число. Здесь самое вкусное - та функция, которая применяется кчислу. Используются функции у которых результат не растет при возвростании аргумента, напрмер sin,cos, и остаток от деления. Пример чисел: 16, 28, 40, ... 244. Пример функции: "f(x)=(x div 12)-3".Результат: всегда равен 1, а это число можно использовать в формулах при вычислениях. Если взломщикчто первая проверка на сумму и есть ОСНОВНАЯ проверка, то эта функция от сгенерированный взломщикомрегистрационного ключа будет давать ни никак не 1, а все что угодно, и в результате после вычислениярезультат будет непредсказуем
Таким образом в каждую группу можно внедрить по 2-а числа на которые будет опираться ПО привыполнении вычислений, вторые два генерируется случайным образом, для получения нормальной суммы.
Такой результат работы, а именно полная чушь в отчетах вычесленных программой является достаточнымдля защиты ПО, так как самое важное в работе ПО - построение отчетов, которые заполняютсявычесленными значениями.
Как Вам такой метод защиты?

P.S. Последний месяц работал по 12-ть часов в командировке, поэтому не имел нормально времени для написания сюда

Комментарии:
.nornad said...
Если честно, то лично я мало что понял. :)
Но возникли некоторые вопросы:
а) Я так понял, генератор ключей будет сделать труднее. А как насчёт создания патча, который просто заблокирует все эти проверки и организацию чуши в отчётах?
б) Что такое база со свободной регистрацией?
в) Где будет расположена та самая функция, вычисления секретного числа на основе ключа? Если на стороне клиента, то её ведь тоже можно декомпилить. А ежели на сервере, то нужна связь через интернет, что далеко не всегда воспринимается пользователями нормально. Я, например, очень не люблю, если прога самостоятельно лезет в инэт, ничего мне про это не говоря. Я такие проги как минимум блокирую, а часто и просто удаляю сразу же.
6:02 PM, Ноябрь 28, 2006    Вырва В.Е. said...
Ответы:
а) Проверка будет одна, на корректность суммы групп чисел, ну и пускай отключають :)
Организация чуши - при выполнении вычеслений для отчета будут использоваться вычисления с числами из определенных групп, причем обращение будет к элементу массива, а знаить отливить его будет сложнее (нужно будет ставить брейки на каждую ячейку массива)
б) Прога ставиться всем, но требует регистрации. Коннектится к базе, на этом этапе можно либо использовать уже существующего пользователя, либо создать нового.
С настройками по-умолчанию все проекты видны на чтение всем, и на запись определенным. Для особо скрытных можно поставить галочку скрыть свой проект от других.
в) программа пишется для внутреннего пользованя, так что все это будет производиться определнным человеком, который за нее ответственен. Да и вообще он числиться программистом, это моя мама :))
6:15 PM, Ноябрь 28, 2006    .nornad said...
В общем, сильно понятнее не стало :)
Что за комплекс, для чего, зачем защищать, почему мама? :)
6:27 PM, Ноябрь 28, 2006    Вырва В.Е. said...
Программа: "Определение объемов теплоизоляционных работ для оборудования и трубопроводов систем теплоснабжения в разделах: тепловые сети, тепловые пункты, котельные".
Защишать для того что бы не утащили на другое предприятие, вручную считать - запаришься.
Почему мама - потому что я ей сделал эту прогу, да и числиться она там программером, для того и диплом получала.
6:31 PM, Ноябрь 28, 2006    Stranger said...
Несколько идей, пришедших в голову:

1) В качестве Hardware ID можно взять серийный номер винта
2) Можно вынести код программы в DLL, которую можно запаковать и зашифровать, и потом грузить собственным загрузчиком. Такая DLL не будет видна в списке используемый программой DLL, так как ее грузит самописный загрузчик, который не сообщает системе, какие DLL он загрузил. В entry point этой DLL можно положить защитный код, который может просчитывать контрольную сумму кода программы в адресном пространстве (при подсчете нужно учитывать fixup'ы), + еще туда можно много чего положить, что усложнить взломщикам жизнь. Для защиты DLL от дампа ("фотографирования" ее образа в памяти), можно портить таблицу импорта DLL, затирать заголовки DLL (после загрузки они уже не нужны), в общем есть много антидамповых средств.
3) Использовать всякие хитрые алгоритмы для проверки того, являеться ли программа взломанной или нет (например, сети Петри)
4) "Замусорить" код программы или сделать его труднодизассемблируемым
5) Написать протектор/криптор исполняемых файлов или купить готовый.
7:45 PM, Ноябрь 28, 2006    Eugene OS said...

вот интересная ссылка - по методам защиты от дебагеров, и т.п. и методам обода таки защит.

12:18 AM, Ноябрь 30, 2006  
eugene_os said...
кроме того, как я понял - защита от того, чтобы не стянули с работы. т.е тот кто пользуется будет иметь рабочий ключ к своему железу, далее копируем прогу, анализируем код, смотрим что вычисляется сумма. Ага. сумма значит вычисляется - я бы сделал тупую заплатку принимающую любую сумму и на всякий случай подсунул тот ключ, что работал на зарегистрированной проге - вуаля.
(короче говоря, предусмотрите такой вариант, а так идейка прикольная, сам о чем-то похожем думал)
2:31 AM, Декабрь 04, 2006    Вырва В.Е. said...
прочитал статьи с 7 по 15-ю части. Местами читал по диагонали, но старался читать вникая :)
Там описывается следующее:
1) процессор 8086 - защита и взлом ПО
2) процессор 80386, 80486 - защита и взлом ПО
3) Большинство защищенных не способно работать в Windows, а часть и в DOS со включенными
драйверами расширенной памяти (если не ошибся)
4) Очень подробно расписывается работа с hiew 6.03 (если не ошибся)
5) описывается работа с BoundChecker от NuMega
6) Описываются кратко примеры взломов его прог и примеры взлома чющых прог.
!7) В части 15 есть пример взлома "FDR 2.1", и ее метод защиты похож на предложенный мной, причем
я предполагаю использование частей ключа в процессе вычислений результатов работы программы.

Алгоритмы по вычислению Install_ID и Activate_ID, приведу чуть позднее когда их проработаю.
2:57 PM, Декабрь 04, 2006  
eugene_os said...
знаю, что дока старовата, но насколько могу судить, очень многое актуально до сих пор. покрайней мере при взломе защит ключем. Более того IDA, например, прописывает все имена функций API,MFC,VCL,NET и их параметров. что позволяет читать чужой код, достаточно сносно его понимая.
то же самое, вроде бы делает SoftICE,
но божиться не буду(работал с ним мало - предпочитаю править exe-шник а не память )
а так как видел пост, а потом увидал статью решил - может пригодится человеку. Ежели пользы для тебя ноль - извини Валера, хотел как лучше. ;-)
9:50 PM, Декабрь 04, 2006  
Вырва В.Е. said...
Да, получилось так, что пользы именно при разработке этой программы - ноль, но статьи интересные, но я все таки понял что большинство защит сейчас уже не работает, при описании защит были описания того что только некоторые будут работать под Windows NT.
Да и описывались старые средства взлома (на сколько я понял).
В общем вывод: статья интересная, но асмомо я не очень увлекаюсь, и в прогу врятли смогу его не только красиво, но и хотябы правильно вставить. :(
10:14 AM, Декабрь 05, 2006

защита, старый блог

Previous post Next post
Up