reverse-engineering-ransomware-encryption-routine

对勒索软件加密例程进行逆向工程,以识别密码学算法、密钥生成缺陷,以及通过静态和动态分析挖掘潜在的解密机会。

9 stars

Best use case

reverse-engineering-ransomware-encryption-routine is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

对勒索软件加密例程进行逆向工程,以识别密码学算法、密钥生成缺陷,以及通过静态和动态分析挖掘潜在的解密机会。

Teams using reverse-engineering-ransomware-encryption-routine should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/reverse-engineering-ransomware-encryption-routine/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/reverse-engineering-ransomware-encryption-routine/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/reverse-engineering-ransomware-encryption-routine/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How reverse-engineering-ransomware-encryption-routine Compares

Feature / Agentreverse-engineering-ransomware-encryption-routineStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

对勒索软件加密例程进行逆向工程,以识别密码学算法、密钥生成缺陷,以及通过静态和动态分析挖掘潜在的解密机会。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 对勒索软件加密例程进行逆向工程

## 概述

现代勒索软件使用混合加密方案,将对称算法(AES-256-CBC/CTR、ChaCha20、Salsa20)用于文件加密,将非对称算法(RSA-2048/4096、Curve25519)用于密钥保护。加密例程通常为每个文件生成一个随机对称密钥,加密文件内容,然后用攻击者内嵌的公钥加密对称密钥。对这些例程进行逆向工程,可以识别具体算法、密钥派生方法、初始化向量(IV)、文件定向模式,以及可能在不支付赎金的情况下实现解密的实现缺陷。典型案例包括 Rhysida(AES-256-CTR + RSA-4096)、Qilin.B(带 AES-NI 的 AES-256-CTR 或 ChaCha20 回退)和 Medusa(AES-256 + RSA)。

## 前置条件

- IDA Pro 或 Ghidra,用于静态反汇编
- x64dbg/WinDbg,用于动态调试
- Python 3.9+,安装 `pycryptodome`、`pefile`
- 理解 AES、RSA、ChaCha20、Curve25519 算法
- 了解 Windows CryptoAPI 和 CNG(BCrypt)函数
- 用于安全执行的沙箱环境

## 核心概念

### 混合加密模型

勒索软件为每个文件生成唯一的 AES 密钥和 IV。文件内容使用该对称密钥加密。对称密钥再用攻击者的 RSA 公钥(内嵌于二进制文件中或从 C2 获取)加密。加密后的密钥追加或前置到加密后的文件中。只有持有 RSA 私钥的攻击者才能解密每个文件的对称密钥。

### 密码学 API 识别

Windows 勒索软件通常使用 CryptoAPI(`CryptAcquireContext`、`CryptGenKey`、`CryptEncrypt`)或 CNG(`BCryptGenerateSymmetricKey`、`BCryptEncrypt`)。部分使用 OpenSSL 或自定义实现。识别这些 API 调用可立即获取算法、密钥大小和操作模式的信息。

### 实现缺陷

解密机会来自:硬编码加密密钥、密钥生成使用弱伪随机数生成器(PRNG)(以 `GetTickCount` 或 `time()` 为种子)、跨文件复用 IV、使用 ECB 模式、加密后密钥仍留在内存中,以及在加密过程中可捕获密钥的竞争条件。

## 实践步骤

### 步骤 1:识别密码学函数

