Перейти к содержанию

Возможно ли сделать такой хук?


Рекомендуемые сообщения

Во общем есть игра, точно известно что при нажатии определенной кнопки в игре она вызывает функцию Func1() из somedll.dll, которая лежит в той же папке что и exe'шник.

Вопрос: Возможно ли перехватить эту функцию с помощью хука на Detours? И если да, то с чего надо начать?

З.Ы. В тему только начинаю въезжать, так что не ругайте, спасибо заранее.

Ссылка на комментарий
Поделиться на другие сайты

>>Вопрос: Возможно ли перехватить эту функцию с помощью хука на Detours? И если да, то с чего надо начать?

Возможно. Начать надо с прокачивания скиллов и качай обязательно карму. Это поможет больше действовать и меньше отвлекаться на вопросы.

Ссылка на комментарий
Поделиться на другие сайты

Ну я понимаю что вы смотрите на меня как на гамно, но есть ли хотя бы минимальный шанс что вы спуститесь с небес, о великие, и реально подскажете мне хотя бы ссылкой или направлением в какую сторону искать?

Ссылка на комментарий
Поделиться на другие сайты

Этот шанс возрастет, если ты опишешь свою проблему максимально подробно. А именно - название игры, версия, игры, длл-ка, из которого хочешь хукнуть функцию, и, собственно, название самой функции. Если же ты не хочешь это делать, причина тут может быть только одна: твоя цель - онлайн игра, взлом которых на нашем ресурсе запрещен. Так что, выхода у тебя два - либо предоставить максимально подробную информацию по игре, либо не получить помощь.

Ссылка на комментарий
Поделиться на другие сайты

Да какая онлайн игра, я просто спрашиваю ибо хочу понять саму суть работы хуков, игры нету во обще ни какой, я просто как пример навел что есть игра, исходя из тематики сего ресурса...

Меня интересует просто сама тема хуков, а то на видео я так понял показали как хукать системные функции, а вот как хукать пользовательские?

Скажем я написал свою "mydll.dll" которая экпортит функцию myfunc1(), и написал exe'шник(простая форма на C++), который импортит эту dll'ку и вот надо перехватить эту самую функцию когда екзешник ее заюзает.

Ну или просто игра Need for Speed Rivals, хочу перехватить функцию "getBuildInfo()" из "Engine.BuildInfo_Win32_retail.dll" если должна быть именно указана игра...

Еще раз повторюсь: взламывать цели нету, есть цель научится пользоватся хуками нормально, очень уж крутая штука которую очень бы хотел освоить...

Ссылка на комментарий
Поделиться на другие сайты

Да какая онлайн игра, я просто спрашиваю ибо хочу понять саму суть работы хуков, игры нету во обще ни какой, я просто как пример навел что есть игра, исходя из тематики сего ресурса...

Меня интересует просто сама тема хуков, а то на видео я так понял показали как хукать системные функции, а вот как хукать пользовательские?

Скажем я написал свою "mydll.dll" которая экпортит функцию myfunc1(), и написал exe'шник(простая форма на C++), который импортит эту dll'ку и вот надо перехватить эту самую функцию когда екзешник ее заюзает.

Ну или просто игра Need for Speed™ Rivals, хочу перехватить функцию "getBuildInfo()" из "Engine.BuildInfo_Win32_retail.dll" если должна быть именно указана игра...

Еще раз повторюсь: взламывать цели нету, есть цель научится пользоватся хуками нормально, очень уж крутая штука которую очень бы хотел освоить...

1) Тебе нужно выяснить какие аргументы принимает функция

2) calling conversion функции

3) Объявить прототип функции

4) Далее всё как с обычным WinAPI или что ты там перехватывал

Ссылка на комментарий
Поделиться на другие сайты

1) Тебе нужно выяснить какие аргументы принимает функция

2) calling conversion функции

3) Объявить прототип функции

4) Далее всё как с обычным WinAPI или что ты там перехватывал

1. Через что это лучше всего узнавать?

2. Понял.

3. Не понял.

Но меня пока что больше сама логика интересует, что в коде нужно заменить что б это все сработало?

Допустим я узнал что:

-Функция принимает следующие параметры: func1(int count);

-Calling convention функции: __stdcall

Какие должны быт мои дальнейшие действия?

З.Ы. Понимаю что вопросы могут показаться нубскими, но что тут поделаешь все ж такими были когда-то.. Но я очень хочу въехать в тему даже если будете меня слать нах..й через каждое слово я все равно хочу все знать :)

Ссылка на комментарий
Поделиться на другие сайты

1. Через что это лучше всего узнавать?

2. Понял.

3. Не понял.

Но меня пока что больше сама логика интересует, что в коде нужно заменить что б это все сработало?

Допустим я узнал что:

-Функция принимает следующие параметры: func1(int count);

