Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Ayuda reemplazando una funcion existente con SetCompleteHook - DLL  (Visto 910 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline gambasoxd Posteado: July 10, 2024, 10:29:18 PM | Modificado: July 11, 2024, 12:06:14 PM by gambasoxd

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 86
  • Gracias recibida: 2541
  • pe
Problematica:
No se que ando haciendo mal, soy nuevo en esto de assembler y librerias shared, asi que me resulta un poco confuso, entenderia que deberia de funcionar pero no lo hace

Tengo estos defines como contexto:

Code: [Select]
#define pMapNumber				    *(int*)0x0118EDF8
#define pDrawMessage                ((char(__cdecl*)(LPCSTR Text, int Mode)) 0x0059CDA0)
#define sub_6217A2                  ((int (*) ()) 0x006217A2)

El main es de Season 8, versión del archivo 1.5.7.0, version del producto 1.0.0.1

Este es el código que ando haciendo:

Code: [Select]
#include <iostream>

#include "Util/stdafx.h"
#include "Util/Util.h"
#include "Util/s8/define.h"

constexpr bool MODE_DEBUG = true;

int AddGlobalMessage()
{
    int result = sub_6217A2();
   
    if (pMapNumber == 94)
    {
        pDrawMessage("Mensaje de prueba", 0);
    }
   
    return result;
}

BOOL APIENTRY DllMain(HMODULE hModule, const DWORD ul_reason_for_call, LPVOID lpReserved)
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
        if (MODE_DEBUG)
        {
            if (CreateConsole())
            {
                std::cout << "Se cargo el DLL correctamente!" << '\n';
            }
            else
            {
                MessageBoxA(nullptr, "Algo fallo al crear la consola", "Error", MB_OK | MB_ICONERROR);
            }
        }
        SetCompleteHook(0xE9, 0x006217A2, &AddGlobalMessage);
    }

    return TRUE;
}

Screenshots:




Para cualquier consulta aqui dejo mi información:

CONTACTO

Gracias:


Marcado como mejor respuesta por: gambasoxd Posteado July 11, 2024, 08:05:49 AM

Offline gambasoxd #1 Posteado: July 11, 2024, 12:05:31 PM

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 86
  • Gracias recibida: 2541
  • pe
hola problema solucionado :D

Solución:
cambie el define por __stdcall

Code: [Select]
#define sub_6217A2                  ((int (__stdcall*) ()) 0x006217A2)

y le agrege __stdcall a la funcion hook

Code: [Select]
int __stdcall AddGlobalMessage()

Segundo use las funciones de memorycpy para copiar el resultado original y setearle el resultado final

Code: [Select]
#include <iostream>

#include "Util/stdafx.h"
#include "Util/Util.h"
#include "Util/s8/define.h"

constexpr bool MODE_DEBUG = true;

BYTE originalCode[5];

int __stdcall AddGlobalMessage()
{
    // Restaurar el codigo original antes de ejecutar la funcion original
    MemoryCpy(0x006217A2, originalCode, 5);

    // Llamar a la funcion original y obtener su resultado
    int result = sub_6217A2();

    // Adicionamos la parte custom del hook
    if (pMapNumber == 94)
    {
        pDrawMessage("Mensaje de prueba", 0);
    }

    // Devolvemos el resultado que por defecto devuelve
    return result;
}

BOOL APIENTRY DllMain(HMODULE hModule, const DWORD ul_reason_for_call, LPVOID lpReserved)
{
    // Se valida si el DLL fue correctamente cargado
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
        // Valida si estamos en modo DEBUG
        if (MODE_DEBUG)
        {
            // Se crea la consola para mandar mensajes debug
            if (CreateConsole())
            {
                std::cout << "Se cargo el DLL correctamente!" << '\n';
            }
            else
            {
                // En caso no se haya creado la consola sale un mensaje de error
                MessageBoxA(nullptr, "Algo fallo al crear la consola", "Error", MB_OK | MB_ICONERROR);
            }
        }
       
        // Guardar el codigo original antes de instalar el hook
        MemoryCpy((DWORD)originalCode, (void*)0x006217A2, 5);

        // Establecer el hook en el offset 0x006217A2 con el opcode 0xE9 (JMP) y la funcion hook AddGlobalMessage
        SetCompleteHook(0xE9, 0x006217A2, &AddGlobalMessage);
    }

    return TRUE;
}

Para cualquier consulta aqui dejo mi información:

CONTACTO

Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
1 Replies
1564 Views
Last post November 17, 2016, 11:53:28 PM
by malon2k
4 Replies
3554 Views
Last post December 18, 2018, 02:50:34 PM
by Cloud
5 Replies
2442 Views
Last post May 18, 2020, 04:52:48 PM
by EmmaDCG
0 Replies
1813 Views
Last post February 10, 2021, 09:18:53 AM
by takumi12
0 Replies
459 Views
Last post October 09, 2021, 12:21:32 AM
by nemesis28