```python
#!/usr/bin/env python3
"""识别勒索软件 PE 文件中的密码学函数。"""
import pefile
import sys

CRYPTO_APIS = {
    # Windows CryptoAPI
    "CryptAcquireContextA": "CryptoAPI 上下文获取",
    "CryptAcquireContextW": "CryptoAPI 上下文获取",
    "CryptGenKey": "密钥生成",
    "CryptDeriveKey": "密钥派生",
    "CryptEncrypt": "加密操作",
    "CryptDecrypt": "解密操作",
    "CryptImportKey": "密钥导入(公钥?)",
    "CryptExportKey": "密钥导出",
    "CryptGenRandom": "随机数生成",
    "CryptCreateHash": "哈希创建",
    "CryptHashData": "哈希操作",
    # Windows CNG(BCrypt)
    "BCryptOpenAlgorithmProvider": "CNG 算法初始化",
    "BCryptGenerateSymmetricKey": "CNG 对称密钥生成",
    "BCryptEncrypt": "CNG 加密",
    "BCryptDecrypt": "CNG 解密",
    "BCryptGenerateKeyPair": "CNG 密钥对生成",
    "BCryptImportKeyPair": "CNG 密钥导入",
    # OpenSSL
    "EVP_EncryptInit_ex": "OpenSSL 加密初始化",
    "EVP_EncryptUpdate": "OpenSSL 加密更新",
    "EVP_EncryptFinal_ex": "OpenSSL 加密完成",
    "RSA_public_encrypt": "OpenSSL RSA 加密",
    "AES_set_encrypt_key": "OpenSSL AES 密钥设置",
    # 文件操作
    "CreateFileW": "文件打开(目标文件)",
    "ReadFile": "文件读取(加密前)",
    "WriteFile": "文件写入(加密后)",
    "FindFirstFileW": "文件枚举(目标定向)",
    "FindNextFileW": "文件枚举",
    "MoveFileW": "文件重命名(扩展名更改)",
    "DeleteFileW": "文件删除(原始文件)",
}

AES_SBOX = bytes([
    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
    0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
])

CHACHA20_CONSTANT = b"expand 32-byte k"


def analyze_imports(filepath):
    """分析 PE 导入表中的密码学 API。"""
    try:
        pe = pefile.PE(filepath)
    except pefile.PEFormatError:
        print("[-] 非有效 PE 文件")
        return

    print("[+] 密码学 API 分析")
    print("=" * 60)

    crypto_imports = []
    if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'):
        for entry in pe.DIRECTORY_ENTRY_IMPORT:
            dll = entry.dll.decode('utf-8', errors='replace')
            for imp in entry.imports:
                if imp.name:
                    name = imp.name.decode('utf-8', errors='replace')
                    if name in CRYPTO_APIS:
                        desc = CRYPTO_APIS[name]
                        crypto_imports.append((dll, name, desc))
                        print(f"  [{dll}] {name}: {desc}")

    if not crypto_imports:
        print("  导入表中未发现已知密码学 API")
        print("  恶意软件可能使用自定义实现或动态加载")

    return crypto_imports


def find_crypto_constants(filepath):
    """搜索内嵌的密码学常量。"""
    with open(filepath, 'rb') as f:
        data = f.read()

    print("\n[+] 密码学常量搜索")
    print("=" * 60)

    # AES S-Box
    offset = data.find(AES_SBOX)
    if offset != -1:
        print(f"  AES S-Box 位于偏移量 0x{offset:x}")

    # ChaCha20/Salsa20 常量
    offset = data.find(CHACHA20_CONSTANT)
    if offset != -1:
        print(f"  ChaCha20 常量位于偏移量 0x{offset:x}")

    # RSA 公钥标记
    rsa_markers = [
        b'-----BEGIN PUBLIC KEY-----',
        b'-----BEGIN RSA PUBLIC KEY-----',
        b'\x30\x82',  # ASN.1 SEQUENCE
    ]
    for marker in rsa_markers:
        offset = data.find(marker)
        if offset != -1:
            print(f"  RSA 密钥标记位于偏移量 0x{offset:x}")

    # 常见勒索软件文件扩展名模式
    import re
    ext_pattern = re.compile(rb'\.\w{3,10}(?=\x00)', re.IGNORECASE)
    extensions = set()
    for match in ext_pattern.finditer(data):
        ext = match.group().decode('ascii', errors='replace').lower()
        target_exts = [
            '.doc', '.docx', '.xls', '.xlsx', '.pdf', '.ppt',
            '.jpg', '.png', '.sql', '.mdb', '.bak', '.zip',
        ]
        if ext in target_exts:
            extensions.add(ext)

    if extensions:
        print(f"\n  目标文件扩展名: {', '.join(sorted(extensions))}")


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print(f"用法: {sys.argv[0]} <勒索软件样本>")
        sys.exit(1)

    analyze_imports(sys.argv[1])
    find_crypto_constants(sys.argv[1])
```

