C++ Перехват функции

Начинающий
Статус
Оффлайн
Регистрация
9 Янв 2021
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Есть простая функция
BOOL GetComputerNameW(
LPWSTR lpBuffer,
LPDWORD nSize
);


Есть простая программа)
int main(){
do {
wchar_t computerName[MAX_COMPUTERNAME_LENGTH + 1];
DWORD size = sizeof(computerName) / sizeof(computerName[0]);
GetComputerNameW(computerName, &size);
wprintf(L"Computer name: %ls\n", computerName);
getchar();
} while (1);

И простая hook.dll
BOOL WINAPI new_GetComputerNameW(LPWSTR lpBuffer, LPDWORD nSize) {
char* comp_name = (char*)"BLABLA";
const auto res = orig_comp(lpBuffer, nSize);
wcsncpy(lpBuffer, (wchar_t*)comp_name, *nSize);
*nSize = wcslen(lpBuffer);
return res;
}

И инжектор который по циклу Sleep(1) проверяет CreateToolhelp32Snapshot, находит нужный процесс и туда вставляет hook.dll.

Все работает, НО, программа первый раз выводит информацию без хука.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Толи инжектор не успевает, толи хз
Мне вообще не очень нравится что это делается циклом, есть какой-нибудь способ иньектить дллку при запуске нужного процесса?
 
Начинающий
Статус
Оффлайн
Регистрация
1 Дек 2020
Сообщения
35
Реакции[?]
2
Поинты[?]
0
Неа. Но можешь на плюсах написать функцию. которая будет обновлять каждый раз твою программу.
 
Начинающий
Статус
Оффлайн
Регистрация
1 Дек 2020
Сообщения
35
Реакции[?]
2
Поинты[?]
0
Какую? Которую надо инжектить?)
Нет. Пишешь либу на С++ или на ассемблере (лучше 2) которая будет каждый раз, обновлять хук и саму программу. Если поподробнее, реверсишь свою прогу. Узнаешь адрес начала программы (именно программы) допустим у нее адрес 0x05656553. После этого пишешь на ассемблерной вставке прыжок по этому адресу. И каждый раз обновляешь его после прыжка, если тебе этому нужна потребность.
 
Начинающий
Статус
Оффлайн
Регистрация
1 Дек 2020
Сообщения
35
Реакции[?]
2
Поинты[?]
0
Сверху Снизу