公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-255-恶意代码静态分析技术
# Day 276: 恶意代码静态分析技术 > 应急响应系列第 16 天 | 预计阅读时间:35 分钟 | 难度:★★★★★ --- ## 清单 目录 1. [静态分析概述](#静态分析概述) 2. [文件类型识别](#文件类型识别) 3. [字符串分析](#字符串分析) 4. [PE 文件分析](#pe 文件分析) 5. [反汇编基础](#反汇编基础) 6. [代码特征分析](#代码特征分析) 7. [YARA 规则编写](#yara 规则编写) 8. [总结与思考](#总结与思考) 9. [参考资料](#参考资料) --- ## 静态分析概述 ### 什么是静态分析 **静态分析(Static Analysis)** 是在不执行恶意代码的情况下,通过分析代码结构、字符串、资源等特征来理解恶意代码行为的方法。 ### 静态分析 vs 动态分析 | 维度 | 静态分析 | 动态分析 | |------|----------|----------| | **执行代码** | 不执行 | 执行 | | **安全性** | 高 | 中(需要隔离环境) | | **发现内容** | 潜在能力 | 实际行为 | | **反分析对抗** | 可绕过混淆 | 可检测反虚拟机 | | **分析深度** | 深入代码逻辑 | 观察运行时行为 | | **工具要求** | 反汇编器、编辑器 | 沙箱、监控工具 | ### 静态分析价值 | 价值 | 说明 | |------|------| | **安全** | 不执行代码,无感染风险 | | **快速** | 初步筛查,快速分类 | | **深入** | 理解代码逻辑和意图 | | **可自动化** | 适合批量分析 | | **法律安全** | 不涉及实际攻击行为 | ### 静态分析流程 ``` ┌─────────────────────────────────────────────────────────────┐ │ 静态分析流程 │ │ │ │ 样本获取 ──→ 类型识别 ──→ 字符串提取 ──→ 结构分析 │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ 安全存储 文件头 可疑字符串 PE/ELF 解析 │ │ 哈希计算 魔数 IOC 提取 节区分析 │ │ │ │ 反汇编 ──→ 代码分析 ──→ 特征提取 ──→ 报告生成 │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ IDA/Ghidra 函数识别 YARA 规则 分析结论 │ │ 控制流 API 调用 家族特征 威胁评估 │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 文件类型识别 ### 文件类型识别方法 #### 魔数(Magic Number) **定义**:文件开头的特定字节序列,标识文件类型 **常见魔数**: | 文件类型 | 魔数(Hex) | 说明 | |----------|-------------|------| | **PE (exe/dll)** | 4D 5A | MZ 头 | | **ELF** | 7F 45 4C 46 | .ELF | | **PDF** | 25 50 44 46 | %PDF | | **ZIP** | 50 4B 03 04 | PK.. | | **RAR** | 52 61 72 21 | Rar! | | **GZIP** | 1F 8B | - | | **PNG** | 89 50 4E 47 | .PNG | | **JPEG** | FF D8 FF | - | **检测命令**: ```bash # Linux file 命令 file malware.exe # 输出:PE32 executable (console) Intel 80386, for MS Windows # hexdump 查看文件头 hexdump -C malware.exe | head -5 ``` #### 文件扩展名验证 ```bash # 扩展名与实际类型不匹配检测 # 场景:恶意软件伪装成文档 # Python 示例 import magic def verify_file_type(filepath): mime = magic.from_file(filepath, mime=True) ext = filepath.split('.')[-1] # 验证扩展名与 MIME 类型是否匹配 if ext == 'pdf' and mime != 'application/pdf': print(f"警告:文件类型不匹配!实际类型:{mime}") ``` ### 多层文件分析 #### 压缩包分析 ```bash # 查看压缩包内容 unzip -l archive.zip 7z l archive.7z # 不解压分析 unzip -p archive.zip malicious.exe | file - # 批量提取 unzip archive.zip -d output/ ``` #### 嵌套文件 ``` 分析流程: 1. 识别外层文件类型 2. 提取内层文件 3. 递归分析 4. 构建文件树 工具: - 7-Zip - Universal Extractor - peels (Python) ``` --- ## 字符串分析 ### 字符串提取 #### 工具使用 ```bash # FLOSS(FireEye 高级字符串提取) floss malware.exe > strings_floss.txt # strings(Linux 工具) strings -n 4 malware.exe > strings_basic.txt # 提取 Unicode 字符串 strings -e l malware.exe > strings_unicode.txt # 提取特定长度字符串 strings -n 8 malware.exe > strings_long.txt ``` #### 字符串分类 | 类型 | 示例 | 取证价值 | |------|------|----------| | **文件路径** | C:\Windows\System32 | 目标位置 | | **URL/域名** | http://evil.com/payload.exe | C2 服务器 | | **IP 地址** | 192.168.1.100 | 网络目标 | | **注册表** | HKLM\Software\Microsoft | 持久化位置 | | **API 名称** | CreateProcess, VirtualAlloc | 功能推断 | | **错误信息** | "File not found" | 程序逻辑 | | **凭证** | password, admin | 目标信息 | ### 可疑字符串检测 #### IOC 字符串 ```bash # 检测 URL grep -oE "https?://[a-zA-Z0-9./]+" strings.txt # 检测 IP 地址 grep -oE "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" strings.txt # 检测域名 grep -oE "[a-zA-Z0-9-]+\.[a-zA-Z]{2,}" strings.txt # 检测邮箱 grep -oE "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" strings.txt ``` #### 恶意功能字符串 ``` 可疑字符串列表: - cmd.exe /c - powershell -enc - schtasks /create - reg add - net user - mimikatz - kerberos - lsass - CreateRemoteThread - VirtualAllocEx - WriteProcessMemory ``` #### 编码字符串检测 ```bash # Base64 编码检测 # 特征:长字符串,包含 A-Za-z0-9+/= grep -oE "[A-Za-z0-9+/]{50,}={0,2}" strings.txt # Hex 编码检测 # 特征:长串 hex 字符 grep -oE "[0-9a-fA-F]{50,}" strings.txt ``` ### 字符串解码 #### 常见编码识别 | 编码 | 特征 | 解码方法 | |------|------|----------| | **Base64** | A-Za-z0-9+/= | base64 -d | | **Hex** | 0-9a-fA-F | xxd -r -p | | **URL 编码** | %XX 格式 | urldecode | | **ROT13** | 字母移位 13 | tr 'A-Za-z' 'N-ZA-Mn-za-m' | #### 自定义解码 ```python # XOR 解码示例 def xor_decode(data, key): return bytes([b ^ key for b in data]) # 尝试常见 XOR 密钥 with open('encoded.bin', 'rb') as f: data = f.read() for key in range(256): decoded = xor_decode(data, key) if b'MZ' in decoded or b'PK' in decoded: print(f"找到密钥:{key}") break ``` --- ## PE 文件分析 ### PE 文件结构 ``` ┌─────────────────────────────────────────────────────────────┐ │ PE 文件结构 │ │ │ │ ┌─────────────────┐ │ │ │ DOS Header │ MZ 头,指向 PE 头 │ │ ├─────────────────┤ │ │ │ DOS Stub │ 小程序"此程序不能在 DOS 模式下运行" │ │ ├─────────────────┤ │ │ │ PE Header │ PE 签名 + COFF 头 + 可选头 │ │ ├─────────────────┤ │ │ │ Section Headers │ 节区表 │ │ ├─────────────────┤ │ │ │ .text │ 代码节 │ │ │ .data │ 数据节 │ │ │ .rdata │ 只读数据 │ │ │ .rsrc │ 资源 │ │ │ .reloc │ 重定位 │ │ └─────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ### PE 分析工具 #### PE-bear **功能**: - 可视化 PE 结构 - 检测异常 - 节区分析 **使用**: ``` 1. 打开 PE-bear 2. 加载恶意软件样本 3. 查看各字段 4. 检测红色标记的异常 ``` #### Detect It Easy (DiE) ```bash # 检测编译器、打包器、加密 die malware.exe # 输出示例: PE32 executable Compiler: Microsoft Visual C/C++ Linker: Microsoft Linker Packer: UPX v3.96 ``` #### pefile (Python) ```python import pefile pe = pefile.PE('malware.exe') # 基本信息 print(f"Entry Point: {hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)}") print(f"Image Base: {hex(pe.OPTIONAL_HEADER.ImageBase)}") # 导入表 for import_entry in pe.DIRECTORY_ENTRY_IMPORT: print(f"DLL: {import_entry.dll.decode()}") for func in import_entry.imports: print(f" - {func.name.decode() if func.name else hex(func.ordinal)}") # 导出表 if hasattr(pe, 'DIRECTORY_ENTRY_EXPORT'): for export in pe.DIRECTORY_ENTRY_EXPORT.symbols: print(f"Export: {export.name.decode()}") ``` ### 可疑 PE 特征 | 特征 | 说明 | 检测意义 | |------|------|----------| | **入口点异常** | EP 不在.text 节 | 可能加壳或注入 | | **节区名称异常** | 随机名称、非常规名称 | 可疑 | | **节区大小异常** | 节区大小与声明不符 | 可能隐藏数据 | | **导入表异常** | 大量敏感 API | 恶意功能 | | **资源异常** | 大资源、可执行资源 | 可能包含 payload | | **重定位缺失** | 无.reloc 节 | 可能为 DLL 或有问题 | | **时间戳异常** | 时间戳为 0 或未来时间 | 可疑 | ### 导入表分析 #### 敏感 API 分类 | API 类别 | 示例 API | 可能用途 | |----------|----------|----------| | **进程操作** | CreateProcess, OpenProcess | 进程注入 | | **内存操作** | VirtualAlloc, WriteProcessMemory | 代码注入 | | **线程操作** | CreateRemoteThread | 远程执行 | | **文件操作** | CreateFile, WriteFile | 文件投放 | | **注册表** | RegSetValueEx | 持久化 | | **网络** | socket, connect, HTTPSendRequest | C2 通信 | | **加密** | CryptEncrypt, CryptDecrypt | 数据加密 | | **凭证** | CredEnumerate, SamIConnect | 凭证窃取 | #### 导入表分析脚本 ```python # 检测敏感 API suspicious_apis = [ 'VirtualAlloc', 'VirtualAllocEx', 'VirtualProtect', 'CreateRemoteThread', 'WriteProcessMemory', 'CreateProcess', 'ShellExecute', 'WinExec', 'RegSetValueEx', 'CreateService', 'InternetOpen', 'HttpSendRequest', 'URLDownloadToFile', 'CryptEncrypt', 'CryptDecrypt', 'CredEnumerate', 'SamIConnect' ] for import_entry in pe.DIRECTORY_ENTRY_IMPORT: for func in import_entry.imports: if func.name and func.name.decode() in suspicious_apis: print(f"发现敏感 API: {import_entry.dll.decode()}!{func.name.decode()}") ``` --- ## 反汇编基础 ### 反汇编工具 #### IDA Pro **特点**: - 业界标准 - 强大反汇编 - 图形化控制流 - 插件丰富 **基本使用**: ``` 1. 打开样本 2. 选择处理器类型(通常 Auto) 3. 等待分析完成 4. 查看 Functions 窗口 5. 双击函数查看反汇编 6. 按 F5 查看伪代码 ``` #### Ghidra **特点**: - NSA 开源 - 免费 - 功能接近 IDA - 支持多平台 **基本使用**: ```bash # 启动 Ghidra ./ghidraRun # 导入项目 File → New Project File → Import File # 分析 Double-click 文件 → Analyze → OK ``` #### radare2 **特点**: - 开源命令行 - 脚本友好 - 轻量级 **基本命令**: ```bash # 打开文件 r2 malware.exe # 分析 aaa # 分析全部 afl # 列出函数 # 查看入口 s entry0 pd 20 # 反汇编 20 行 # 查找字符串 /str http iz # 打印字符串 # 退出 q ``` ### 汇编基础 #### 常见指令 | 指令 | 说明 | 示例 | |------|------|------| | **MOV** | 数据传送 | MOV EAX, EBX | | **PUSH/POP** | 入栈/出栈 | PUSH EAX | | **CALL** | 调用函数 | CALL function | | **RET** | 函数返回 | RET | | **JMP** | 无条件跳转 | JMP label | | **JE/JNE** | 条件跳转 | JE label | | **CMP** | 比较 | CMP EAX, 0 | | **XOR** | 异或 | XOR EAX, EAX | | **ADD/SUB** | 加减 | ADD EAX, 1 | #### 函数识别 ``` 函数典型结构: push ebp ; 保存基址指针 mov ebp, esp ; 设置新基址 sub esp, X ; 分配栈空间 ... ; 函数体 mov esp, ebp ; 恢复栈 pop ebp ; 恢复基址 ret ; 返回 ``` ### 控制流分析 #### 控制流图 ``` IDA/Ghidra 中查看: - 绿色线:条件为真时的跳转 - 红色线:条件为假时的跳转 - 蓝色线:无条件跳转 分析要点: - 识别循环 - 识别条件分支 - 识别函数调用 ``` #### 关键代码定位 ``` 定位方法: 1. 从入口点开始 2. 追踪主要分支 3. 识别 API 调用 4. 分析数据引用 5. 理解程序逻辑 ``` --- ## 代码特征分析 ### 恶意代码特征 #### 进程注入特征 ```assembly ; 典型进程注入代码 push 0x2000 ; PAGE_EXECUTE_READWRITE push 0x1000 ; MEM_COMMIT push offset size push 0 ; 地址(NULL = 系统分配) call VirtualAlloc ; 分配内存 push hProcess push offset payload push size push lpBaseAddress call WriteProcessMemory ; 写入代码 push 0 push 0 push hProcess call CreateRemoteThread ; 执行代码 ``` #### 持久化特征 ```assembly ; 注册表持久化 push HKEY_CURRENT_USER call RegOpenKeyEx push offset "Software\\Microsoft\\Windows\\CurrentVersion\\Run" push offset valueName push offset data call RegSetValueEx ``` #### C2 通信特征 ```assembly ; HTTP C2 通信 push userAgent push acceptTypes push NULL call InternetOpen ; 初始化 WinINet push server call InternetOpenUrl ; 连接 C2 push buffer push bufferSize call InternetReadFile ; 读取指令 ``` ### 混淆技术识别 #### 字符串混淆 ``` 识别方法: - 字符串在非常规节区 - 字符串被加密/编码 - 运行时解密 分析: 1. 找到解密函数 2. 模拟解密 3. 提取原始字符串 ``` #### 代码混淆 ``` 常见混淆: - 垃圾指令插入 - 等价指令替换 - 控制流平坦化 - 死代码插入 应对: - 识别并跳过垃圾代码 - 使用去混淆工具 - 关注关键 API 调用 ``` #### 加壳检测 ``` 加壳特征: - 入口点在非常规位置 - 节区名称异常(UPX0, UPX1) - 导入表很小或为空 - 代码熵值高 工具检测: - Detect It Easy - PEiD - Exeinfo PE 脱壳: - 自动脱壳:UPX -d - 手动脱壳:调试器 + 转储 ``` --- ## YARA 规则编写 ### YARA 基础 #### 规则结构 ```yara rule rule_name { meta: description = "规则描述" author = "作者" date = "2024-04-12" reference = "参考链接" strings: $string1 = "恶意字符串" ascii $hex1 = { 4D 5A 90 00 } $regex1 = /http[s]?://[a-z]+\.evil\.com/ condition: $string1 and $hex1 } ``` ### 字符串类型 | 类型 | 语法 | 说明 | |------|------|------| | **文本** | "string" ascii | ASCII 字符串 | | **宽字符** | "string" wide | Unicode 字符串 | | **十六进制** | { 4D 5A 90 } | 字节序列 | | **正则** | /regex/ | 正则表达式 | | **XOR** | "string" xor(1-255) | XOR 编码 | ### 条件语法 ```yara // 逻辑运算 $string1 and $string2 $string1 or $string2 not $string1 // 数量条件 2 of ($s*) // 任意 2 个匹配 all of ($s*) // 全部匹配 $ s* // 任意一个匹配 // 位置条件 $ string1 at 0 // 在文件开头 $ string1 in (0..100) // 在前 100 字节 // 计数条件 #string1 > 5 // 出现超过 5 次 ``` ### 恶意软件家族规则 ```yara rule CobaltStrike_Beacon { meta: description = "Detect Cobalt Strike Beacon" author = "Security Team" malware_family = "Cobalt Strike" strings: $header = "BEACON" ascii $config = "Cobalt Strike" ascii $s1 = "Mozilla/5.0 (Windows NT" ascii $s2 = "Accept: */*" ascii condition: $header or ($s1 and $s2) } ``` ### 规则测试 ```bash # 测试规则 yara -r rules.yar /path/to/samples/ # 输出匹配 # 调试规则 yara -d rules.yar sample.exe ``` --- ## 总结与思考 ### 核心要点回顾 1. **静态分析是基础** - 安全、快速、可自动化 2. **字符串分析价值高** - 直接提取 IOC 3. **PE 结构要熟悉** - 发现异常特征 4. **反汇编是核心技能** - 深入理解代码 5. **YARA 用于自动化** - 批量检测和分类 ### 实战建议 1. **建立分析环境** - 准备完整工具链 2. **编写分析脚本** - 自动化常规分析 3. **积累特征库** - 持续更新 YARA 规则 4. **学习汇编** - 提高逆向能力 5. **分享交流** - 参与社区分析 --- ## 参考资料 ### 工具资源 - **IDA Pro** - https://hex-rays.com/ida-pro/ - **Ghidra** - https://ghidra-sre.org/ - **radare2** - https://rada.re/n/ - **Detect It Easy** - https://github.com/horsicq/DIE-engine ### 学习资源 - **Practical Malware Analysis** - 经典书籍 - **Reverse Engineering for Beginners** - 免费教程 - **YARA Documentation** - https://virustotal.github.io/yara/ --- *365 天信息安全技术系列 | Day 276 | 恶意代码静态分析技术*
myh0st
2026年4月13日 23:21
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码