### 步骤 2:分析加密流程

```python
def analyze_encryption_pattern(filepath):
    """从勒索软件产物分析文件加密模式。"""
    import os
    import struct

    with open(filepath, 'rb') as f:
        data = f.read()

    file_size = len(data)
    print(f"\n[+] 加密文件分析: {filepath}")
    print(f"  大小: {file_size:,} 字节")

    # 检查追加的密钥材料(常见模式)
    # 许多勒索软件家族在文件末尾追加加密后的密钥
    tail_sizes = [256, 512, 1024, 2048]  # 常见 RSA 密文大小
    for size in tail_sizes:
        if file_size > size + 16:
            tail = data[-size:]
            # 高熵值表明为加密数据
            entropy = calculate_entropy(tail)
            if entropy > 7.5:
                print(f"  文件末尾可能存在加密密钥({size} 字节),"
                      f"熵值: {entropy:.2f}")

    # 检查头部修改
    # 许多勒索软件会前置元数据
    header = data[:64]
    print(f"  前 16 字节: {header[:16].hex()}")

    # 检查原始文件头是否被保留
    known_headers = {
        b'PK': 'ZIP/Office',
        b'\x89PNG': 'PNG',
        b'\xff\xd8\xff': 'JPEG',
        b'%PDF': 'PDF',
        b'\xd0\xcf\x11\xe0': 'OLE(DOC/XLS)',
    }
    for magic, ftype in known_headers.items():
        if header.startswith(magic):
            print(f"  原始格式已保留: {ftype}")
            break
    else:
        print("  原始文件头已被销毁/加密")


def calculate_entropy(data):
    """计算数据的香农熵。"""
    from collections import Counter
    import math

    if not data:
        return 0

    freq = Counter(data)
    length = len(data)
    entropy = -sum(
        (count / length) * math.log2(count / length)
        for count in freq.values()
    )
    return entropy
```

## 验证标准

- 识别密码学算法(AES、RSA、ChaCha20 等)
- 确定密钥大小和操作模式
- 分析密钥生成方法中的潜在弱点
- 记录每个文件的密钥加密方案
- 提取文件定向模式和扩展名列表
- 提取内嵌公钥用于基础设施关联
- 评估潜在解密机会

## 参考资料

- Morphisec - 拆解勒索软件加密: https://www.morphisec.com/blog/breaking-down-ransomware-encryption-key-strategies-algorithms-and-implementation-trends/
- Emsisoft - 勒索软件加密方法: https://www.emsisoft.com/en/blog/27649/ransomware-encryption-methods/
- Halcyon 勒索软件排名 Q4-2024: https://www.halcyon.ai/raas-mq/power-rankings-ransomware-malicious-quartile-q4-2024
- No More Ransom 项目: https://www.nomoreransom.org/
- MITRE ATT&CK T1486 - 数据加密影响: https://attack.mitre.org/techniques/T1486/

Related Skills

reverse-engineering-rust-malware

9
from killvxk/cybersecurity-skills-zh

使用 IDA Pro 和 Ghidra 对 Rust 编译的恶意软件进行逆向工程,掌握处理非空终止字符串、提取 crate 依赖项和 Rust 特有控制流分析的专项技术。

reverse-engineering-malware-with-ghidra

9
from killvxk/cybersecurity-skills-zh

使用 NSA 的 Ghidra 反汇编器和反编译器对恶意软件二进制文件进行逆向工程,在汇编和伪 C 代码层面理解其内部逻辑、密码学例程、C2 协议和规避技术。适用于恶意软件逆向工程、反汇编分析、反编译、二进制分析或理解恶意软件内部机制等请求。

