mira aqui el código del que te hablé usando un programa con "interfáz gráfica":
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
const
CM_MANDA_TECLA = WM_USER + $1000;
CM_MANDA_SHOW = WM_USER + $1001;
implementation
{$R *.DFM}
function Main(dwEntryPoint: Pointer): longword; stdcall;
Var Zeta : String;
Msg : TMsg;
Procedure M_Tecla;
Begin
MessageBox(0, 'Esto Funciona de Maravilla, MARAVILLOSAMENTE', 'M_Tecla', 0);
End;
Procedure M_Show;
Begin
Zeta := 'Esto Form ha sido llamado mediante el envio de un mensaje y cerramos el proceso';
MessageBox(0, PChar(Zeta), 'M_Show', 0);
End;
var
x: integer;
begin
while GetMessage(Msg,0,0,0) do
begin
Case MSg.message Of
CM_MANDA_SHOW:
M_Show;
CM_MANDA_TECLA:
Begin
M_Tecla;
ExitProcess(0);
End;
End; End;
ExitProcess(0);
Result := 0;
end;
procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
var
Module, NewModule: Pointer;
Size, BytesWritten, TID: longword;
begin
Module := Pointer(GetModuleHandle(nil));
Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);
Sleep(2000);
MessageBox(0, 'Mando Mensaje CM_MANDA_SHOW', 'Inject', 0);
PostThreadMessage(TID,CM_MANDA_SHOW,0,0);
Sleep(3000);
PostThreadMessage(TID,CM_MANDA_TECLA,0,0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ProcessHandle, PID: longword;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
Sleep(500);
GetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
Inject(ProcessHandle, @Main);
CloseHandle(ProcessHandle);
end;
end.
al pulsar el único botón que situo en el formulario para inyectar el proceso no lo logra,
¿por que?, he probado hacer miles de modificaciones pero no doy con la correcta para esto
¿sabes algo de lo que hablo compadre?