Как встроить и выполнить программу внутри другой, чтобы добавить ключевое лицензирование на C++ ⇐ C++
Как встроить и выполнить программу внутри другой, чтобы добавить ключевое лицензирование на C++
У меня есть старая программа, которую я создал несколько лет назад, и я потерял исходный код, и теперь мне нужно ее продать, и мне нужно создать какую-то оболочку, которая проверяет лицензионный ключ, проблема не в этом. Проблема заключается в его внедрении и выполнении. Я попробовал пару вещей: сначала я внедрил исполняемый файл в массив байтов, извлеченный с помощью функции экспорта HxD.
Я попробовал скопировать программу прямо в память и выполнить ее оттуда, очевидно, это самое сложное, поскольку испортились все зависимости, а в Windows существует строгая политика выполнения из памяти
Предполагая, что байты хранятся в unsigned char programBytes[];, а весь код находится внутри int main() и внутри блока проверки ключа, это для теперь это не имеет значения, поэтому рассмотрим этот пример
bool KEY_VALID = true; if (KEY_VALID){ /* код... */ } Это версия памяти, она не работала, поэтому я ее выбросил.
DWORD old_protect; size_t executableSize = sizeof (programBytes); LPVOID executable_area = VirtualAlloc(NULL, executableSize, MEM_RESERVE, PAGE_READWRITE); VirtualProtect(executable_area, executableSize, PAGE_EXECUTE_READWRITE, &old_protect); memcpy (executable_area, programBytes, executableSize); пустота (* функция) (); func = (void(*)())executable_area; функция(); //
У меня есть старая программа, которую я создал несколько лет назад, и я потерял исходный код, и теперь мне нужно ее продать, и мне нужно создать какую-то оболочку, которая проверяет лицензионный ключ, проблема не в этом. Проблема заключается в его внедрении и выполнении. Я попробовал пару вещей: сначала я внедрил исполняемый файл в массив байтов, извлеченный с помощью функции экспорта HxD.
Я попробовал скопировать программу прямо в память и выполнить ее оттуда, очевидно, это самое сложное, поскольку испортились все зависимости, а в Windows существует строгая политика выполнения из памяти
Предполагая, что байты хранятся в unsigned char programBytes[];, а весь код находится внутри int main() и внутри блока проверки ключа, это для теперь это не имеет значения, поэтому рассмотрим этот пример
bool KEY_VALID = true; if (KEY_VALID){ /* код... */ } Это версия памяти, она не работала, поэтому я ее выбросил.
DWORD old_protect; size_t executableSize = sizeof (programBytes); LPVOID executable_area = VirtualAlloc(NULL, executableSize, MEM_RESERVE, PAGE_READWRITE); VirtualProtect(executable_area, executableSize, PAGE_EXECUTE_READWRITE, &old_protect); memcpy (executable_area, programBytes, executableSize); пустота (* функция) (); func = (void(*)())executable_area; функция(); //
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Лицензирование Android: как сообщить стороннему авторскому праву при выпуске библиотеки
Anonymous » » в форуме Android - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-