使用WMI监控进程创建和结束

Windows Management Instrumentation (WMI) 是微软实现的一套可以通过网页管理计算机的系统,我们可以通过WMI查询计算机的方方面面。从Vista开始,这个机制增加了Instance Event的提醒机制,这个机制可以帮助我们监控各种Instance的创建、删除和修改。所以,我们可以想到的是进程也是在WMI里的Win32_Process有Instance的记录,这样我们就可以跟踪到进程的创建和结束了。当然,我们还可能监控到文件等等WMI里的各种Instance。下面是一个监控进程的例子:

20150712232158

下载:MonitorProcessWithWMI.zip

Tips

用Windbg script将内存中的PE文件dump出来

最近看到有些恶意程序,从网络上下载PE文件后,直接放在内存里重定位和初始化,为了能将其dump出来,所以写了这个Windbg脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.foreach( place  { !address /f:VAR,MEM_PRIVATE,MEM_COMMIT /c:"s -[1]a %1 %2 \"MZ\"" } ) 
{
ad *
.catch {
r @$t2 = place;
r @$t0 = place;
r @$t1 = @@C++(((ntdll!_IMAGE_DOS_HEADER *)@$t0)->e_lfanew);
r @$t0 = @$t0 + @$t1;
r @$t1 = $vvalid(@$t0, 4);

.if (@@C++(@$t1 && @@C++(((ntdll!_IMAGE_NT_HEADERS *)@$t0)->Signature) == 0x00004550))
{
r @$t1 = @@C++(((ntdll!_IMAGE_NT_HEADERS *)@$t0)->OptionalHeader.SizeOfImage);
.printf "%08x %08x\n", @$t2, @$t1;
aS /x start_addr @$t2
aS /x dump_size @$t1
.block {
aS target_file e:\\${start_addr}.dll
}

.block {
.printf "${target_file}"
.writemem "${target_file}" ${start_addr} L?${dump_size}
}
}
}
}

Tips