Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 19-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Lo prometido es deuda:
Código Delphi [-]
// ModName: dll donde se encunetra la funcion
// ProcName: Nombre de la funcion
// Nuevo: Direccion de la nueva funcion
function HookFunction(ModName, ProcName: PChar; Nuevo: Pointer): Pointer;
var
  i: Integer;
  hProcess: THandle;
  hModules: array[0..1024] of HMODULE;
  cbNeeded: DWORD;
  hMod: HMODULE;
  ImportDesc: PIMAGE_IMPORT_DESCRIPTOR;
  Size: Cardinal;
  szModName: PChar;
  Thunk: PPointer;
  MBI: MEMORY_BASIC_INFORMATION;
begin
  Result:= nil;
  // Obtenemos el handle de la dll donde se encuentra la funcion original
  hMod:= GetModuleHandle(ModName);
  if hMod <> 0 then
  begin
    // Obtenemos la direccion de la funcion original
    Result:= GetProcAddress(hMod, ProcName);
    if Result <> nil then
    begin
      // Obtenemos el handle del proceso
      hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION  or PROCESS_VM_READ,
        FALSE, GetCurrentProcessId);
      if hProcess <> 0 then
      begin
        // Enumeramos cada uno de los modulos que tiene cargados el proceso
        if EnumProcessModules(hProcess, @hModules, Sizeof(hModules), cbNeeded) then
          for i:= 0 to (cbNeeded div Sizeof(HMODULE)) - 1 do
          begin
             // Obtenemos la seccion import, que es una array de estructuras
             // del tipo IMAGE_IMPORT_DESCRIPTOR, terminado por una estructura
             // con todos sus campos a cero
            ImportDesc:= ImageDirectoryEntryToData(Pointer(hModules[i]),
              TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, Size);
            if ImportDesc <> nil then
            begin
              // Recorremos el array hasta llegar al elemento con todos
              // los campos a cero.
              while ImportDesc.Name > 0 do
              begin
                // Obtenemos el nombre del modulo importado
                szModName:= PChar(hModules[i] + ImportDesc.Name);
                // Lo comparamos con el que buscamos
                if StrIComp(szModName,ModName) = 0  then
                begin
                  Thunk:= Pointer(hModules[i] + ImportDesc.FirstThunk);
                  // Recorremos cada una de las funciones de ese modulo
                  while Thunk^ <> nil do
                  begin
                    // Si coincide con la que buscamos
                    if Thunk^ = Result then
                    begin
                      OutputDebugString(PChar(String(ProcName) + ': ' + 'Hookeado'));
                      // Obtenemos algunos parametros sobre la memoria
                      VirtualQuery(Thunk,MBI,Sizeof(MEMORY_BASIC_INFORMATION));
                      // Desprotegemos la zona de memoria donde esta
                      // guardada la direccion de la funcion original
                      VirtualProtect(MBI.BaseAddress,MBI.RegionSize,PAGE_READWRITE,
                        MBI.Protect);
                      // Reemplazamos la direccion de memoria de la funcion actual
                      // por la direccion de memoria de nuestra funcion
                      Thunk^:=  Nuevo;
                      // Volvemos a proteger esa zona de memoria
                      VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,
                        MBI.Protect);
                    end;
                    inc(Thunk);
                  end;
                end;
                inc(ImportDesc);
              end;
            end;
          end;
      end;
    end;
  end;
end;
Espero que se entienda ...
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
delphi y ms messenger `````` alejo000 Internet 9 16-02-2009 19:16:02
Grabar Messenger Avellas Internet 15 29-06-2007 01:14:47
Jugando con los numeros seoane La Taberna 3 14-01-2007 15:34:15
messenger por comandos Cosgaya Varios 0 01-02-2006 12:58:17
Jugando Al Golf Bicho Humor 0 19-01-2006 11:51:52


La franja horaria es GMT +2. Ahora son las 22:14:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi