Всем привет!
Решил написать статью про рантайм линковку.
Рантайм линковка позволяет избавиться от таблицы импортов, тем самым немного затруднит анализ кода реверс инженерами.
Для реализации всего этого, вам не потребуется особых знаний, достаточно иметь под рукой документацию Microsoft.
Рассмотрим на примере функции MessageBoxA.
Для реализации нам понадобиться несколько вещей.
1. Синтаксис.
2. DLL в которой содержится наша функция (MessageBoxA).
Документация для MessageBoxA:
Теперь можно начать писать код.
Для начала нам требуется сделать указатель на функцию (typedef).
Теперь можно объявить HMODULE, который будет содержать базовый адрес DLL.
Теперь нужно загрузить DLL "User32.dll", в которой содержится функция, и получить адрес функции (MessageBoxA).
Теперь можно вызвать функцию и освободить библиотеку.
Успешно!
Для удобства, я вывел всё это в отдельную void функцию и добавил xor.
Аналогично всё делается и с другими функциями.
Таблица импортов:
Кому лень переписывать вручную, добавил архив с готовыми функциями.
Решил написать статью про рантайм линковку.
Рантайм линковка позволяет избавиться от таблицы импортов, тем самым немного затруднит анализ кода реверс инженерами.
Для реализации всего этого, вам не потребуется особых знаний, достаточно иметь под рукой документацию Microsoft.
Рассмотрим на примере функции MessageBoxA.
Для реализации нам понадобиться несколько вещей.
1. Синтаксис.
2. DLL в которой содержится наша функция (MessageBoxA).
Документация для MessageBoxA:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
Теперь можно начать писать код.
Для начала нам требуется сделать указатель на функцию (typedef).
C:
typedef int(__stdcall MesBoxa)(HWND, LPCSTR, LPCSTR, UINT);
C:
HMODULE hUser32;
MesBoxa* MessageBoxA;
C:
hUser32 = LoadLibraryA("user32.dll");
MessageBoxA = (MesBoxa*)GetProcAddress(hUser32, "MessageBoxA");
C:
MessageBoxA(NULL, "Hello World!", "test~", MB_OK);
FreeLibrary(hUser32);
Успешно!
Для удобства, я вывел всё это в отдельную void функцию и добавил xor.
C:
void MessageBoxL(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
HMODULE hUser32 = LoadLibraryA(_xor_("user32.dll").c_str());
MesBoxa* MessageBoxA = (MesBoxa*)GetProcAddress(hUser32, _xor_("MessageBoxA").c_str());
MessageBoxA(hWnd, lpText, lpCaption, uType);
FreeLibrary(hUser32);
}
Аналогично всё делается и с другими функциями.
Таблица импортов:
Кому лень переписывать вручную, добавил архив с готовыми функциями.