下载了段源程序:一开始就是这么一句:
AttachToProcess('Explorer.exe', extractfilepath(paramstr(0))+'usbdll.dll'); //远程线程插入
不明白是什么意思?
AttachToProcess('Explorer.exe', extractfilepath(paramstr(0))+'usbdll.dll'); //远程线程插入
不明白是什么意思?
解决方案 »
- edit与tupdown联用的问题
- 请求各位大侠的帮忙:点对点通信
- 想通过delphi把已有的dll文件做成com的dll,能被asp调用,哪位高手可以?
- delphi 中如何将gbk转换成unicode并保存下来?
- 小弟急需IBM的Via Voice 语音库,最能读中文的,谁能发给我一份呀
- 找Delphi5开发人员指南附书源码!
- 关于用D6画矢量图的问题
- 散分,求delphi控件Twebbrowser做的网页浏览器源程序!!!
- 怎么才可以把BDE分离出来单独安装~谢谢
- Delphi5企业版升级d5ent_update时,总是出错!但有进会成功!出错后原来的DEPHI5也不能用!如何解决?
- 可逆加密算法有哪些?
- 如何唤醒系统栏里的程序?
-------------------------------------------
不明白,让DLL成为那个进程的一部分又会怎么样?难道那个进程会运行DLL中的代码?可以那个进程本来就没有这部分(运行DLL的代码)啊?
象是把 extractfilepath(paramstr(0))+'usbdll.dll' 注入 Explorer.exe
还是资源管理器调用某个函数的时候先调用这个DLL?
个人怀疑用的是debugactiveprocess
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;