[ВИДЕО] Простейшая функция подключения с IDA, обходы и C + +
В этом уроке мы будем делать самые основные функции подключения использованием Detours 1,5 , IDA, OllyDbg или любого другого дизассемблера или отладчика (я буду использовать IDA для этого урока, как это наиболее очевидный споссоб, чтобы увидеть вначале функции мы хотим подключить ) и некоторые C + +. Наша цель программы это
Простейшая функция подключения с IDA, обходы и C + +
Код:
#include <Windows.h>
#include <iostream>
double function(double arg)
{
std::cout << "Function: Much easier to find me this way! " << arg << std::endl;
return arg;
}
void function2()
{
std::cout << "Function2: This is function2." << std::endl;
}
int main()
{
for(;;)
{
Sleep(2500);
function(3.14);
Sleep(2500);
function2();
}
return 0;
}
После того как мы собрали выше исходный код, мы собираемся открыть его в IDA и в поиске строк выберите Вид-> Открыть подвиды-> Shift + F12. функции,которые мы намерены подключить будут описаны в гайде
Код:
double function(double arg)
Таким образом, в строчке Просмотр поиска
Код:
Function: Much Easier to find me this way
[Ссылки могут видеть только зарегистрированные пользователи. ]
Дважды щелкните по нему, и он должен открыть в новой вкладке IDA-Вид на сегмент данных (сегмент данных содержит глобальные и статические переменные, используемые в программе, которые инициализируются. ) нашей программы.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Снова дважды щелкните на строке и IDA приведет нас к функции где строка, которую мы искали, была перекрещена ссылками @ sub_4013CC +16 ч байт. Таким образом, наши
Код:
Function: Much Easier to find me this way
начинается с адреса 0x4013CC.
[Ссылки могут видеть только зарегистрированные пользователи. ]
После того как мы нашли адрес, по которому наша функция начинается, пора подключить его, мы сделаем это с помощью обходных путей. Создайте новый проект библиотеки DLL в IDE на ваш выбор. Используйте этот источник,
Код:
#include <windows.h>
#include <detours.h>
#include <iostream>
#define ADDRESS 0x40133C //This is the address where our targeted function begins
double (__cdecl* originalFunction)(double); //Pointer to the function we are going to hook, must be declared same as original(returns double and takes double as argument)
/*Our modified function code that is going to be executed
before continuing to the code of original function*/
double hookedFunction(double a)
{
std::cout << "original function: argument = "<< a << std::endl; //we can access arguments passed to original function
a=50.1337; //Modify arguments
return originalFunction(a); //before returning to normal execution of function
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
originalFunction = (double(__cdecl*)(double))DetourFunction((PBYTE)ADDRESS, (PBYTE)hookedFunction); //Magic
break;
}
return TRUE;
}
Собрать и заинжектить таким инжектором как Winject, и если вы все сделали правильно, вы должны получить это,
[Ссылки могут видеть только зарегистрированные пользователи. ] [Ссылки могут видеть только зарегистрированные пользователи. ]//Переводby mr.ChesT
Последний раз редактировалось RChesteR; 27.03.2012 в 19:55.