Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Как детектить хуки на вызовах WINAPI?

  • Автор темы Автор темы XenoFob
  • Дата начала Дата начала
Лама - бох, ты - лох
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
14 Янв 2019
Сообщения
405
Реакции
59
Парни, такое дело: пишу дллку, дллка привязана к жестаку и для проверки серийника жестака юзает GetVolumeInformation.
Проблема: если посмотреть в список импортов этой длл, то GetVolumeInformation просто сама лезет в глаза. Собственно потенциальный мамкин хацкер, увидев эту функцию может написать длл, которая бы хукала вызов GetVolumeInformation и подменяла серийник на нужный хацкеру.
Вопрос: как от этого можно защититься? Можно как то скрыть импорт GetVolumeInformation? Или может как то можно детектить хуки на данную функцию?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Используй скрытые функции.
Пример:
C++:
Expand Collapse Copy
typedef HRESULT(WINAPI*nD3DXCreateFont)(
    LPDIRECT3DDEVICE9       pDevice,
    INT                     Height,
    UINT                    Width,
    UINT                    Weight,
    UINT                    MipLevels,
    BOOL                    Italic,
    DWORD                   CharSet,
    DWORD                   OutputPrecision,
    DWORD                   Quality,
    DWORD                   PitchAndFamily,
    LPCSTR                  pFaceName,
    LPD3DXFONT*             ppFont);

HRESULT MyD3DXCreateFont(LPDIRECT3DDEVICE9 pDevice, INT Height, UINT Width, UINT Weight, UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, DWORD Quality, DWORD PitchAndFamily, LPCSTR pFaceName, LPD3DXFONT * ppFont)
{
    nD3DXCreateFont nFunc;
    DWORD Address = (DWORD)this->HidetLibraryProcAddress(XorStr("D3DX9_43.dll"), XorStr("D3DXCreateFontA"));
    nFunc = (nD3DXCreateFont)(Address);
    return nFunc(pDevice, Height, Width, Weight, MipLevels, Italic, CharSet, OutputPrecision, Quality, PitchAndFamily, pFaceName, ppFont);
}
 
если ты хочешь просто из списка импортов убрать, то юзай GetProcAddress, мог бы и загуглить, кек
url:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Ну, "мамкин хацкер" скорее всего будет использовать jmp (0xE9) инструкцию в начале хука, как вариант проверять это.
Ещё как вариант сравнивать локальную библиотеку и ту что в памяти.
 
Используй скрытые функции.
Пример:
C++:
Expand Collapse Copy
typedef HRESULT(WINAPI*nD3DXCreateFont)(
    LPDIRECT3DDEVICE9       pDevice,
    INT                     Height,
    UINT                    Width,
    UINT                    Weight,
    UINT                    MipLevels,
    BOOL                    Italic,
    DWORD                   CharSet,
    DWORD                   OutputPrecision,
    DWORD                   Quality,
    DWORD                   PitchAndFamily,
    LPCSTR                  pFaceName,
    LPD3DXFONT*             ppFont);

HRESULT MyD3DXCreateFont(LPDIRECT3DDEVICE9 pDevice, INT Height, UINT Width, UINT Weight, UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, DWORD Quality, DWORD PitchAndFamily, LPCSTR pFaceName, LPD3DXFONT * ppFont)
{
    nD3DXCreateFont nFunc;
    DWORD Address = (DWORD)this->HidetLibraryProcAddress(XorStr("D3DX9_43.dll"), XorStr("D3DXCreateFontA"));
    nFunc = (nD3DXCreateFont)(Address);
    return nFunc(pDevice, Height, Width, Weight, MipLevels, Italic, CharSet, OutputPrecision, Quality, PitchAndFamily, pFaceName, ppFont);
}
Эм, а можно код самой HidetLibraryProcAddress, а то так мало что понятно?

если ты хочешь просто из списка импортов убрать, то юзай GetProcAddress, мог бы и загуглить, кек
url:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Хм, интересно, спасибо.

А что за XorStr()? Я типо понимаю, что это скрытие строки, но как это работает? Как winapi воспринимает ксоренные строки?
 
Эм, а можно код самой HidetLibraryProcAddress, а то так мало что понятно?


Хм, интересно, спасибо.

А что за XorStr()? Я типо понимаю, что это скрытие строки, но как это работает? Как winapi воспринимает ксоренные строки?
да адекватно( почти ), главное не юзай xor в std::string, ибо эта параша выделяет память под себя
url:
Пожалуйста, авторизуйтесь для просмотра ссылки.

url:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
если ты хочешь просто из списка импортов убрать, то юзай GetProcAddress, мог бы и загуглить, кек
url:
Пожалуйста, авторизуйтесь для просмотра ссылки.
А можешь еще рассказать поподробней про сокрытие с помощью GetProcAddress? Т.е. сначала я подтягиваю либу с помощью LoadLibrary, потом с помощью GetProcAddress получаю ее адресс, а потом как вызвать эту функцию?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а потом как вызвать эту функцию?
логично, что по адресу, который ты получаешь из GetProcAddress, не?
также рекомендую обфусцировать поинтеры и переписать используемые win api функции под себя и обфусцировать их
 
Назад
Сверху Снизу