下载了段源程序:一开始就是这么一句:
AttachToProcess('Explorer.exe', extractfilepath(paramstr(0))+'usbdll.dll');    //远程线程插入
不明白是什么意思?

解决方案 »

  1.   

    所谓DLL注入就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分。要实现DLL注入,首先需要打开目标进程。 
    -------------------------------------------
    不明白,让DLL成为那个进程的一部分又会怎么样?难道那个进程会运行DLL中的代码?可以那个进程本来就没有这部分(运行DLL的代码)啊?
      

  2.   

    这个应该是他自己写的函数
    象是把 extractfilepath(paramstr(0))+'usbdll.dll' 注入 Explorer.exe
      

  3.   

    注入到“资源管理器”,那资源管理器什么情况下会执行这个DLL呢?
    还是资源管理器调用某个函数的时候先调用这个DLL?
      

  4.   

    总该有个function AttachToProcess吧?这个API貌似没有现成的可用……
    个人怀疑用的是debugactiveprocess
      

  5.   

    //远程线程插入
    function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD = 0): DWORD;
    var
      hRemoteProcess: THandle;
      dwRemoteProcessId: DWORD;
      cb: DWORD;
      pszLibFileRemote: Pointer;
      iReturnCode: Boolean;
      TempVar: DWORD;
      pfnStartAddr: TFNThreadStartRoutine;
      pszLibAFilename: PwideChar;
    begin
      Result := 0;
      EnabledDebugPrivilege(True);
      Getmem(pszLibAFilename, Length(GuestFile) * 2 + 1);
      StringToWideChar(GuestFile, pszLibAFilename, Length(GuestFile) * 2 + 1);
      if PID > 0 then
         dwRemoteProcessID := PID
      else
         FindAProcess(HostFile, False, dwRemoteProcessID);
      hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程}
          PROCESS_VM_OPERATION + {允许远程VM操作}
          PROCESS_VM_WRITE, {允许远程VM写}
          FALSE, dwRemoteProcessId);
      cb := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);
      pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb, MEM_COMMIT, PAGE_READWRITE));
      TempVar := 0;
      iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, cb, TempVar);
      if iReturnCode then
      begin
        pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW');
        TempVar := 0;
        Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);
      end;
      Freemem(pszLibAFilename);
    end;
      

  6.   

    哦,这个代表dll被注入进去,然后你可以用GetProcAddress动态调用dll当中的函数,定位地址,创立远程线程等,这类东西看雪上有比较详细的解释,楼主可以参考