AfxCodeHook Example - Inject Executable

Post date: Oct 17, 2010 10:48:20 PM

{

Inject Exe Demo

by Aphex

This program demonstrates more of InjectLibraryEx's

true power. The ability to inject EXE files. This means

that the EXE you inject can be stored somewhere encrypted

or compressed and then later it can be loaded into memory

and executed. Or as this program does, it can inject itself

into another application. The target application will show

no signs of the injection.

}

program InjExe;
uses
  Windows,
  afxCodeHook;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  BytesRead, Module, Process, Size: dword;
  Path: array [0..MAX_PATH] of char;
  Data: pointer;
function ExtractFileName(FileName: string): string;
begin
  while Pos('\', FileName) <> 0 do Delete(FileName, 1, Pos('\', FileName));
  while Pos('/', FileName) <> 0 do Delete(FileName, 1, Pos('/', FileName));
  Result := FileName;
end;
begin
  //check our location
  if lstrcmpi('notepad.exe', pchar(ExtractFileName(ParamStr(0)))) = 0 then
  begin
    MessageBox(0, 'hello from notepad :)', 'afxCodeHook', 0);
    ExitThread(0);
  end;
  //create process to inject into
  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StartInfo, ProcInfo);
  //get the dll data to inject
  Process := ProcInfo.hProcess;
  GetCurrentDirectory(MAX_PATH, Path);
  Module := CreateFile(pchar(ParamStr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  Size := GetFileSize(Module, nil);
  GetMem(Data, Size);
  ReadFile(Module, Data^, Size, BytesRead, nil);
  CloseHandle(Module);
  //get it boi
  InjectLibrary(Process, Data);
  FreeMem(Data);
end.