一个进程注入源程序,但有问题!内详(刘麻子,我需要你)(100分)

  • 主题发起人 主题发起人 guest8188
  • 开始时间 开始时间
G

guest8188

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFrmMain.Button2Click(Sender: TObject);
var
pe32 : TProcessEntry32;
dwRemoteProcessId,kernelDll : HWND;
hProcessSnap,hRemoteProcess,hRemoteThread1,RemoteThreadId : THandle;
te :AnsiString;
pszLibFileName : string;
pszLibFileRemote ,fnStartAddr: Pointer;
cb : integer;
NumberOfBytes : DWORD;
b : Boolean;
begin
b:=false;
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hProcessSnap = -1 then
begin
ShowMessage('创建"CreateToolhelp32Snapshot"出错!');
Exit;
end;

pe32.dwSize := SizeOf(TProcessEntry32);

if Process32First(hProcessSnap,pe32) then
begin
te := pe32.szExeFile;
if (Pos('iexplore.exe',te)=0) and (Pos('IEXPLORE.EXE',te)=0) then
begin
while Process32Next(hProcessSnap,pe32) do
begin
te := pe32.szExeFile;
if (Pos('iexplore.exe',te)>0) or (Pos('IEXPLORE.EXE',te)>0) then
begin
dwRemoteProcessId := pe32.th32ProcessID;
b:=true;
break;
end;
end;
end else
begin
b:=true;
end;
end;
if not b then
begin
showmessage('未找到IEXPLORE.EXE进程!');
Exit;
end;

hRemoteProcess:=OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,FALSE,dwRemoteProcessId);

pszLibFileName:= GetCurrentDir+'/'+'ServiceDll.Dll';
if Not FileExists(pszLibFileName) then
begin
showmessage('Dll文件不存在!');
Exit;
end;
// cb := (1+Length(pszLibFileName)) * SizeOf(Char);//计算dll文件名长度
cb := (Length(pszLibFileName)) * SizeOf(Char);//计算dll文件名长度

pszLibFileRemote := VirtualAllocEx(hRemoteProcess,nil,cb,MEM_COMMIT,PAGE_READWRITE);

if Not WriteProcessMemory(hRemoteProcess,
pszLibFileRemote,
@pszLibFileName,
cb,
NumberOfBytes) then
begin
Showmessage('写入内存出错!');
Exit;
end;
kernelDll := GetModuleHandle('kernel32.dll');
fnStartAddr := GetProcAddress(kernelDll,'LoadLibraryA');
hRemoteThread1 := CreateRemoteThread(hRemoteProcess,
nil,
0,
fnStartAddr,
@pszLibFileName,
0,
RemoteThreadId);
if(hRemoteThread1 <> 0) then
CloseHandle(hRemoteThread1);//关闭远程线程
if(hProcessSnap <> 0 ) then
CloseHandle(hProcessSnap);//关闭进程快照
end;
 
光给一段代码,,又没说明问题在哪里.我想别人帮不了你.
 
把问题说清楚
关键部分注明一下
 
不好意思,是我太激动了.
问题是进程注入不成功!
if Not WriteProcessMemory(hRemoteProcess,
pszLibFileRemote,
@pszLibFileName,
cb,
NumberOfBytes) then
begin
Showmessage('写入内存出错!');
Exit;
end;
就是上面不起做用.返回结果到是True,但是就是没注入进去.
 
刘麻子也出国了[:D]
 
不会吧.
就算是.网络无国界啊!
 
你看看文件名有没有写进远程进程
要不然就是你创建远程线程不成功。。。
 
后退
顶部