Inject.dpr
上传用户:hndmjx
上传日期:2014-09-16
资源大小:3369k
文件大小:2k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. program Inject;
  2. uses
  3.   Windows,
  4.   afxCodeHook;
  5. {$R *.RES}
  6. {$R 'res.res' 'res.rc'}
  7. procedure ExtractResourceToFile( ResName, ResExtract: String);
  8. var
  9.   ResourceLocation: HRSRC;
  10.   cFileHandle, cResourceDataHandle: THandle;
  11.   cResourceSize, cBytesWritten: Longword;
  12.   cRecourcePath, cResourcePointer: PChar;
  13. begin
  14.   cRecourcePath := PChar( ResExtract );
  15.   ResourceLocation := FindResource (HInstance,PChar(ResName),RT_RCDATA);
  16.   cResourceSize := SizeofResource(HInstance,ResourceLocation);
  17.   cResourceDataHandle := LoadResource(HInstance,ResourceLocation);
  18.   cResourcePointer := LockResource(cResourceDataHandle);
  19.   cFileHandle := CreateFile(cRecourcePath,GENERIC_WRITE,FILE_SHARE_WRITE,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  20.   WriteFile( cFileHandle, cResourcePointer^, cResourceSize,cBytesWritten,nil);
  21.   CloseHandle( cFileHandle );
  22. end;
  23. procedure injectDll;
  24. var
  25.   StartInfo: TStartupInfo;
  26.   ProcInfo: TProcessInformation;
  27.   BytesRead, Module, Process, Size: dword;
  28.   Path: array [0..MAX_PATH] of char;
  29.   Data: pointer;
  30. begin
  31.   ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  32.   StartInfo.cb := SizeOf(TStartupInfo);
  33.   startinfo.dwFlags:= STARTF_USESHOWWINDOW;
  34.   startinfo.wShowWindow := SW_HIDE;
  35.   CreateProcess(nil, PAnsiChar('notepad'), nil, nil, False, 0, nil, nil, StartInfo, ProcInfo);
  36.   //get the dll data to inject
  37.   Process := ProcInfo.hProcess;
  38.   GetCurrentDirectory(MAX_PATH, Path);
  39.   Module := CreateFile(pchar('MyDll.dll'), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  40.   Size := GetFileSize(Module, nil);
  41.   GetMem(Data, Size);
  42.   ReadFile(Module, Data^, Size, BytesRead, nil);
  43.   CloseHandle(Module);
  44.   //inject the DLL using the Ex method
  45.   InjectLibrary(Process, Data);
  46.   FreeMem(Data);
  47.   halt;
  48.   WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  49. end;
  50. begin
  51. InjectDll();
  52. end.