Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-01-2018
Milworm99 Milworm99 is offline
Miembro
 
Registrado: Nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Injectar recurso DLL en memoria en un en proceso externo

Hola con todos, Tengo un problema, mi DLL que eta guardado como recurso dentro de memoria, pero lo que quiero es que esa DLL guardada en Memoria llamarla para poder injectar a un proceso.

Para gurdar la DLL en memoria estoy que utilizo un modulo llamado 'BTMemoryModule.pas'

Este es mi código que uso

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, BTMemoryModule, ExtCtrls,TlHelp32;

type
  TForm1 = class(TForm)
    lbl1: TLabel;
    btn1: TButton;
    Injectar: TTimer;
    procedure InjectarTimer(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  HookLib: PBTMemoryModule = nil;
  pDisableItem: procedure(Key: integer; disable: integer) stdcall = nil;
  pRestoreAll : procedure stdcall = nil;


implementation

{$R *.dfm}
function LoadLibraryFromResource(const aResourceName: String): PBTMemoryModule;
   var
      ms: TMemoryStream;
      rs: TResourceStream;
   begin
      ms := TMemoryStream.Create;
      try
         rs := TResourceStream.Create(HInstance, aResourceName, RT_RCDATA);
         try
            ms.CopyFrom(rs, 0);
            ms.Position := 0;
         finally
            rs.Free;
         end;

         Result := BTMemoryLoadLibary(ms.Memory, ms.Size);
      finally
         ms.Free;
      end;
   end;

function GetPID(ProcessName: string): DWORD;
var MyHandle: THandle;
Struct: TProcessEntry32;
begin
Result:=0;
try
MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Struct.dwSize:=Sizeof(TProcessEntry32);
if Process32First(MyHandle, Struct) then
if Struct.szExeFile=ProcessName then
begin
Result:=Struct.th32ProcessID;
Exit;
end;
while Process32Next(MyHandle, Struct) do
if Struct.szExeFile=ProcessName then
begin
Result:=Struct.th32ProcessID;
Exit;
end;
except on exception do
Exit;
end;
end;

function Hook(PIDWORD; sDll:string):Boolean;
var
hLib: Pointer;
hThread: THandle;
pMod: Pointer;
hOpen: THandle;
dWritten: Cardinal;
ThreadID: Cardinal;
begin
Result := FALSE;
hOpen := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if hOpen <> INVALID_HANDLE_VALUE then
begin
hLib := GetProcAddress(GetModuleHandle(PChar('kernel32.dll')), PChar('LoadLibraryA'));
pMod := VirtualAllocEx(hOpen, nil, Length(sDll) + 1, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if WriteProcessMemory(hOpen, pMod, @sDll[1], Length(sDll), dWritten) then
Result := TRUE;
hThread := CreateRemoteThread(hOpen, nil, 0, hLib, pMod, 0, ThreadID);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hOpen);
CloseHandle(hThread);
end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
// Abrir DLL //
   HookLib := LoadLibraryFromResource('WallName');                           

   if Hooklib <> nil then
   begin
      @pDisableItem := BTMemoryGetProcAddress(HookLib, 'wlDisableItem');  
      @pRestoreAll  := BTMemoryGetProcAddress(HookLib, 'wlRestoreAll');   
   end;
end;

procedure TForm1.InjectarTimer(Sender: TObject);
var PID: DWORD;
begin
Injectar.Enabled:=False;
PID:=GetPID('Update.exe');
if PID=0 then
begin
Injectar.Enabled:=True;
Exit;
end;
Injectar.Enabled:=False;
if Hook(PID, 'WallName') then //// DLL al injectar ///
lbl1.Caption:= 'DLL Injectado...!!!';
end;
end.

Lo que me gustaria hacer es que la DLL guarda como recurso en memoria llamada "WallName" se injecte al proceso externo llamada "Update.exe"

Espero su ayuda, muchas gracias !!

Última edición por Casimiro Notevi fecha: 01-01-2018 a las 12:59:49.
Responder Con Cita
  #2  
Antiguo 09-01-2018
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.717
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
"Injectar". Madre del amor hermosa...

¿Qué es lo que pretendes hacer? ¿Un virus, un troyano, un entrenador...? Aunque no incumple la Guía de estilo, me da a mi que lo que pides no es muy ético.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Detectar proceso externo MacStreet Varios 1 15-11-2017 09:14:41
Como injectar una dll en un proceso y trabajar con funciones del mismo? Alejo15x Varios 1 10-02-2010 20:10:07
Como inyectar código directamente a un proceso externo rolandoj API de Windows 19 28-01-2009 01:36:30
Thread y servidor DCOM externo al proceso ( EXE ) Aldo OOP 1 15-09-2006 17:39:47
memoria de proceso sqlservr davidgaldo MS SQL Server 3 22-12-2004 14:07:10


La franja horaria es GMT +2. Ahora son las 12:53:20.


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