Как правильно использовать библиотеку Detour в C ++ для простого перехвата функции с известным адресом памяти?

У меня проблемы с тем, чтобы получить свой первый крюк, используя объезд на работу. Я использую Detour 3.0.

Мой код компилируется нормально, и я могу ввести DLL с помощью Winject , однако функция, которую я предполагаю перехватить, похоже, не перехвачена. Я пытаюсь подключить функцию InsertDateTime в блокнот.
http://www.9injector.com/winject-injector/

Я нашел адрес InsertDateTime в шестнадцатеричной записи, используя IDA Pro Free.

Есть ли какие-либо ошибки в области матки в приведенном ниже коде или память в процессе не является кератиной в одно и то же время при каждом вызове?

Мой код для внедренной DLL можно увидеть ниже:

 // dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <windows.h>
#include "detours.h"#pragma comment(lib, "detours.lib")
//

int(__stdcall* InsertDateTime)(int) = (int(__stdcall*)(int))(0x0100978A);
int MyInsertDateTime(int x) //Our function
{
//Messagebox
MessageBox(NULL, TEXT("InsertDateTime Just Got Called"), TEXT("InsertDateTime"), MB_OK);
return InsertDateTime(x); //Return the origional function
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call) //Decide what to do
{
case DLL_PROCESS_ATTACH: //On dll attach
//InsertDateTime = (int (__stdcall*)(int))DetourAttach((PVOID*)0x0100978A, MyInsertDateTime);
//MessageBox(NULL, TEXT("InsertDateTime Just Got Called"), TEXT("InsertDateTime"), MB_OK);
DetourAttach((PVOID*)(&InsertDateTime), (PVOID)MyInsertDateTime);
//if(!errorCode) {
//Detour successful

break;
case DLL_THREAD_ATTACH: //On thread attach
DetourAttach((PVOID*)(&InsertDateTime), (PVOID)MyInsertDateTime);
break;
case DLL_THREAD_DETACH: //On thread detach
break;
case DLL_PROCESS_DETACH: //on process detach
DetourDetach((PVOID*)0x0100978A, InsertDateTime);
break;
}
return TRUE;
}

Также код в основном взят из старого урока с использованием Detour 1.5.
Ссылка: http://www.moddb.com/groups/ibepex/tutorials/function-hooking

1

Решение

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

DetourTransactionBegin();
DetourAttach(...);
DetourAttach(...);
DetourTransactionCommit();

Я думаю, что это было введено в 2.0, что объясняет, почему ваш учебный код для 1.5 не включает его.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector