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

Ставим хуки

  • Автор темы Автор темы P45H3
  • Дата начала Дата начала
В игре Source SDK
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,188
Реакции
806
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В этом гайде я расскажу про использование библиотеки detour для сетапа хуков.
Поехали.
Создаём Win32 Dll.
Скачиваем
Пожалуйста, авторизуйтесь для просмотра ссылки.
(клик) с файлами.
После создания проекта добавляем файлы из архива в папку с проектом и в сам проект.
После в файле DllMain подключаем всё файлы
Код:
Expand Collapse Copy
#include <Windows.h>
#include <iostream>
#include "detours.h"
#include "PatternScan.h"

Далее создаём объекты для работы

Код:
Expand Collapse Copy
DWORD FuncAddr= 0;
PatternScan * Scanner = nullptr;

После описываем апиентри дллки
Код:
Expand Collapse Copy
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
//Здесь будет наш паттерн.
FuncAddr = Scanner->FindPattern(" ", " ", " ");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//сетап хука
DetourAttach(&(LPVOID&)FuncAddr, &OurHooked;
DetourTransactionCommit();
}
else if (dwReason == DLL_PROCESS_DETACH)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//снятие хука
DetourDetach(&(LPVOID&)FuncAddr, &OurHooked);
DetourTransactionCommit();
delete Scanner;
}
return TRUE;
}

После этого мы начинаем искать что мы будем хукать.
Допустим у нас есть такое приложение
Код:
Expand Collapse Copy
#include <Windows.h>
#include <iostream>
int FuncToHooked(int a, int b)
{
return a + b;
}

int main()
{
while (true)
{
std::cout << FuncToHooked(5,5) << std::endl;
Sleep(2000);
}
}

Теперь для иды нужно поставить
Пожалуйста, авторизуйтесь для просмотра ссылки.
плагин.
Кидаем в папку Plugins

заходим в IDA 6.8
и ищем нашу функцию.
Вот она:
8632b23bbb6c.png

Далее пкм по ней и Text View
1d67137e6270.png

Видим что-то типо этого
654205a7d6d6.png

Это и есть наша функция.
Выделяем её от типа до retn.
b485740a81a3.png

Далее жмём Edit -> Plugins -> SigMaker
и выбираем второе
e13af51732bf.png
и жмём ОК.

В низу появится паттерн + маска
7a4da758340b.png

Выделаем и идём в студию.
Видим Это
Код:
Expand Collapse Copy
FuncAddr = Scanner->FindPattern(" ", " ", " ");
В первый параметр передаём имя процесса, во второе паттерн, и в 3 маску.

В результате у вас получится примерно это
Код:
Expand Collapse Copy
FuncAddr = Scanner->FindPattern("testprogram.exe", " \x55\x8B\xEC\x8B\x45\x08\x03\x45\x0C\x5D\xC3", "xxxxxxxxxxx");

Всё теперь осталось описать Хук-функцию. Идём вверх(над апиентри) и создаём тайпдеф нашей функции с параметрами(или без) - это мы увидим в IDA.

Хукаемая функция выглядит так:
int __cdecl FuncToHooked(int a, int b)

И наш тайпдеф будет таким
Код:
Expand Collapse Copy
typedef int(*hFunc)(int a, int b);

Далее опишем саму функцию

Код:
Expand Collapse Copy
int OurHooked(int a, int b)
{
a += 100;
b += 50;
hFunc original = (hFunc)FuncAddr;
return original(a,b);
}
Наша хукаемая функция возвращает сумму a , b;
Теперь при хуке будет не 5 + 5, а 105 + 55.

Ну в принципе всё. Для хука void функций делайте так:

Код:
Expand Collapse Copy
typedef LPVOID(*hFunc)(int a, int b);
kek OurHooked(int a, int b)
{
a += 100;
hFunc original = (hFunc)FuncAddr;
return (hFunc)original(a,b);
}

Пробуйте)
 
Последнее редактирование:
Топово, делали бы побольше таких гайдусов
 
В этом гайде я расскажу про использование библиотеки detour для сетапа хуков.
Поехали.
Создаём Win32 Dll.
Скачиваем
Пожалуйста, авторизуйтесь для просмотра ссылки.
(клик) с файлами.
После создания проекта добавляем файлы из архива в папку с проектом и в сам проект.
После в файле DllMain подключаем всё файлы
Код:
Expand Collapse Copy
#include <Windows.h>
#include <iostream>
#include "detours.h"
#include "PatternScan.h"

