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 —— 外联与数据传输线索。
发表在 安全分析 | 留下评论

upx壳解密

 

方法一:官方 UPX 直接脱(首选)

适用于 没有篡改 UPX Header未加壳保护二次加密 的情况。

命令示例:

bash
upx -d yourfile.exe

如果你想保留原文件备份:

bash
upx -d yourfile.exe -o unpacked.exe

运行后会提示解压成功,unpacked.exe 就是原 EXE。

 

⚠️ 注意
如果 upx -d 报错,如:

CantUnpackException
File already unpacked?

说明被修改结构,需要手动脱。


✅ 方法二:x64dbg 手动脱UPX(适用于改壳/反脱壳)

下面给你一个超级清晰的标准流程👇


🔎 步骤 1:加载进 x64dbg,记录 OEP

运行程序 → 会先进入 UPX stub
等待其执行完解压 → 跳转到真正 OEP

常见方式:

Ctrl+G 搜索 UPX!memcpy 结束后的位置

右键 → 搜索 → 选择内存页中可执行区域变化

最关键动作:

当你发现代码从杂乱 shellcode → 正常 PE 程序代码结构
按下:

Ctrl + Shift + F9   (暂停)

此时 RIP/EIP 即为真正 OEP
✅ 记住这个地址
例如:

00405000

✂️ 步骤 2:Dump 内存

在 x64dbg:

菜单 → DumpDump PE

或右键内存页:
Dump to file → 保存为 unpacked_tmp.exe


🛠 步骤 3:修复导入表 & PE Header

使用工具:

  • Scylla(推荐)
  • 或 Import REConstructor (aka ImpRec)

流程(以 Scylla 为例):

  1. Attach 到目标进程
  2. 输入 OEP(如 00405000
  3. IAT Autosearch
  4. Fix Dump
  5. 导出:unpacked.exe

✅ 正式脱壳完成


✅ UPX 手工脱壳流程总结图

UPX Loader Stub  →   解压内存区域 → 跳转真实OEP → Dump内存 → 修复IAT → 脱壳成功

📌 提示:Delphi + UPX 的特别点

Delphi 程序入口会进入 System.pas 初始化代码
入口比较深,不要被误导
真实 OEP 通常在 .text 段明显结构处
识别方式:

  • 有清晰函数 prolog(如 push ebp / mov ebp, esp
  • 有 API 调用序列
  • 反汇编变得“正常”

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

恶意软件分析使用Wireshark捕获C2

步骤说明(以 Windows 为例):
安装 Wireshark
从官网 https://www.wireshark.org 下载并安装。

启动抓包

打开 Wireshark,选择恶意软件所在的网络接口(如当前网卡或虚拟机网卡)。

点击左上角蓝色鲨鱼鳍图标(Start Capture)。
设置过滤器
在过滤栏输入(直接复制以下内容):

port  53

此过滤器仅显示DNS查询流量,且目标端口为53

 

 

运行恶意软件
执行恶意程序,触发其DNS查询行为。

查看捕获结果

DNS请求会显示在列表中,Info 列会标明查询的域名(如 A example.com)。

键任意DNS包 → Follow → UDP Stream,可查看完整会话。

保存结果
点击菜单栏 File → Save 保存抓包文件供后续分析。

注意事项:
捕获所有网络接口:
若恶意软件运行在虚拟机中,需选择虚拟机对应的虚拟网卡(如VMware的 VMnet1)。

非标准端口或加密DNS:

若未捕获到结果,尝试扩大过滤器范围,如 udp(所有UDP流量)或 tcp.port == 443(检测DoH)。
若恶意软件使用 DNS over HTTPS(DoH),需解密TLS流量(难度较高)。
快速验证:
运行 nslookup google.com 命令测试抓包是否正常,确认工具配置正确。

为什么推荐 Wireshark?
零代码:无需编程或钩子技术。
全面性:捕获所有DNS流量(包括非API调用和底层报文)。
实时性:结果立即可见,适合快速验证。
备用方案:若需监控具体进程,可使用 Process Monitor(Procmon)的 UDP Send/TCP Connect 事件,但需手动筛选DNS相关行为。

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