-Calling convention функции: __stdcall

Какие должны быт мои дальнейшие действия?

З.Ы. Понимаю что вопросы могут показаться нубскими, но что тут поделаешь все ж такими были когда-то.. Но я очень хочу въехать в тему даже если будете меня слать нах..й через каждое слово я все равно хочу все знать :)

Что тут не понятного?

typedef тип_который_возвращает_фун-я (__stdcall* funcPtr)(int count);

Присваиваешь указателю на функцию значение и дальше всё как с перехватом WinAPI функции.

Ссылка на комментарий
Поделиться на другие сайты

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

З.Ы. Если у кого есть ссылки или прочая инфа с чего бы можно реально было начать вникать в эту тему, был бы рад. Всем спасибо, извеняйте за отнятое время.

Ссылка на комментарий
Поделиться на другие сайты

Ты, во-первых, определись, что ты понимаешь под хуком. Хук на системные функции как ставится - ты уже читал. Тут алгоритм примерно тот же - найти адрес функции, определить передаваемые параметры, подменить адрес оригинальной функции адресом своей функции, и не забыть в теле своей функции вызвать оригинальную. Это все описано в примерах о хуках системных функций.

Длл-ку, в которой находится функция, ты знаешь, имя функции ты знаешь, передаваемые параметры (если это твое приложение) ты тоже знаешь, следовательно, тебе только и остается реализовать хук по аналогии с системным ) Действуй, и все у тебя получится. Если какой-то из этих этапов тебе не понятен, ты скажи, постараемся рассказать подробнее - это ведь и есть наша цель - научить взламывать. Но не думай, что весь код будет написан за тебя. Впрочем, раз ты хочешь понять, как это делается, то, скорее всего, ты так и не думаешь ))

Ссылка на комментарий
Поделиться на другие сайты

Короче молния херанула и пол компа сгорело... слава богам что винт и вся инфа на нем не сгорела... По этому я не мог ответить..

По теме: Вот код кодера который он делал в видео на пример:


#include <windows.h>
#include <detours.h>
DWORD WINAPI Hook_thread(LPVOID);
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
CreateThread(NULL, NULL, Hook_thread, NULL, NULL, NULL);
}
DETOUR_TRAMPOLINE(int WINAPI MessageBoxA_hook(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType), MessageBoxA);
int WINAPI Hooked_MessageBoxA(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
return MessageBoxA_hook(hWnd, "Hooked", "Error", NULL);
}
DWORD WINAPI Hook_thread(LPVOID)
{
::DetourFunctionWithTrampoline((PBYTE) MessageBoxA_hook, (PBYTE) Hooked_MessageBoxA);
ExitThread(1337);
}

Вот допустим я узнал адресс своей функции(0xFFFF555), куда в этом коде его надо вставлять, вместо "int WINAPI MessageBoxA_hook" или где?

Плюс по коду я не совсем понял как именно работает Detours...

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

Ссылка на комментарий
Поделиться на другие сайты

Как хукать с детурсом я уже забыл, но думаю тут всё просто.


DETOUR_TRAMPOLINE(тут полное определение типа перехватываемой функции), тут адрес перехватываемой функции);
Тут определяем тело функции перехватчика:
int WINAPI Hooked_MessageBoxA(....)
{
return оригининальная функция(...);
}

Ссылка на комментарий
Поделиться на другие сайты

"тут полное определение типа перехватываемой функции" это "typedef тип_который_возвращает_фун-я (__stdcall* funcPtr)(int count);" Правильно я понял?

Ну а на счет детурса то что он такое и чем он облегчает жизнь, а то гуглил и там все просто боготворят его... Ну или просто киньте ссыль на русские доки по нему,если есть.

Ссылка на комментарий
Поделиться на другие сайты

"тут полное определение типа перехватываемой функции" это "typedef тип_который_возвращает_фун-я (__stdcall* funcPtr)(int count);" Правильно я понял?

Ну а на счет детурса то что он такое и чем он облегчает жизнь, а то гуглил и там все просто боготворят его... Ну или просто киньте ссыль на русские доки по нему,если есть.

1. Указывать нужно тип функции, поэтому добавлять ключевое слово typedef не нужно.

2. Не за что его боготворить, он облегчает жизнь новичкам, которые не знают как перехватывать функции без детурса.

3. Русской документации нет, не было и не будет.

P.S. Если хочешь программировать, то вообще забудь о русском языке.

Если конечно ты не один из этих... "1C программистов" :-D

Ссылка на комментарий
Поделиться на другие сайты

Инглиш так и не выучил толком что б читать свободно( И знаю что это вселенская печаль для меня..

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

Закончу разбираться с этим буду пробовать хуки и отпишусь о результате.

На разе спасибос за инфу, реально форум у вас, конечно, эпичный.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.