hook

Iniciado por flony, 1 Septiembre 2014, 01:09 AM

0 Miembros y 1 Visitante están viendo este tema.

flony

hola estaba leyendo un vieja pagina de este foro
http://foro.elhacker.net/programacion_general/hooks_que_son-t120555.0.html
en el hay un ejempo de hook
#include <windows.h>
#include <stdio.h>

void HookMsgBox();
int __stdcall MessageBoxA_Detour(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);

void main()
{
  HookMsgBox();
  MessageBox(0, "HOLA", "MUNDO", 0);
  printf("fin del programa");
}

void HookMsgBox()
{
  HMODULE MySelf = GetModuleHandle(0);
  HMODULE User32 = GetModuleHandle("User32.dll");
  DWORD Msg = (DWORD)GetProcAddress(User32, "MessageBoxA");
  PIMAGE_DOS_HEADER Img = (PIMAGE_DOS_HEADER)MySelf;
  PIMAGE_NT_HEADERS Pe  = (PIMAGE_NT_HEADERS) ((BYTE*)Img + Img->e_lfanew);
  LPDWORD ImportAddr = (LPDWORD)((DWORD)Pe->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + (DWORD)Img);
  DWORD old;
  VirtualProtect(ImportAddr, 0x1000, PAGE_READWRITE, &old);     
  for (int x = 0; x < Pe->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size; x += 4, ImportAddr++)
  {
    LPDWORD ImportFnc = (LPDWORD)((DWORD)*ImportAddr + (DWORD)MySelf);
    if (*ImportFnc == Msg)
    {
      *ImportFnc = (DWORD)&MessageBoxA_Detour;
    }
  }
}

int __stdcall MessageBoxA_Detour(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
  printf("%s - %s\r\n", lpText, lpCaption);
  return 0;
}

pero me salen estos errores
Citar1>------ Operación Compilar iniciada: proyecto: hook, configuración: Debug Win32 ------
1>  Source.cpp
1>c:\users\administrador\documents\visual studio 2012\projects\hook\hook\source.cpp(13): error C2664: 'MessageBoxW' : no se puede convertir el parámetro 2 de 'const char [5]' a 'LPCWSTR'
1>          Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\administrador\documents\visual studio 2012\projects\hook\hook\source.cpp(20): error C2664: 'GetModuleHandleW' : no se puede convertir el parámetro 1 de 'const char [11]' a 'LPCWSTR'
1>          Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\administrador\documents\visual studio 2012\projects\hook\hook\source.cpp(27): warning C4018: '<' : no coinciden signed/unsigned
========== Compilar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========
ya probe con CString y no me funciono y con std::string::c_str pero no se usarlo bien, alguna ayuda
si un problema no tiene solucion entonces no es un problema...es algo inevitable

Eternal Idol

#1
Llama a las funciones ANSI explicitamente (MessageBoxA, GetModuleHandleW) o configura tu programa para que sea ANSI y no Unicode.

PD. Normalmente te diria que usaras L"CADENA" para Unicode pero tendrias que cambiar el hook a la funcion MessageBoxW y los parametros del hook que son ANSI ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón