技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
re-anti-analysis【数据与研究】反分析对抗网关。编排:壳识别 → 简单壳脱壳 → 强壳脱壳 → 反混淆。 子技能:[[re-packer-id]] [[re-unpack-simple]] [[re-unpack-advanced]] [[re-deobfuscate]] [[re-evasion]]。 触发词:脱壳、查壳、加壳识别、壳、UPX、VMProtect、Themida、反调试、反混淆、花指令、unpack、anti-analysis。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
unpack) —— 先识别再动手。DIE/PEiD 签名库扫描、节名异常(UPX0/.aspack/自定义)、入口点是否指向非首节、熵 >7、导入表极小。先记 OEP 线索(EP 附近 pushad 等壳入口特征),识别出的壳名决定路径unpack);强壳/虚拟化壳(VMProtect/Themida)→ [[re-unpack-advanced]](能力:unpack);识别不出 → 手动流程(按 [[re-unpack-simple]](能力:unpack) 的 ESP 定律 + 内存断点手动找 OEP,或按强壳流程处理),不硬猜壳名unpack) —— 优先官方/自动解包(upx -d)→ ESP 定律 / 内存断点找 OEP → 按明文/代码 materialization 定转储时机(单层壳常在真实 OEP 附近,OEP 非通用判据;时机见 [[re-analyze/platform-tips]] 关键经验,默认转储优先)→ IAT 修复(Scylla/ImpREC,Windows)unpack) —— 反调试对抗(scyllaHide 思路:NtQueryInformationProcess/时间差)→ 堆栈回溯/内存断点组合找 OEP → 转储(默认转储优先)→ IAT 修复(含重定向)→ 虚拟化代码区域标注(标记绕过而非还原)deobfuscation) —— 脱壳后若仍有花指令 / 控制流平坦化 / 字符串加密:花指令清除、平坦化还原(D-810/手动)、字符串解密循环定位与仿真、批量脚本化、还原前后对比验证sandbox-setup) 判定脱干净、[[re-analyze/platform-tips]] 最高原则)→ 导入 [[re-ghidra]](能力:decompilation、debugging) / [[re-ida]](能力:decompilation、debugging) 确认 OEP 处可正常反编译;导入表可解析才算完成。产物交回原调用域继续(恶意样本回 [[re-malware]](能力:malware-behavior、document-malware、evasion-analysis、key-extraction、threat-intel) 行为分析、破解目标转 [[re-cracking]](能力:license-analysis) 授权定位)每步结果存档(证据路径 + sha256,见 [[re-triage]](能力:triage));壳指纹 / 脱壳产物是 [[re-ioc]](能力:threat-intel) YARA 特征来源。
本网关适用的反调试分析方法论(用户实战经验),各技能坑与陷阱引用此处。
本网关适用的反虚拟化分析方法论(用户实战经验),各技能坑与陷阱引用此处。
先识别、再选脱壳路径;识别不出走手动流程。
unpack) 识别 → 按结果分支(不跳步)
unpack)unpack)unpack) 的 ESP 定律 + 内存断点尝试;失败或发现反调试/虚拟化特征 → [[re-unpack-advanced]](能力:unpack) 手动脱壳unpack) 即可,不进入脱壳deobfuscation)decompilation、debugging、memory-dump、elf-parser、pe-parser、macho-parser;[[re-ghidra]](能力:decompilation、debugging) / [[re-ida]](能力:decompilation、debugging) / [[re-radare2]](能力:decompilation))直接分析evasion-analysis;动态优先,配 [[re-sandbox]](能力:sandbox-setup) / [[re-memdump]](能力:memory-dump))memory-dump;默认转储,按 materialization 定时机);Windows 调试 → [[re-x64dbg]](能力:debugging);Linux/Wine 调试 → [[re-gdb]](能力:debugging)跳过识别直接脱:现象——拿样本就上调试器/OEP 流程,撞上强壳反调试或浪费时间;原因——没先判壳类别;对策——先 [[re-packer-id]] 识别,简单壳自动解包秒解,强壳才值得上手动流程
转储时机过早:现象——dump 出来还是壳的初始状态(压缩/加密数据),脱了个寂寞;原因——明文/代码尚未 materialize 就转储;对策——单层壳在真实 OEP 附近通常合适,但 OEP 非通用判据,多阶段/按需解密/虚拟化/反射加载等按「写→执行转移 + 内存保护变化 + payload 头/导入恢复」定 dump 点([[re-analyze/platform-tips]] 关键经验,默认转储优先)
IAT 不修当成品:现象——脱壳后导入表乱,Ghidra/IDA 反编译一片混沌;原因——导入表在壳内动态重建,转储未修复;对策——Windows 上 Scylla/ImpREC 修复,修复后重新反编译验证
壳套壳:现象——脱完一层发现里面还有一层(UPX 里包 Themida 等);原因——多层加壳是常见反分析手法;对策——脱一层验证一层(sha256 + 导入表 + 沙箱复跑),套层时回到第 1 步重新识别
反调试干扰整个流程:现象——调试器断点不生效、进程退出、时序错乱;原因——样本检测调试器(NtQueryInformationProcess、时间差、调试端口);对策——[[re-unpack-advanced]] 反调试对抗先行(scyllaHide 思路),先攻最外层检测
OutputDebugString 计时陷阱:现象——样本调用 OutputDebugStringA/W 后行为不同,或调试器下某段代码明显变慢触发时间检测;原因——调试器处理 ODS 消息有固定慢路径(接收-格式化-刷新),样本以长字符串 ODS 调用的耗时差异当调试器探针(2024-2025 恶意样本仍在使用);对策——定位 ODS 调用点断住/绕过(返回假值或直接跳过),或 scyllaHide 隐藏 ODS 处理,与时间差检测(AD9)一并排查
高熵≠加密:现象——.of2 这类节 4KB 熵 7.9 判"整体加密",静态放弃;原因——可能是压缩(deflate 无标准头)、VMProtect 变异代码、或纯数据;对策——分区采样(入口区 64B 熵可能只有 5.6 是真代码),先排除压缩与变异再谈加密;变异代码特征:ror/xor 链 + 跨区 jmp、顺序解码出现 fcom/int 88h/ret far 类垃圾但入口 24 字节是 call/syscall 结构
调试体系全链路(反调试点位):现象——不理解"附加为什么让程序暂停"、不知道反调试该改哪里;原因——缺 Windows 调试体系全链路认知;对策——链路:DebugActiveProcess→DbgUiConnectToDbg(创建 DEBUG_OBJECT 先挂调试器,句柄存 TEB->DbgSsReserved[1](偏移 0x16A8))→NtDebugActiveProcess→DbgkpSetProcessDebugObject(被调试进程挂上)+DbgkpPostFake*Messages(附加时刷屏的"创建线程/加载 dll"假消息);调试事件流:被调试进程检测被调试→创建 DEBUG_EVENT 挂入 EventList 双向链表→置位 EventsPresent 信号量唤醒调试器→死等 ContinueEvent;反调试点:DbgUiRemoteBreakIn 创建远程线程执行 int3 让程序断下(去掉该 int3 则附加断不下来);TEB+0x16A8 是调试对象句柄(检测/篡改干扰调试器);异常先发给调试器(DbgkSendApiMessage→DbgkpQueueMessage,flag=0 需等待 vs NOWAIT 假消息)
so 函数级加密(dlsym 运行时解密):现象——so 里个别函数(如 mymyadd)反编译是乱码/未定义指令,其余正常;原因——so 加固把目标函数按符号名加密:函数代码段静态是密文,运行时 dlopen+dlsym 前先解密覆盖、调用完再加密回去;对策——还原思路:dlsym 符号解析链(__loader_dlsym→dlsym_impl→do_dlsym→dlsym_handle_lookup→find_symbol_by_name,GNU hash / ELF hash 二选一:GNU hash 需算 gnu_hash + 布隆过滤器 + 从 PT_DYNAMIC 找符号表),按 ELF 头→程序头表→PT_DYNAMIC 定位符号表与哈希表计算函数位置与大小;动态侧:断 dlopen/dlsym 返回后、解密后的函数内存处 dump(转储时机关键经验);变体:段头 type 逐段 XOR(MODE_DUPLEX)需要自定义 linker 加载才能跑;还有对 .text 整体加密后自解密——先确认是函数级还是段级再选方案