摘要

最近在逆向一个程序时,通过命令行启动参数定位到它使用了一个配置文件。但是该配置文件我去实际目录下面查看内容时,发现并没有。

猜测是程序在启动读取了配置信息后,接着将原文件删除了。因此我就想借助ProcessMonitor验证我这个想法。

正文

Process Monitor(ProcMon)是微软 Sysinternals 套件中的一款高级实时系统监控工具,可捕获并展示 Windows 的文件系统、注册表、进程/线程活动,还能查看网络连接(较有限)。

本文主要用它来监测程序创建文件、删除文件的时机。由于我还需要在 Windows7 上面运行,因此要下载旧版 3.8.4 。参考windows 7 - Sysinternals Process Monitor device driver: procedure could not be found - Super User

编写一个go程序,创建文件5秒后,将文件删除掉。

go
 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
29
30
package main

import (
	"fmt"
	"os"
	"time"
)

func main() {
	const filename = "test.txt"

	// 1. 创建文件并关闭句柄
	file, err := os.Create(filename)
	if err != nil {
		fmt.Printf("创建文件失败: %v\n", err)
		return
	}
	file.Close() // ✅ 关键:关闭句柄
	fmt.Printf("已创建 %s\n", filename)

	// 2. 等待 5 秒
	time.Sleep(5 * time.Second)

	// 3. 删除文件
	if err := os.Remove(filename); err != nil {
		fmt.Printf("删除文件失败: %v\n", err)
		return
	}
	fmt.Printf("已删除 %s\n", filename)
}

编译为main.exe

sh
1
go build -o main.exe main.go

启动ProcMon,然后运行main.exe,配置过滤器,就能抓取到创建和删除的时机。

image-20250803130041483.png