下面的注入代码是网络上找到的,在32位系统上可以注入,但是在 64位win7上无法注入,谁能帮忙修改下?{ 注入远程进程 } 
function InjectTo(const Host, Guest: string; const PID: DWORD = 0): DWORD; 
var 
  { 被注入的进程句柄,进程ID} 
  hRemoteProcess: THandle; 
  dwRemoteProcessId: DWORD; 
 
  { 写入远程进程的内容大小 } 
  memSize: DWORD; 
 
  { 写入到远程进程后的地址 } 
  pszLibFileRemote: Pointer; 
 
  iReturnCode: Boolean; 
  TempVar: DWORD; 
 
  { 指向函数LoadLibraryW的地址 } 
  pfnStartAddr: TFNThreadStartRoutine; 
 
  { dll全路径,需要写到远程进程的内存中去 } 
  pszLibAFilename: PwideChar; 
begin 
  Result := 0; 
  { 设置权限 } 
  EnabledDebugPrivilege(True); 
 
  { 为注入的dll文件路径分配内存大小,由于为WideChar,故要乘2 } 
  Getmem(pszLibAFilename, Length(Guest) * 2 + 1); 
  StringToWideChar(Guest, pszLibAFilename, Length(Guest) * 2 + 1); 
 
  { 获取进程ID } 
  if PID > 0 then 
     dwRemoteProcessID := PID 
  else 
     GetMyProcessID(Host, False, dwRemoteProcessID); 
 
  { 取得远程进程句柄,具有写入权限} 
  hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程} 
      PROCESS_VM_OPERATION + {允许远程VM操作} 
      PROCESS_VM_WRITE, {允许远程VM写} 
      FALSE, dwRemoteProcessId); 
 
  { 用函数VirtualAllocex在远程进程分配空间,并用WriteProcessMemory中写入dll路径 } 
  memSize := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR); 
  pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, memSize, MEM_COMMIT, PAGE_READWRITE)); 
  TempVar := 0; 
  iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, TempVar); 
 
  if iReturnCode then 
  begin 
    pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW'); 
    TempVar := 0; 
    { 在远程进程中启动dll } 
    Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar); 
  end; 
 
  { 释放内存空间 } 
  Freemem(pszLibAFilename); 
end;

解决方案 »

  1.   

    你要写成64位dll才能注入64位的EXE
      

  2.   

    64位的句柄都是long,你的类型定义也要跟着改
      

  3.   

    32位dll,对64位程序“基本”无效别折腾了,换VC吧
      

  4.   

    exe和dll都是32位的。只是在64位系统上运行
      

  5.   

    CreateRemoteThread  这一个函数基本上程序在杀毒软件面前就活不了了
      

  6.   

    难道就没有高手说说64位DLL注入吗
      

  7.   

    我也遇到同样的问题,难道Delphi真的杯具了?