Мой клиент попросил меня написать собственный зашифрованный исполняемый файл, чтобы предотвратить легкое взлома системы лицензирования. Теперь я понимаю, что это ложное чувство безопасности, но, несмотря на это, он настаивал на этом.Выполнить данные как код?
Итак, я откопал свои знания портативных исполняемых файлов и придумал эту идею:
- шифруют исполняемые
- палочка этого к концу загрузчика исполняемого файла вместе с его размером
- The загрузчик расшифровывает данные
- Он копирует код на страницу, выделенную VirtualAlloc, которая имеет права доступа к исполнению
- Он находит точку входа приложения
- Прыжки там, и мы все настроены.
У меня проблема с прыжком с места. Как я могу это сделать? Если бы мне нужно было установить указатель на функцию, какова будет подпись? Подпись функции main() загруженного исполняемого файла? Или мне нужно прибегнуть к сборке?
Я понимаю, что может потребоваться исправление абсолютных адресов после загрузки кода. Как я могу проверить, нужно ли мне и как это сделать?
Редактировать: Работа над окнами и компиляция с помощью GCC. При необходимости я могу переключить компилятор Microsoft.
Редактировать 2: Уточнить: Я ЗНАЮ, что это в основном бессмысленно. Я считаю, что это означает любой тип DRM. Это зависит от моего клиента, и он все еще хочет его, несмотря на то, что я предупреждаю его об этом.
Заранее благодарен.
Ваше типизированное решение в моей точке зрения мало багги, что это ваши функции делают прыжки на другие функции? Они фиксируют другие адреса, и я вижу много проблем с этим решением, например, где находятся статические связанные библиотеки? кто использует encypted code? – Svisstack
Я бы сказал - если вы действительно хотите DRM. Купите его. Зачем? Даже если вы получите «что-то» и работаете. Что вы делаете через полгода, когда его взломали? Продолжение работы с крекеры - это полная работа. –
Это зависит от моего клиента. Мне все равно, если он принимает плохие решения. Я честно предупредил его, и он все еще хочет этого. –