Компилятор сохраняет встроенные функции и значения массива - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь внедрить метод антианализа, при котором некоторые ключевые функции шифруются и дешифруются только перед использованием, а затем снова шифруются. Поэтому моя реализация включает в себя наличие массива, который будет содержать адреса и длину функций, которые внешний криптер будет использовать для идентификации и шифрования указанных функций.

Моя проблема в том, что компилятор продолжает использовать значения в массиве в качестве констант вместо доступ к которому делает криптер неспособным найти функции и т. д., я попробовал несколько вариантов компилятора, но ни один не делает то, что я ищу. Я ищу способ сделать так, чтобы массив функций имел одну копию и не был встроен, потому что в настоящее время.

Редактировать: Компилятор VS2019 Редактировать 2: Уточнение проблемы

1 Ответ

1 голос
/ 12 марта 2020

Массив необходимо экспортировать из двоичного файла, т. Е. Он должен быть символом c, опубликованным в таблице символов исполняемого файла.

На Windows, то есть:

using Function = ...;

__declspec(dllexport) const Function encrypted_functions[] = { f1, f2, ... };

На платформах, отличных от Windows, необходимо использовать золотой компоновщик и убедиться, что символ видим:

#ifdef __cplusplus
extern "C" {
#endif
__attribute__((visibility ("default")) const Functions encrypted_functions[] = ...;
#ifdef __cplusplus
}
#endif

А затем использовать опцию --export-dynamic-symbol=encrypted_functions золотого компоновщика добавить символ в таблицу экспорта (или эквивалент в компоновщике LLVM). Имя может быть искажено, даже если это символ C, поэтому вам нужно использовать objdump, чтобы проверить объектный файл, чтобы увидеть, каково настоящее имя символа этого массива.

Но это все немного глупо, поскольку программа шифрования должна быть частью процесса сборки и напрямую взаимодействовать с объектными файлами. Лучший способ - использовать libObject в комплекте с проектом LLVM. См. исходные файлы , заголовки и некоторую документацию .

...