saludos compañero ArdiLLa, mira colega, aún me corren dudas por la cabeza,
este es tu código:
Código Delphi
[-]
program Inyector_Proceso;
{$IMAGEBASE $13140000}
uses
Windows,
SysUtils,
Messages;
const
CM_MANDA_TECLA = WM_USER + $1000;
CM_MANDA_SHOW = WM_USER + $1001;
var
ctn: pChar;
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;
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;
var
ProcessHandle, PID: longword;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
Sleep(500);
GetMem(ctn, 200);
GetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
Inject(ProcessHandle, @Main);
CloseHandle(ProcessHandle);
end.
ahora, pienso que lo que haces es inyectar un proceso dentro del proceso que creas al abrir el notepad ¿no?, es decir, reservas un lugar dentro de este proceso Notepad y colocas la funcion Main dentro de este ¿no?,
ahora, esa funcion solo se activa si se le manda un mensaje a su "hilo",
mi siguiente quiestion es:
¿si yo inyecto esta funcion Main dentro del Proceso TaskMgr.exe que yo cree puedo eliminar/obtener información de los Items de SysListView que muestra los procesos?
muchas gracias de antemano,
saludos!