reverse-engineering-ios-app-with-frida

9
from killvxk/cybersecurity-skills-zh

使用 Frida 动态插桩对 iOS 应用进行逆向工程,在无源代码的情况下理解内部逻辑、 提取加密密钥、绕过安全控制并发现隐藏功能。适用于授权 iOS 渗透测试、分析专有协议、 理解混淆逻辑或从 iOS 二进制文件中提取运行时机密。适合 iOS 逆向工程、Frida iOS Hook、 Objective-C/Swift 方法追踪或 iOS 二进制分析相关请求。

reverse-engineering-dotnet-malware-with-dnspy

9
from killvxk/cybersecurity-skills-zh

使用 dnSpy 反编译器和调试器对 .NET 恶意软件进行逆向工程,分析 C#/VB.NET 源代码,识别混淆技术,提取配置信息,理解包括信息窃取器、远程访问木马(RAT)和加载器在内的恶意功能。适用于 .NET 恶意软件分析、C# 恶意软件反编译、托管代码逆向工程或 .NET 混淆分析等请求。

reverse-engineering-android-malware-with-jadx

9
from killvxk/cybersecurity-skills-zh

使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 Android 威胁分析等请求。

recovering-from-ransomware-attack

9
from killvxk/cybersecurity-skills-zh

按照 NIST 和 CISA 框架执行结构化勒索软件事件恢复,包括环境隔离、取证证据保全、 干净基础设施重建、从已验证备份优先还原系统、凭据重置,以及针对再感染的验证。 涵盖 Active Directory 恢复、数据库还原和按依赖顺序重建应用栈。

performing-ransomware-tabletop-exercise

9
from killvxk/cybersecurity-skills-zh

规划并主持模拟勒索软件(Ransomware)事件的桌面推演,以测试组织的应急准备、决策能力和通信流程。基于当前勒索软件威胁行为者(LockBit、ALPHV/BlackCat、Cl0p)设计真实场景,涵盖双重勒索(Double Extortion)、备份销毁和法规通知要求等注入内容。依据 NIST CSF 和 CISA 指南评估参与者响应。适用于勒索软件桌面推演、事件响应演练或勒索软件应急准备演习等请求。

performing-ransomware-response

9
from killvxk/cybersecurity-skills-zh

执行结构化的勒索软件事件响应,从初始检测到遏制、取证分析、解密评估、恢复和事后加固。 处理勒索谈判考量、备份完整性验证和法规通知要求。适用于勒索软件响应、 勒索软件恢复、加密勒索软件、数据加密攻击、赎金支付决策或勒索软件遏制等请求场景。

performing-ransomware-incident-response

9
from killvxk/cybersecurity-skills-zh

执行结构化的勒索软件事件响应,包括遏制、解密评估、从备份恢复以及根除勒索软件持久化机制。

investigating-ransomware-attack-artifacts

9
from killvxk/cybersecurity-skills-zh

识别、收集和分析勒索软件攻击制品,以确定变种、初始访问向量、加密范围和恢复选项。

implementing-security-chaos-engineering

9
from killvxk/cybersecurity-skills-zh

实施安全混沌工程实验,故意禁用或降级安全控制措施,以验证检测和响应能力。 使用 boto3 和 subprocess 测试 WAF 绕过、防火墙规则删除、日志管道中断和 EDR 禁用等场景。 适用于验证 SOC 检测覆盖率和韧性的场景。

implementing-honeypot-for-ransomware-detection

9
from killvxk/cybersecurity-skills-zh

部署诱饵文件、蜜罐共享和诱骗系统,在最早阶段检测勒索软件活动。配置嵌入 战略文件位置的金丝雀令牌,在勒索软件尝试加密时触发告警;使用模拟高价值 目标的蜜罐网络共享;部署 Thinkst Canary 设备进行全面的基于欺骗的检测。