Далее создаём объекты для работы

Код:
Expand Collapse Copy
DWORD FuncAddr= 0;
PatternScan * Scanner = nullptr;

После описываем апиентри дллки
Код:
Expand Collapse Copy
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
//Здесь будет наш паттерн.
FuncAddr = Scanner->FindPattern(" ", " ", " ");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//сетап хука
DetourAttach(&(LPVOID&)FuncAddr, &OurHooked;
DetourTransactionCommit();
}
else if (dwReason == DLL_PROCESS_DETACH)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//снятие хука
DetourDetach(&(LPVOID&)FuncAddr, &OurHooked);
DetourTransactionCommit();
delete Scanner;
}
return TRUE;
}

После этого мы начинаем искать что мы будем хукать.
Допустим у нас есть такое приложение
Код:
Expand Collapse Copy
#include <Windows.h>
#include <iostream>
int FuncToHooked(int a, int b)
{
return a + b;
}

int main()
{
while (true)
{
std::cout << FuncToHooked(5,5) << std::endl;
Sleep(2000);
}
}

Теперь для иды нужно поставить
Пожалуйста, авторизуйтесь для просмотра ссылки.
плагин.
Кидаем в папку Plugins

заходим в IDA 6.8
и ищем нашу функцию.
Вот она:
8632b23bbb6c.png

Далее пкм по ней и Text View
1d67137e6270.png

Видим что-то типо этого
654205a7d6d6.png

Это и есть наша функция.
Выделяем её от типа до retn.
b485740a81a3.png

Далее жмём Edit -> Plugins -> SigMaker
и выбираем второе
e13af51732bf.png
и жмём ОК.

В низу появится паттерн + маска
7a4da758340b.png

Выделаем и идём в студию.
Видим Это
Код:
Expand Collapse Copy
FuncAddr = Scanner->FindPattern(" ", " ", " ");
В первый параметр передаём имя процесса, во второе паттерн, и в 3 маску.

В результате у вас получится примерно это
Код:
Expand Collapse Copy
FuncAddr = Scanner->FindPattern("testprogram.exe", " \x55\x8B\xEC\x8B\x45\x08\x03\x45\x0C\x5D\xC3", "xxxxxxxxxxx");

Всё теперь осталось описать Хук-функцию. Идём вверх(над апиентри) и создаём тайпдеф нашей функции с параметрами(или без) - это мы увидим в IDA.

Хукаемая функция выглядит так:
int __cdecl FuncToHooked(int a, int b)

И наш тайпдеф будет таким
Код:
Expand Collapse Copy
typedef int(*hFunc)(int a, int b);

Далее опишем саму функцию

Код:
Expand Collapse Copy
int OurHooked(int a, int b)
{
a += 100;
b += 50;
hFunc original = (hFunc)FuncAddr;
return original(a,b);
}
Наша хукаемая функция возвращает сумму a , b;
Теперь при хуке будет не 5 + 5, а 105 + 55.

Ну в принципе всё. Для хука void функций делайте так:

Код:
Expand Collapse Copy
typedef LPVOID(*hFunc)(int a, int b);
kek OurHooked(int a, int b)
{
a += 100;
hFunc original = (hFunc)FuncAddr;
return (hFunc)original(a,b);
}

Пробуйте)
Если писал сам, то несомненно огромный +
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Есть у кого IDA 6.8?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не. Её во фри доступе нету (но это не точно).

Короче вместо паттернсканера можно просто задать адрес функции. В читенджине найди и задай значение переменной DWORD FuncAddr = 0x000000;
где 000000 адрес функции
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не. Её во фри доступе нету (но это не точно).

Короче вместо паттернсканера можно просто задать адрес функции. В читенджине найди и задай значение переменной DWORD FuncAddr = 0x000000;
где 000000 адрес функции
Блять, я не понял нихуя.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не. Её во фри доступе нету (но это не точно).

Короче вместо паттернсканера можно просто задать адрес функции. В читенджине найди и задай значение переменной DWORD FuncAddr = 0x000000;
где 000000 адрес функции
С 2к15 везде валяется
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не. Её во фри доступе нету (но это не точно).
Пожалуйста, авторизуйтесь для просмотра ссылки.

"Сломаем систему" вместе.......
В архиве IdaPro6.8+HexRay, правленые базы под нее, исправленные модули и пару "полезностей" для понимающих
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу