C ++ и обход - PullRequest
       27

C ++ и обход

0 голосов
/ 21 марта 2019

Итак, я начал изучать c ++ в последние несколько дней, так как хотел немного взломать игру и реверс-инжиниринг. Я попытал счастья с помощью базового метода обхода, просто вставив jmp в свою функцию в память моих целевых программ, которая работала нормально. Однако я хотел начать использовать обходную библиотеку Microsoft и попробовал. Моя единственная цель сейчас - регистрироваться каждый раз, когда вызывается функция.

По какой-то причине моя DLL записывает неправильный адрес в память для перехода и, таким образом, вылетает программа.

Прыжок, прикрепленный адрес приводит к пустой памяти

Он пишет на правильный адрес, но просто не переходит на правильное место. Я ОЧЕНЬ новичок в c ++, так что это, вероятно, моя ошибка, но я не могу заставить ее работать.

#include "stdafx.h"
#include <detours.h>
#include <windows.h>
#include <iostream>

DWORD AddressOfFunc;
typedef int (__cdecl* func)(int x);

int hookFunc(int x) {
    std::cout << "TRIGGERED!" << std::endl;

    func originalFunc = (func)AddressOfFunc;
    return originalFunc(x);
}


BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) {
    AddressOfFunc = (DWORD)GetModuleHandleA("Borderlands2.exe") + 0xA18940;
    if (dwReason = DLL_PROCESS_ATTACH) {

        AllocConsole();
        FILE* fp;
        freopen_s(&fp, "CONOUT$", "w", stdout);
        std::cout << "Injected!" << std::endl;

        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());

        DetourAttach((PVOID*)&AddressOfFunc, &hookFunc);
        DetourTransactionCommit();
    }
    else if (dwReason == DLL_PROCESS_DETACH) {
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());

        DetourDetach(&(LPVOID&)AddressOfFunc, &hookFunc);
        DetourTransactionCommit();
    }
}

IdaPro сообщает мне, что функция принимает int и возвращает int, но мне не хватает опыта, чтобы проверить любую эту информацию, поэтому любая помощь будет оценена.

...