FLOSS

FLOSSFireEye Labs Obfuscated String Solver)是一个非常实用的恶意样本分析工具,用于自动提取被编码或混淆的字符串
它能识别出经过 Base64、XOR、栈解码、函数解码等技术隐藏的文本,常用于快速找出 C2 地址、文件名、命令行参数 等关键信息。

下面我教你 FLOSS 的安装与下载方法 👇


🧰 一、官方信息


💻 二、安装方式(推荐三种)

✅ 方法 1:直接用 pip 安装(最简单)

适用于 Windows / Linux / macOS

  1. 确保你系统已安装 Python 3.8+

    bash
    python --version
    
  2. 然后直接运行:

    bash
    pip install floss
    
  3. 安装完成后验证:

    bash
    floss --version
    

    如果显示版本号(例如 v2.2.0),说明安装成功。


✅ 方法 2:手动下载可执行文件(免安装版)

适合不想装 Python 的用户。

  1. 前往 FLOSS 官方发布页:
    🔗 https://github.com/mandiant/flare-floss/releases

  2. 找到最新版本(如 floss-2.2.0-windows.zipfloss-2.2.0-linux.tar.gz

  3. 下载并解压后,你会得到一个可执行文件:

    floss.exe
    
  4. 将它放入系统路径(或当前分析目录),然后命令行执行:

    bash
    floss sample.exe
    

✅ 方法 3:从源码构建(适合进阶用户)

如果你想自己编译:

bash
git clone https://github.com/mandiant/flare-floss.git
cd flare-floss
pip install -r requirements.txt
python setup.py install

⚙️ 三、常用用法示例

目标 命令
提取样本中所有字符串 floss sample.exe
保存结果到文件 floss sample.exe > decoded.txt
提取并显示 API 调用 floss --functions sample.exe
指定输出格式(JSON) floss -j sample.exe

⚠️ 四、注意事项

  • FLOSS 只支持 PE 文件(.exe / .dll)
    若是 ELF / Mach-O,可以用 strings 或 radare2
  • 若样本使用复杂加密(如 RC4/AES),FLOSS 可能无法完全解码。
  • 运行时不要在联网主机上直接执行恶意样本(建议用虚拟机或沙箱)。
发表在 安全分析 | 留下评论

sysmon

Sysmon – Sysinternals | Microsoft Learn

发表在 安全分析 | 留下评论

FakeNet-PrimaryIP 和 [DNSResponses]

PrimaryIP[DNSResponses] 是 FakeNet-NG 配置文件中最容易混淆但非常核心的两个部分。
它们共同决定了 FakeNet 在“伪造网络”时,如何响应恶意程序的网络请求。


🧩 一、PrimaryIP — FakeNet 自己的“主IP”

📘 含义

PrimaryIP 是 FakeNet 所模拟的主机 IP 地址,
也就是 FakeNet 启动后伪装成的目标主机 IP

FakeNet 会使用这个 IP 地址来:

  • 监听所有 Fake 服务(HTTP、DNS、FTP、SSL 等);
  • 响应 DNS 查询;
  • 模拟目标系统的 IP(恶意软件认为这个 IP 就是外网服务器)。

✅ 举例

假设你的虚拟机 IP 是:

192.168.56.101

那你应该在 [Network] 段中这样写:

ini
[Network]
Enabled = True
PrimaryAdapter = eth0
PrimaryIP = 192.168.56.101
DNSResolver = 8.8.8.8

FakeNet 启动后,会:

  • 192.168.56.101 上监听所有端口;
  • 模拟 DNS、HTTP 等协议;
  • 当恶意样本请求任意域名时(比如 malware.com),FakeNet 会返回该 IP 作为响应。

🧩 二、[DNSResponses] — FakeNet 的 DNS 伪造规则

📘 含义

[DNSResponses] 控制 FakeNet 如何响应 DNS 查询请求。
它告诉 FakeNet:

当样本请求某个域名时,该返回哪个 IP。


✅ 典型配置:

ini
[DNSResponses]
Enabled = True
DefaultResponse = 192.168.56.101

这表示:
无论样本请求什么域名(如 www.google.comupdate.microsoft.comcnc.malware.net),
FakeNet 都会伪造 DNS 响应,返回 192.168.56.101(即你的虚拟机 IP)。

这样,样本的所有网络请求都会被“重定向”到 FakeNet 自己,从而被捕获和分析。


✅ 自定义域名映射示例

ini
[DNSResponses]
Enabled = True
DefaultResponse = 192.168.56.101
# 针对特定域名返回不同 IP
update.microsoft.com = 10.10.10.10
malware.com = 192.168.56.102
api.badactor.net = 127.0.0.1

这代表:

请求域名 返回 IP 说明
update.microsoft.com 10.10.10.10 指定伪造 IP
malware.com 192.168.56.102 指定另一伪造主机
其他任意域名 192.168.56.101 使用默认响应

🧠 三、两者的关系(关键点)

项目 作用 示例 说明
PrimaryIP FakeNet 自己的主监听 IP 192.168.56.101 所有监听器绑定的地址
[DNSResponses].DefaultResponse DNS 默认返回的 IP 通常设置成 PrimaryIP 把样本流量引回 FakeNet 自己
自定义 DNS 响应 为特定域名返回不同 IP malware.com = 127.0.0.1 可用于重定向或分析特定行为

🧩 推荐设置(最安全通用)

如果你只想捕获所有恶意流量,不让样本访问外网:

ini
[Network]
Enabled = True
PrimaryAdapter = eth0
PrimaryIP = 192.168.56.101
DNSResolver = 8.8.8.8

[DNSResponses]
Enabled = True
DefaultResponse = 192.168.56.101

这样:

  • 样本访问任何域名 → DNS 响应 FakeNet 自己;
  • 样本建立连接 → FakeNet 捕获流量;
  • 你不会泄露流量到真实互联网。
发表在 安全分析 | 留下评论

FakeNet配置文件fakenet.conf

完整、可直接使用的 Ubuntu/Linux 环境模板(适配 FakeNet-NG v3.5),包含所有常见监听器(HTTP、DNS、FTP、SSL、SMTP、POP3、IMAP 等),并保证不会再出现 enabledport 错误。


✅ 完整版 fakenet.conf(推荐模板)

请将以下内容复制到:

~/tools/flare-fakenet-ng/resources/fakenet.conf

ini
###############################################################################
# FakeNet-NG 配置文件模板(适用于 Ubuntu / Linux 环境)
# 版本:v3.5
# 作者:Mandiant (修改优化 by GPT)
###############################################################################

[Network]
Enabled = True
PrimaryAdapter = eth0
PrimaryIP = 192.168.56.1
# 如果你在 VMware / VirtualBox 中,请修改为实际网卡名:
# 执行命令:ip addr
# 例如改为 ens33 或 enp0s3
DNSResolver = 8.8.8.8

[Output]
Enabled = True
Directory = logs
SaveToPCAP = True
SaveToText = True

###############################################################################
# 各类协议监听器配置
###############################################################################

[HTTPListener]
Enabled = True
Port = 80

[SSLListener]
Enabled = True
Port = 443

[DNSListener]
Enabled = True
Port = 53

[FTPListener]
Enabled = True
Port = 21

[SMTPListener]
Enabled = True
Port = 25

[POP3Listener]
Enabled = True
Port = 110

[IMAPListener]
Enabled = True
Port = 143

[SMBListener]
Enabled = False
Port = 445

[IRCListener]
Enabled = False
Port = 6667

[TelnetListener]
Enabled = False
Port = 23

[EchoListener]
Enabled = False
Port = 7

[RawListener]
Enabled = False
Port = 4444

###############################################################################
# HTTP 模拟响应配置
###############################################################################
[HTTPServer]
Enabled = True
DefaultResponse = 200 OK
DefaultContentType = text/html
DefaultBody = <html><body><h1>FakeNet-NG HTTP Server</h1></body></html>

###############################################################################
# SSL 模拟响应配置
###############################################################################
[SSLServer]
Enabled = True
Certificate = ./resources/cert.pem
PrivateKey = ./resources/key.pem

###############################################################################
# DNS 伪造响应配置
###############################################################################
[DNSResponses]
Enabled = True
DefaultResponse = 192.168.56.1
# 可以手动添加特定域名映射,例如:
# google.com = 192.168.56.1
# update.microsoft.com = 192.168.56.1

###############################################################################
# 结束
###############################################################################

✅ 使用步骤

  1. 保存文件
  • nano ~/tools/flare-fakenet-ng/resources/fakenet.conf
    

    粘贴上面内容 → Ctrl + O → 回车 → Ctrl + X

  • 创建日志目录
  • mkdir -p ~/tools/flare-fakenet-ng/logs
    
  • 确认网卡名称 查看系统网卡:
ip addr

修改 [Network] 段的:

ini
  • PrimaryAdapter = eth0
    

    为实际网卡名(如 ens33enp0s3)。

  • 运行 FakeNet
  1. sudo /home/admin/tools/flare-fakenet-ng/.venv/bin/fakenet --config /home/admin/tools/flare-fakenet-ng/resources/fakenet.conf
    

✅ 成功启动时的输出应类似:

[*] FakeNet-NG v3.5 starting...
[*] Loaded configuration file: /home/admin/tools/flare-fakenet-ng/resources/fakenet.conf
[*] Starting listeners:
    [HTTPListener] Listening on port 80
    [DNSListener] Listening on port 53
    [FTPListener] Listening on port 21
    [SSLListener] Listening on port 443
    ...
发表在 安全分析 | 留下评论

RDX寄存器

在x86-64架构中,RDX 是一个64位通用寄存器,常用于数据存储或特定运算(如乘法和除法)。以下是两个具体示例说明其用途:

. 核心定义:数据寄存器(Data Register)
– 英文全称:Register Data eXtended(64位扩展数据寄存器)

– 前缀 R 代表64位架构(Register),DX 继承自16位时代的 Data Register(数据寄存器)。

– 位宽演变:
– 16位:DX(Data Register)
– 32位:EDX(Extended Data Register)
– 64位:RDX(Register Data Extended)

 

 寄存器体系中的定位

寄存器 全称 主要功能 位宽关联
RAX Register Accumulator 累加器/函数返回值 RAX → EAX → AX → AL
RCX Register Counter 循环计数/字符串操作 RCX → ECX → CX → CL
RDX Register Data Extended 数据传递/运算辅助/参数传递 RDX → EDX → DX → DL/DH
RBX Register Base 基址访问 RBX → EBX → BX → BL/BH

 


示例1:乘法运算(无符号)

当执行大数乘法时,64位乘积结果可能超过64位。此时,RDX 会存储结果的高64位,RAX 存储低64位。

mov rax, 0x8000000000000000  ; RAX = 2^63
mov rbx, 2                   ; RBX = 2
mul rbx                      ; 计算 RAX * RBX = 2^63 * 2 = 2^64
; 结果:RDX = 1(高64位),RAX = 0(低64位)

解释
2^63 * 2 = 2^64,对应二进制值为 1 后跟64个 0。超过64位的部分(高64位的 1)存入RDX,低64位(全0)存入RAX。


示例2:除法运算(有符号)

在128位除法中,RDXRAX 共同组成被除数(RDX为高64位,RAX为低64位)。结果商存入RAX,余数存入RDX。

mov rdx, 1                  ; 高64位 = 1
mov rax, 0                  ; 低64位 = 0(被除数整体为 2^64)
mov rcx, 3                  ; 除数 = 3
idiv rcx                    ; 计算 (RDX:RAX) / RCX
; 结果:RAX = 0x5555555555555555(商),RDX = 1(余数)

解释
2^64 ÷ 3 = 商 0x5555...5555(十进制6148914691236517205),余数1。
注意:对有符号除法,需先用 cqo 将RAX符号扩展到RDX(本例为简化直接赋值)。


其他用途

  • 系统调用(Linux):RDX作为第三个参数传递(如 sys_write 需传递数据长度)。
  • 数据暂存:作为通用寄存器用于临时存储数据。

通过以上示例,可直观理解RDX在运算中的核心作用。

发表在 逆向工程 | 留下评论

VirtualAlloc的参数

在x86-64架构中,RDX 是一个64位通用寄存器,常用于数据存储或特定运算(如乘法和除法)

 

在 x86-64 架构和 Windows API 的上下文中,RDX 寄存器VirtualAlloc 的关联主要体现在 函数调用时的参数传递规则。以下是具体说明:


🔍 RDX 在调用 VirtualAlloc 时的作用

VirtualAlloc 是 Windows API 中用于分配/保留虚拟内存的函数,其原型如下:

LPVOID VirtualAlloc(
  LPVOID lpAddress,       // 内存地址(通常为 NULL,由系统分配)
  SIZE_T dwSize,          // 要分配的内存大小
  DWORD  flAllocationType,// 分配类型(如 MEM_COMMIT)
  DWORD  flProtect        // 内存保护标志(如 PAGE_READWRITE)
);

x64 调用约定(Microsoft x64 约定)中:

  • 前 4 个参数通过寄存器传递:RCX(第1参数)、RDX``**(第2参数)、**R8**(第3参数)、**R9`(第4参数)。
  • 因此,RDX 寄存器用于传递 dwSize(要分配的内存大小)。

📝 汇编调用示例

以下是 VirtualAlloc 在 x64 汇编中的典型调用过程:

section .text
    extern VirtualAlloc      ; 声明外部函数

allocate_memory:
    mov rcx, 0               ; 参数1 lpAddress = NULL(由系统选择地址)
    mov rdx, 4096            ; 参数2 dwSize = 4096 字节(1页)
    mov r8, 0x1000           ; 参数3 flAllocationType = MEM_COMMIT(提交内存)
    mov r9, 0x04             ; 参数4 flProtect = PAGE_READWRITE(可读可写)
    sub rsp, 32              ; 预留影子空间(x64调用约定要求)
    call VirtualAlloc
    add rsp, 32              ; 恢复栈指针
    ret
  • 关键寄存器角色
    • RDX:指定分配的内存大小(这里是 4096 字节)。
    • 返回值:分配的内存基地址存放在 RAX 寄存器中。
发表在 逆向工程 | 留下评论

汇编常用指令

汇编常用指令

 

发表在 逆向工程 | 留下评论

PE文件

 

 

 

在PE文件中,rdatapdatadata是三个不同的段,它们各自具有不同的功能和用途。以下是对这三个段的详细解释:
  1. rdata段:
    1. rdata段通常存储只读数据,例如程序使用的常量、字符串、导入表信息等。这些数据在程序运行时不会被修改,因此被称为“只读”数据。
    2. 在某些情况下,rdata段还可能包含调试目录(debug directory)和符号表(symbol table)等信息,这些信息在Microsoft链接器生成的EXE文件中尤为常见。
    3. 此外,rdata段有时会包含导入函数的地址信息,例如IMAGE_IMPORT_BY_NAME结构,用于存储从外部库导入的函数名称和地址。
  2. data段:
    1. data段用于存储程序的全局变量和静态变量。这些变量是可读写的,可以在程序运行期间被修改。
    2. rdata段不同,data段的数据是可变的,因此需要在程序运行时动态分配和管理。
    3. 在某些情况下,data段可能包含程序初始化时的默认值,这些值在程序运行时可能会被修改或覆盖。
  3. pdata段:
    1. pdata段仅存在于64位PE文件中,主要用于异常处理信息。它包含了程序的异常处理函数(如__try__except__finally块)的地址和相关信息。
    2. 这个段的存在是为了支持64位程序的异常处理机制,确保程序在遇到异常时能够正确地捕获和处理异常。
总结:
  • rdata段:存储只读数据,如常量、字符串、导入表和调试信息
  • data段:存储可读写的全局变量和静态变量,用于程序运行时的动态数据。
  • pdata段:仅存在于64位PE文件中,用于存储异常处理信息

 

发表在 逆向工程 | 留下评论

user32.dll键盘输入捕获函数

一、常见用于键盘输入捕获的 Win32 API(合法用途)

这些 API 通常出现在输入法、热键工具、自动化测试软件或游戏反作弊检测中:

函数 所属 DLL 功能说明
SetWindowsHookEx user32.dll 安装一个系统级钩子(例如 WH_KEYBOARD 或 WH_KEYBOARD_LL)来拦截键盘消息。常用于键盘快捷键、输入法或热键管理。
CallNextHookEx user32.dll 在钩子回调中调用此函数,将消息传递给下一个钩子。
UnhookWindowsHookEx user32.dll 移除先前安装的钩子。
GetAsyncKeyState user32.dll 查询某个键当前是否被按下,常用于实时检测热键(例如游戏输入或快捷键)。
GetKeyState user32.dll 获取某个键的当前状态(按下/切换状态)。
GetMessage / PeekMessage user32.dll 从消息队列中获取键盘或鼠标消息,用于普通消息循环。
RegisterHotKey user32.dll 注册全局热键,允许程序在系统范围内响应某个按键组合。

✅ 二、底层输入 API(在驱动或更底层场景)

函数 DLL / 驱动接口 说明
ReadFile / WriteFile kernel32.dll 用于读取设备(如键盘设备)的输入数据,在低级驱动中常见。
Raw Input API (RegisterRawInputDevicesGetRawInputData) user32.dll 获取未经系统处理的原始输入数据,用于高精度输入分析(如游戏、输入法)。

⚠️ 三、防御与检测方向(安全研究)

如果你是为了检测或防御键盘记录程序,可以:

  • 调用 GetWindowsHookEx 或使用安全工具检测是否存在 WH_KEYBOARD_LL 钩子;
  • 检查加载了哪些可疑 DLL(例如注入到 explorer.exe 或 winlogon.exe 的第三方 DLL);
  • 使用 Windows Defender 或 Sysinternals 工具(如 AutorunsProcess Explorer)分析钩子与 DLL 注入行为。

⚙️ 举例(合法用途示例)

以下是一个用于注册全局热键的示例(不是键盘记录):

c
#include <windows.h>
#include <stdio.h>

int main() {
    if (RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_ALT, 'K')) {
        printf("Hotkey CTRL+ALT+K registered.\n");
    }

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        if (msg.message == WM_HOTKEY) {
            printf("Hotkey pressed!\n");
        }
    }

    UnregisterHotKey(NULL, 1);
    return 0;
}

这个例子安全且合法,只监听一个你自己注册的热键组合。

发表在 安全分析 | 留下评论

常见取证日志与伪迹

常见取证日志与伪迹(示例说明)

1. Windows 事件日志(Event Logs)

  • 是什么:系统、应用、安全等事件的记录(系统级审计、登录、服务、崩溃等)。
  • 能告诉我们:登录/注销、服务启动/停止、蓝屏、特权使用、策略变更、审计条目等。
  • 位置/格式.evtx 文件(通常在 C:\Windows\System32\winevt\Logs\)。
  • 提示:用 wevtutil 导出或用工具(ELK、Log2Timeline、EventLog Explorer)解析;关注 Security log(登录/审计)、System(驱动/硬件/服务)、Application(应用崩溃)。

2. Prefetch(预取文件)

  • 是什么:启动或运行可执行文件时 Windows 为加速而保存的记录(短期)。
  • 能告诉我们:程序何时被运行、运行频率、相关文件路径。
  • 位置C:\Windows\Prefetch\ 下的 .pf 文件。
  • 提示:对时间线分析有用;注意 Windows 10/11 引入了替代机制(Timeline/Manifest),但 Prefetch 仍有价值。

3. Shimcache / AppCompatCache(兼容性缓存)

  • 是什么:记录曾经执行过的可执行文件路径(驻留在注册表/系统中)。
  • 能告诉我们:程序执行痕迹(哪怕可执行已被删除)。
  • 位置:早期在 SYSTEM 注册表 hive 的 AppCompatCache,不同 Windows 版本位置/格式不同。
  • 提示:适合发现已删除程序的运行痕迹,但时间精度不高。

4. AmCache / Amcache.hve

  • 是什么:由 Windows 生成的应用/可执行文件相关信息数据库(安装/运行记录、文件哈希、路径、时间戳)。
  • 能告诉我们:可执行文件的路径、首次运行时间、文件哈希、关联的安装信息。
  • 位置C:\Windows\AppCompat\Programs\Amcache.hve 或注册表导出。
  • 提示:非常适合补充 Prefetch / Shimcache 的缺口。

5. LNK 快捷方式文件(Windows Shortcut)

  • 是什么:Windows 快捷方式文件,会记录目标路径、访问时间、创建者等元数据。
  • 能告诉我们:用户曾经访问或打开过的文件/目录,常用于定位来源路径。
  • 位置:用户桌面、开始菜单、%APPDATA%\Microsoft\Windows\Recent\(Jump Lists 也相关)。
  • 提示:用工具解析 LNK(例如 lnk-parser)可以取得时间戳、目标路径、VolumeID 等。

6. Jump Lists(跳转列表)

  • 是什么:Windows 为最近打开的文件/应用维护的列表(.automaticDestinations-ms / .customDestinations-ms)。
  • 能告诉我们:应用最近打开的文件、时间线信息。
  • 位置%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations\ 等。
  • 提示:解析可得最近的文件和打开时间,配合 LNK 进一步分析。

7. 浏览器历史 / 缓存(Chrome/Edge/Firefox)

  • 是什么:用户访问的网站、下载记录、缓存文件。
  • 能告诉我们:用户上网行为、下载过的可疑文件、外部 C2 地址等。
  • 位置/文件:Chrome History sqlite(%LOCALAPPDATA%\Google\Chrome\User Data\Default\History),Firefox places.sqlite,Edge 同类路径。
  • 提示:提取前建议关闭浏览器或用 live RAM 抓取以避免数据库被锁;可解析 URL、时间、下载路径。

8. 回收站($Recycle.Bin)

  • 是什么:被删除但未永久清除的文件的存放处,含元数据。
  • 能告诉我们:被删除文件的原始路径、删除时间、文件还原可能性。
  • 位置:每个分区根目录下的 $Recycle.Bin\<SID>\
  • 提示:从回收站恢复文件或获取删除时间。

9. USB / 外设历史(SetupAPI、MountedDevices)

  • 是什么:系统记录外部设备连接信息(设备安装/驱动日志、注册表的 MountedDevices)。
  • 能告诉我们:USB 连接时间、设备 ID、序列号、分区标识符(可确定某块盘曾接入过系统)。
  • 位置C:\Windows\inf\setupapi.dev.log、注册表 HKLM\SYSTEM\MountedDevicesDeviceClasses 等。
  • 提示:是调查数据窃取/外发的重要线索。

10. Windows Registry(注册表)快照(NTUSER.DAT / SYSTEM / SOFTWARE / SAM)

  • 是什么:大量系统与用户配置、已安装软件、MRU(最近使用)等保存在 hive 文件中。
  • 能告诉我们:自动运行项、网络配置、用户偏好、已安装软件、时间戳、USB 记录等。
  • 位置:用户的 NTUSER.DAT(每用户),系统在 C:\Windows\System32\config\ 下的 hive。
  • 提示:大量取证数据源,常用工具 Registry ExplorerRegRipper 分析。

11. Windows Firewall / Network logs & DNS cache

  • 是什么:防火墙允许/拦截记录、DNS 解析缓存。
  • 能告诉我们:网络连接尝试、受阻连接、域名解析历史(快速指向外部通信)。
  • 位置:Windows Firewall 日志位置可在防火墙策略配置;DNS 缓存可通过 ipconfig /displaydns(live)或 C:\Windows\System32\dns\(服务器)。
  • 提示:网络线索常与 pcap 结合做更完整的网络证据链。

12. IIS / Web 服务器日志

  • 是什么:Web 服务器访问日志(请求、状态码、来源 IP、时间)。
  • 能告诉我们:外部访问情况、可疑请求、恶意 payload 上载时间等。
  • 位置:默认 C:\inetpub\logs\LogFiles\W3SVC*
  • 提示:常用于入侵取证与流量溯源。

13. PowerShell 日志(Module Logging, ScriptBlock, Transcription)

  • 是什么:系统可启用的 PowerShell 执行日志,记录模块/脚本内容与执行历史(若开启)。
  • 能告诉我们:被执行的脚本、命令、参数——关键用于检测恶意脚本。
  • 位置:Windows Event Logs(Microsoft-Windows-PowerShell/Operational)、以及转录文件路径(若启用 transcription)。
  • 提示:在入侵中非常关键;默认并非全部开启,需要在企业环境中开启日志策略。

14. Sysmon 日志(System Monitor)

  • 是什么:由 Sysinternals 的 Sysmon 服务收集的系统级详细事件(进程创建、网络连接、文件创建哈希、驱动加载等)。
  • 能告诉我们:非常丰富的恶意活动线索(命令行参数、父子进程链、远程连接等)。
  • 位置:Windows Event Log(通常 Microsoft-Windows-Sysmon/Operational)。
  • 提示:在有部署的环境中,是威胁狩猎和取证的黄金来源。

15. Windows Error Reporting(WER)/ Crash dumps

  • 是什么:应用崩溃/错误报告与生成的转储文件(minidump/full dump)。
  • 能告诉我们:崩溃时的上下文(寄存器、堆栈),可用于分析恶意样本导致崩溃的行为点。
  • 位置C:\ProgramData\Microsoft\Windows\WER\ 以及 %LOCALAPPDATA%\CrashDumps\
  • 提示:解析 dump 能发现内存中残留的可疑代码或数据。

16. Scheduled Tasks(计划任务)

  • 是什么:系统定时任务与触发器记录。
  • 能告诉我们:持久化手段(恶意定时任务)、任务创建者、触发时间。
  • 位置C:\Windows\System32\Tasks\、以及注册表 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\
  • 提示:检查是否有异常任务或任务指向可疑可执行文件。

17. Shadow Copies / Volume Shadow Copy(VSS)

  • 是什么:磁盘的历史快照,可包含已删除或被改写的数据的旧版本。
  • 能告诉我们:恢复被删除/改写的文件以作为证据。
  • 位置:系统管理的存储空间(需通过 VSS / vssadmin / 法医工具提取)。
  • 提示:非常适合取回被伪装删除的证据。

18. Mail Server / Mail Client 日志

  • 是什么:邮件传输、收发记录(时间、发件人、收件人、主题)。
  • 能告诉我们:是否有内部数据泄露、钓鱼邮件、邮件附件分发时间点。
  • 位置:取决于邮箱服务器(Exchange、Postfix、Sendmail、SMTP 日志路径不同)。

19. Authentication / Domain Controller Logs(域控登录/AD 日志)

  • 是什么:域环境下的认证事件(Kerberos、NTLM、AD 修改)。
  • 能告诉我们:横向移动、特权账户使用、可疑登录地点/时间。
  • 位置:域控的 Windows 事件日志(Security),以及 AD 日志导出。
  • 提示:关键用于企业范围入侵调查。

20. 网络捕获(pcap)与 IDS/Firewall 日志

  • 是什么:抓包文件(pcap)与入侵检测/防火墙的告警日志。
  • 能告诉我们:网络层面的数据包、会话、上行/下行数据、传输恶意负载的证据。
  • 位置:抓包工具(Wireshark/tcpdump)生成的 .pcap 文件,或企业 IDS 日志。
  • 提示:结合时间线可以把本地活动关联到网络行为。

简短的取证优先级建议(快速指引)

  1. 事件日志(.evtx)与 Sysmon / PowerShell 日志 —— 快速定位可疑执行与网络行为。
  2. Registry(NTUSER.DAT、SYSTEM) + USB/SetupAPI —— 追溯外设/持久化。
  3. Prefetch / Amcache / Shimcache / LNK / JumpLists —— 用户级执行历史与文件来源。
  4. Dump/Memory / Shadow Copies / Browser 缓存 —— 恢复关键文件与内存证据。
  5. 网络日志 / pcap / IIS / Mail logs —— 外联与数据传输线索。
发表在 安全分析 | 留下评论