executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
re-crypto-decrypt加密数据还原:定位解密函数、写解密脚本。 触发词:解密、decrypt、还原数据、解密流量
Independent GitHub snapshot · Automated classification · Original documentation governs
所有工具先验证再使用。本技能处理的是转储/反编译产物与密文数据,运行样本环节在 [[re-sandbox]] 内([[re-analyze/platform-tips]] 最高原则)。
apt install python3 python3-pip / dnf install python3 python3-pip / pacman -S python python-pipbrew install pythonpip install pycryptodome(AES/DES/RSA/ChaCha 等标准算法)python3 -c "from Crypto.Cipher import AES; print('ok')";python3 --versionfile out 是 ELF core;反编译器里能找到目标函数(ghidra / rizin 可启动)pip install angr——Python 版本兼容性以 [[re-angr]] 的「工具准备」为准(版本矩阵只在该处维护一份,避免多处漂移);依赖多,建议 venv: python3 -m venv venv && venv/bin/pip install angrvenv/bin/python -c "import angr; print(angr.__version__)"按顺序执行,每步记下结果。前提:算法([[re-crypto-id]])与密钥([[re-crypto-keys]])已确认或至少有一方候选;脚本与验证结果(明文样本 + sha256)存档供报告引用。
证伪"密文":先定位真实密文边界(跳过此步是加密分析最常见的失败方式):
cd_offset/cd_size 反推数据起点,EOCD 签名是已知明文)IEND 字样可落在 tEXt chunk 数据内、JPEG 的 FF D9 可落在 APP1 等 length-delimited 段内(拿首个命中当结尾会截掉合法数据)。正确做法是按格式规范解析:PNG 从 8 字节签名起按 Length/Type/Data/CRC 逐 chunk 遍历,直到结构合法且长度为 0 的 IEND(必要时逐块验 CRC);JPEG 从 SOI 起按 marker/segment 解析,进入 SOS 后按 FF00 stuffing 与 RSTn 规则处理,语法位置成立的 EOI 才是结尾。裸字节搜索只能用来产生候选位置,候选要经结构校验后才能定边界定位解密函数(交叉引用密文输入点):
Crypt*/EVP_* 调用点就是候选;观察入参的密文指针是否指向步骤 2 的偏移反编译还原算法:
重写为独立脚本(python):
# decrypt.py —— 按反编译还原的算法重写
from Crypto.Cipher import AES
import sys
key = bytes.fromhex("...") # 来自 [[re-crypto-keys]] 步骤 1/2/5
iv = key[:16] # 样本实现: IV = key 前 16 字节
data = open(sys.argv[1], 'rb').read()
pt = AES.new(key, AES.MODE_CBC, iv).decrypt(data)
print(pt) # 或写文件 + 后续校验
用已知明文验证:
\xAA\x55)、文件头(PK zip / \x89PNG)、报文字段([[re-proto-rev]] 步骤 2 的固定头)、或 [[re-behavior]] 行为里观察到的明文串file - 识别出格式(PDF/zip/文本)→ 视为成功候选流量场景:解出明文流量流:
tshark -r c2.pcap -Y 'tcp.payload' -T fields -e data.data | sed 's/://g' | xxd -r -p > payloads.bin
\n + = = 66 符号、Ascii85 85、hex 16 等;命中后 XOR 还原 → 解码;交叉验证:填充符(如 = 加密后仅出现 1 次在文件尾)、换行符频率、解码后魔数ImageChops.logical_xor 或 numpy a^b 逐像素 XOR 两图(RGB 三通道);结果常是"99.5% 纯白背景 + 极浅灰文字"(文字 254 vs 背景 255)——直接看/反色都不可见,用阈值增强:==255 → 黑、其余 → 白,文字立现;位图小字再按字符网格(5x7)切分逐字读,重复字符用两两位图相似度矩阵验证(如 d562333d 的重复模式)clip(a+b) 饱和加法与 a-b 减法,多运算组合对比r_1_0 类字段);对策——按"每层单独验证"纪律分层剥(熵降/可读即前进一层,见多轮解密链坑);注意同源 SDK 的"整体加密"可能再套 VM 化算法(约 70 个 handle 模拟基本指令、handle 未混淆时可逐个识别指令语义);key 来源分随机(抓包不可复现)与固定(可静态找)两类,先固定后随机03000001)再进同一函数;且加解密可能是同一函数(标志位控制方向);对策——hook 解密函数返回点批量导出全部解密字符串(JNI_OnLoad 前 memcpy 的加密串 → 全局变量 → 解密函数),key/iv 直接在其中搜索;找加密点用 findcrypt 扫特征常量(AES S-box 等)→ xref 定位校验 key/iv 长度(16)的函数;动态 hook 打印两次调用前后数据对照验证