怎么判断是哪个程序执行某个程序?
因为现在很多后门程序或木马,经常是有好几个分身,删了这个,另一个又把它恢复了.
于是就想到写这种程序。
1.监视哪个目录 或 程序被哪个程序写入/更改 或 是被执行
2.监视注册表被写入了什么?
[解决办法]
API hook
[解决办法]
//通过父进程 ID判断
uses TlHelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
vSnapshot: THandle;
vProcessEntry32: TProcessEntry32;
begin
vSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
vProcessEntry32.dwSize := SizeOf(TProcessEntry32);
Process32First(vSnapshot, vProcessEntry32);
repeat
if vProcessEntry32.th32ProcessID <> 0 then
begin
Memo1.Lines.Add(vProcessEntry32.szExeFile);
Memo1.Lines.Add(Format( ' 进程ID %d ', [vProcessEntry32.th32ProcessID]));
Memo1.Lines.Add(Format( ' 父进程ID %d ', [vProcessEntry32.th32ParentProcessID]));
end;
until not Process32Next(vSnapshot, vProcessEntry32);
CloseHandle(vSnapshot);
end;
[解决办法]
FILEMON,RENMON
早期版本有源代码可以下
[解决办法]
//通过父进程 ID判断
uses TlHelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
vSnapshot: THandle;
vProcessEntry32: TProcessEntry32;
begin
vSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
vProcessEntry32.dwSize := SizeOf(TProcessEntry32);
Process32First(vSnapshot, vProcessEntry32);
repeat
if vProcessEntry32.th32ProcessID <> 0 then
begin
Memo1.Lines.Add(vProcessEntry32.szExeFile);
Memo1.Lines.Add(Format( ' 进程ID %d ', [vProcessEntry32.th32ProcessID]));
Memo1.Lines.Add(Format( ' 父进程ID %d ', [vProcessEntry32.th32ParentProcessID]));
end;
until not Process32Next(vSnapshot, vProcessEntry32);
CloseHandle(vSnapshot);
end;