Рассуждения носят теоретический характер.. Вопрос про защиту программы - шароварность к примеру. Допустим что есть какая-то функция которая расчитывает по некоторому алгориму значение. Трубется зашитить сам алгоритм (предполагается что в нем вся ценность). А воспользоваться может только пользователь, который ввел пароль. Допустим что в программе реализована функция симметричного шифрования блоков. После ввода пароля пользователем расшифровывается функция подсчета, после чего она вызывается при работе программы, пока не ввел пароль, - функция находится в зашифрованном виде и нетрудоспособна. Вопрос: как это можно реализовать? Запрограммировать функцию дешифрования блоков, найти адрес в памяти текущего процесса где располагается зашифрованная процедура, расшифровать эту память, после чего функция становится рабочей. В чем трудности могут быть? Как при компиляции программы быть с защищаемой функцией? оставить ее как есть, а потом спец. патчем зашифровать тот блок? (найти смещения, спроецировав файл в память?) ..??
в фасме можно при компиляции шифровать часть бинарника так что можно в фасме сделать .obj c нужной шифрованной функцией и прилинковать его к проге на другом ЯП можно экспортировать нужную функцию из .ехе, это даст ее точку входа, и зашифровать с самом бинарнике внешней утилитой, таблицу экспорта потом можно удалить можно вынести функцию в длл, и шифровать целиком всю секцию кода длл - загружать и расшифровывать
Так, хотелось бы внести конкретику... рабочие модули и процедуры - на делфях (можно конечно в С переписать, но очень долго). Хотелось бы без использования ДЛЛ. Что все так просто? Нашел указатель на нужную процедуру, отмапил файл в память, зашифровал. В момент выполнения проги ищу тот же указатель, расшифровываю блоки памяти и получают рабочий код? Неужели нет никаких трудностей?... Кто-нибудь на практике проделывал нечто подобное?
Не забудь про аттрибуты записи на секцию кода А в остальном да, никаких сложностей нет. Самым сложным будет найти процедуру и зашифровать ее. А расшифровка - как 2 байта переслать
Код (Text): begin asm JMP @next1 DB 'begin_signature' @next1: end; // кодес asm JMP @next2 DB 'end_signature' @next2: end; end; Потом в программе находишь PE заголовок, из него узнаешь начало кода и размер кода, циклически (если надо шифровать не один участок) ищешь в памяти begin_signature и расшифровываешь (предварительно сделав VirtualProtect) до end_signature. При шифровании отдельной утилью после компиляции сигнатуры также все упрощают.
Всем спасибо.. Как начну писать код, сообщу (вдруг кому это будет интересно в подробностях...) ПС: всем спасибо, все получилос.. (ну простой вариант)...А остальное - дело техники )