把 classes.dex 藏起来就安全了?主流加固方案的真实防线

读完本文,你将获得: 分清 R8、代码混淆、DEX 加壳、函数抽取、DEX2C、VMP、SO 保护与 RASP 到底解决什么问题 看懂一个加固 APK 从 CI 构建、后处理、对齐、重签名,到壳启动、完整性校验和业务代码加载的完整链路 了解 360、阿里 mPaaS、爱加密、梆梆、腾讯乐固,以及 DexGuard、Promon、Appdome、AppSealing、Google Play 方案的公开能力与证据边界 理解为什么加固必须与 APK 签名、Play Integrity、设备注册、账号图谱和服务端风控组合,而不能独自承担“客户端可信” 获得一套可执行的 release 参数、性能基线、兼容性矩阵和加固验收方法 〇、摘要:壳不是保险柜,它是一套成本控制系统 Android APK 对逆向工程天然友好。 classes.dex 不是源码,却保留了大量类、方法、调用和数据流语义;resources.arsc、Manifest、Assets、字符串和 native SO 又把接口、功能开关、协议常量、JNI 边界与第三方 SDK 关系一并交给了终端用户。一个正常用户看到的是登录、支付和播放页面,分析者拿到的却是一份可以离线拆解、反复运行和任意修改的程序副本。 APK 加固由此产生。它要处理的不是一个问题,而是四类问题: 代码理解。 降低 Java/Kotlin、C/C++、Flutter、Unity 或脚本逻辑被快速恢复和复用的概率。 运行时观测。 增加调试、Hook、注入、内存读取和自动化批量控制的成本。 篡改与重打包。 发现签名、代码、资源、调用顺序或运行环境发生了不符合预期的变化。 业务滥用。 把客户端风险信号传给服务端,让登录、领券、支付、游戏结算、内容授权等动作得到分级处置。 但有一条物理事实绕不过去:代码要在用户控制的设备上执行,处理器最终就必须获得明文指令、解码后的类,或与原算法等价的 VM 语义。 加固可以缩短稳定观测窗口、打散结构、改变执行形态、提高自动化规模成本,却无法把白盒客户端变成服务端 HSM。 所以本文的主线不是“哪家的壳最硬”,而是: 1 2 资产分级 -> 构建期变换 -> 包与运行时保护 -> 平台可信证明 -> 设备/安装身份连续 -> 绑定业务动作 -> 风险处置与反馈 这条链也把前两篇文章接了起来:Chrome VMP讨论如何让关键语义难以稳定观测,设备指纹与设备注册讨论如何把端上证据放进服务端身份和业务图谱。APK 加固位于两者之间:它保护”客户端如何执行”,但不能独立回答”服务端为什么应该相信这次请求”。 ...

August 25, 2026 · 9 min · 1723 words · +5

一个 Canvas 当然认不出你:海内外主流 Web / Android 设备指纹与风控体系全景

〇、研究证据与方法声明 本文是一篇横向综述,不是单一目标的逆向工程报告。核心方法是文献综述 + 公开材料交叉验证 + 版本样本观察,辅以少量一手逆向实验作为交叉校准。以下声明帮助读者判断每条结论的可信度和适用边界。 方法论 项目 说明 研究方法 文献综述 + 逆向验证 + 横向对比 覆盖范围 8 个国内平台(抖音/字节系、快手、淘宝、蚂蚁/支付宝、夸克、拼多多、美团、小红书)+ 7 类海外产品(Fingerprint、Cloudflare、Arkose、Stripe Radar、Sift、ThreatMetrix、Play Integrity)+ Netflix MSL 协议专题,共计 16+ 平台/产品 技术维度 5 大方案类别(第一方状态、概率指纹、完整性证明、网络与行为检测、业务图谱)x 7 个工程环节(采集、封装、校验、归一化、召回、匹配、图关联) 证据分级 A(官方公开文档与平台规范)/ B(架构映射与开源代码分析)/ C(版本化逆向样本与社区观察)– 详见 §1.4 证据来源统计 等级 来源数 典型代表 A:公开确认 ~50 Android 官方文档(标识符最佳实践、Play Integrity、Key Attestation)、W3C 指纹缓解规范、各平台隐私政策(淘宝/拼多多/美团/小红书/夸克/快手)、厂商产品文档(阿里云设备风控、Fingerprint API、Cloudflare Bot Management、Stripe Radar、Sift、Arkose)、火山引擎 DataFinder、Netflix MSL 开源规范 B:架构映射 ~10 学术论文(Laperdrix 浏览器指纹综述、Eckersley Panopticlick、Vastel FP-STALKER)、开源项目代码分析(FingerprintJS、CreepJS、RiskEngine、TrustDevice)、顶象算法公开说明、GeaFlow 流式图计算 C:外部观察 ~7 看雪社区版本样本(淘系 SecurityGuard、美团 mtgsig、拼多多 libpdd_secure)、仓库内抖音 v37.5 MetaSec 实验记录、仓库内 Netflix MSL 协议逆向日志 范围限制 本文的"留白"是刻意的设计选择,以下是主要已知限制: ...

August 25, 2026 · 16 min · 3217 words · +5

把 Netflix MSL 拆成字节 - 一次协议逆向的路线、踩坑与经验

读完本文,你将获得: 一个常被忽略的问题的答案:既然已经有 HTTPS,Netflix 为什么还要在里面再套一层自研的 MSL 加密信道? MSL 消息的字节级结构:header envelope、encrypted envelope、payload chunk 三层是怎么嵌套的,encrypt-then-MAC 到底对哪段 bytes 签名 CBOR integer key 编码的真实字节,以及为什么 bytes 写成 text、headerdata 内联成 map 会让服务端直接 502 一套不依赖“协议很复杂所以安全”的评估框架:MSL 能保护什么、哪些属性取决于部署配置,以及攻击者会转向哪些边界 〇、摘要 本文记录笔者对 Netflix Message Security Layer (MSL) 的一次协议逆向。 和前几篇 Widevine / FairPlay 文章不同,这次的目标不是攻破某个白盒 AES,而是把一个真实商业客户端的应用层加密协议,拆成能对着字节解释、能复现、能被服务端接受或拒绝的结构。产出是两个最小实现: nfmsl.py:单文件 Python 研究客户端,每一层中间结构都能打印,用来做字段 diff 和错误二分; Android MslClient:用真机 MediaDrm / CryptoSession 复现 Android 侧的 MSL 加密签名链路。 真正的突破点不是拿到某个密钥,而是把下面这些东西对齐到服务端能接受的 wire format: MSL 消息的三层信封结构,以及 encrypt-then-MAC 中「签名签的是密文而非明文」这一点; CBOR integer key 编码里 bytes/text、内联 map/加密 envelope 的字节差异; MasterToken 与 UserIdToken 通过 mtserialnumber 建立的字段级绑定; ASYMMETRIC_WRAPPED 与 WIDEVINE 两类 Key Exchange 的密钥归属差异; licensedManifest 把 Manifest 与 Widevine license challenge 合并进同一个 payload 的结构。 本文同时区分三个容易混淆的对象:Netflix 开源 MSL 框架的能力、本文观测到的 Netflix 客户端协议实例、Netflix 当前生产环境的完整安全策略。前两者可以由公开文档和实验字节支持;第三者还包含服务端风控、密钥托管、撤销策略和设备分级,不能仅凭客户端逆向完整证明。 ...

August 15, 2026 · 18 min · 3744 words · +5

当 Hook 失效的那一刻:SVC 指令级系统调用保护的攻防

读完本文,你将获得: 理解 ARM64 SVC 指令如何绕过所有 libc 层 hook,以及为什么 Frida 的 Interceptor.attach 对它束手无策 掌握 SVC 在 Android 安全对抗中的五种核心用法:反 ptrace、反 Frida、完整性校验、线程检测、seccomp-BPF 获得一套从"进程莫名崩溃"到"定位 SVC 指令并绕过"的完整排查方法论 对比六种绕过方案(Frida Stalker / seccomp / 内核模块 / eBPF / binary patch / 仿真)的工程权衡 〇、摘要 本文系统分析了 Android 应用中基于 SVC(Supervisor Call)指令的内联系统调用保护技术。笔者在对多个商业级加固方案的逆向分析中,反复遭遇 “hook 了 libc 但保护照样触发” 的困境,最终追溯到 SVC 这个 ARM 指令集的原子操作。 核心发现与贡献: 五种 SVC 对抗模式梳理:从实际样本中提炼出 anti-ptrace、anti-Frida(/proc/self/maps 扫描)、文件完整性校验、线程枚举检测、seccomp-BPF 五种典型用法 🧑‍🔬 六种绕过方案的工程对比:Frida Stalker、seccomp-BPF 拦截、内核模块、eBPF、binary patch、Unicorn 仿真,各有适用场景和代价 🧑‍🔬🔬 完整实战案例:从"Frida attach 就崩溃"到定位 3 处 SVC 指令并逐一绕过的全过程,包含 4 次失败尝试 🔬 SVC 保护的真实边界分析:SVC 不是银弹——它保护的是调用路径而非调用逻辑,一旦攻击者切换到内核视角,保护立即失效 🧑‍🔬 防御建议:从防御者角度给出 SVC 保护与 OLLVM/VMP/服务端验证组合的分层策略 🧑‍🔬 Research Evidence Environment Item Detail Device Pixel 7 (panther), rooted (Magisk 27.0) OS Android 14 (UP1A.231105.001) Target 某商业加固 SO(arm64-v8a, ~2.1 MB),具体应用脱敏处理 Architecture arm64-v8a (AArch64) IDA Pro 9.0 SP1 Ghidra 11.1.2 Frida 16.5.9 (server) + 16.5.2 (client) strace Android NDK r26d bundled seccomp tools libseccomp 2.5.5, seccomp-tools (Ruby gem) Kernel 5.15.148-android14 (custom build with ftrace enabled) Hypothesis H1: 应用检测到调试器是通过 libc 的 ptrace() 调用实现的,hook libc ptrace 即可绕过 H2: Frida attach 后崩溃是因为 /proc/self/maps 中出现了 frida-agent 的映射,应用通过 libc open/read 读取 H3: SVC 指令的 syscall number 硬编码在 .text 段中,可通过模式搜索 D4000001(SVC #0 编码)批量定位 H4: seccomp-BPF 可以拦截所有 SVC 调用,包括从 .text 段直接发出的内联调用 H5: binary patch 将 SVC 指令替换为 NOP 是最简单有效的绕过方式 Experiments ID 实验 验证假设 结果 关键证据 E01 hook libc ptrace 返回 0 H1 ✗ FAIL hook 生效但进程仍然检测到调试器并 exit E02 hook libc openat/read 过滤 maps 读取 H2 ✗ FAIL /proc/self/maps 从未出现在 hook 日志中,但进程仍然崩溃 E03 strace 观察实际 syscall H1, H2 ✓ PASS 发现 ptrace(PTRACE_TRACEME) 和 openat(/proc/self/maps) 直接出现在 strace 输出中,未经 libc E04 IDA 搜索 SVC #0 指令编码 H3 ✓ PASS .text 段找到 17 处 SVC #0(01 00 00 D4),其中 3 处与反调试直接相关 E05 seccomp-BPF 拦截 SVC ptrace H4 ✓ PASS seccomp filter 成功拦截 __NR_ptrace(117),进程不再崩溃 E06 NOP patch SVC 指令 H5 ⚠️ PARTIAL 反 ptrace 绕过成功,但 SO 完整性校验(也是 SVC 实现)检测到 patch 后 abort E07 Frida Stalker 动态替换 SVC 返回值 - ✓ PASS 成功绕过全部 3 处 SVC 保护,进程正常运行 一、路线总览 这一节给出整个分析的宏观路线图。如果你已经熟悉 SVC 的基本概念,可以直接跳到 §四 看实战。 ...

August 8, 2026 · 28 min · 5806 words · +5

拆开 anti-token 以后 - 拼多多历史样本中的环境记录与服务端盲区

〇、摘要 🧑‍🔬 笔者第一次整理拼多多 libpdd_secure.so 资料时,建了一张很长的字段表:系统属性、Build、网络、SIM、时间、随机量,一项项排得很整齐。表格越完整,文章看起来越像已经还原了”设备指纹”。 问题也恰好出在这里。看雪帖子描述的是特定历史样本中的环境记录、缓存和封装;拼多多隐私政策描述的是产品在安全场景下可能处理的数据类别。前者缺少服务端,后者不是抓包。把两份材料合起来仍然得不到稳定设备 ID,更得不到当前画像模型和交易阈值。 最后只保留那些经得住版本变化的观察:历史 Native 代码曾组织环境记录,记录经过结构化封装和保护后形成输出;部分内容有缓存,动态量会随调用变化。字段顺序、前缀、偏移、密钥和生成步骤则全部省略。研究目的不是做一个 anti-token 生成器,而是看清客户端包裹到达网络边界后,还缺哪些证明。 Research Evidence Methodology Item Detail 文章类型 Type B:官方政策与历史逆向材料复核 资料截止 2026-07-06;实质来源均早于 2026-07-23 发布日期 证据标记 A:官方公开;B:通用防守架构判断;C:第三方历史样本观察 一手实验 无;未下载附件、运行 APK/SO、生成 Token 或请求线上接口 公开边界 不提供密钥、IV、前缀、字段顺序、偏移、函数地址和请求模板 Sources & Evidence Grading 来源 等级 使用方式 拼多多隐私政策,2025-07-08 生效 A 安全用途、数据类别、IMEI 历史版本边界 libpdd_secure.so 指纹算法分析(下篇),2025-12-02 C 7.80 历史样本、作者对 7.85 的说明、记录与封装观察 anti-token 纯算法分析,2026-07-06 C Native 记录容器、缓存和动态记录的外部观察 Android 10 隐私变更与 Play Integrity 概览 A 标识符限制、请求绑定和分级处置的通用原则 Scope Limitations 没有可独立核验的 APK 渠道、完整版本、APK/SO SHA-256、ABI、设备构建号和抓取时间。 7.80 与 7.85 的接近程度来自原帖作者陈述,笔者没有做二进制差分。 2026 年帖子未在公开正文中给出可与 7.80/7.85 对齐的 App 版本,笔者不替它补版本号。 网络边界后的画像、图谱和处置流程均为 B 级职责模型,不代表拼多多内部实现。 负责任披露:这次材料复核用于安全评审与隐私核查,不建议把历史材料用于模拟客户端、批量请求、营销作弊或规避平台处置。 ...

July 23, 2026 · 2 min · 365 words · +5

当 sign() 函数变成了两万行伪代码

读完本文,你将获得: 理解 Android Native VMP 保护的三代架构演进:从固定 opcode 到状态依赖调度 掌握一套识别 dispatcher、枚举 handler、恢复 opcode 语义的工程方法 经历一个 VMP 保护签名函数的完整分析过程,包括五次失败和三次策略转向 看清 VMP 保护的真实安全边界:它提高了静态分析成本,但 unidbg/Unicorn 黑盒调用可以完全绕过 区分 VMP 与 OLLVM 的适用场景,理解"VMP 了就安全了"为什么是危险的误解 获得一组面向防御者的改进提案,从 P0 到 P3 〇、摘要 Android 生态里,VMP(Virtual Machine Protection / 代码虚拟化保护)是国内加固厂商和头部 App 保护关键 Native 逻辑的主要手段之一。它把原始 ARM/ARM64 指令编译为自定义字节码,由嵌入 SO 的解释器在运行时调度执行,使 IDA Pro 的反编译结果从"可读的 C 伪代码"退化为"两万行 switch-case 状态机"。 笔者在过去两年中分析过多个使用 VMP 保护签名算法的 Android App,积累了以下观察: VMP 的核心价值不是"防逆向",而是"防低成本逆向":它把分析门槛从"F5 一下就能读"提高到"需要恢复 VM 指令集才能理解语义",但不能阻止 unidbg/Unicorn 级别的黑盒调用。 三代 VMP 的区分不在"有没有 VM",而在 dispatcher 的状态依赖程度:一代用固定 handler table,二代用编码 opcode + 动态 dispatch,三代把 dispatch 本身变成状态机输出。 实战中击穿 VMP 保护签名函数的关键转向,往往不发生在 VM 内部:笔者多次在 I/O 边界、JNI 桥接层或 memory pattern 上找到突破口,而不是靠完整还原 VM 指令集。 VMP 与 OLLVM 是互补而非替代关系:OLLVM 保护控制流,VMP 保护指令语义,两者组合才能同时抵御 symbolic execution 和静态反编译。 “VMP 了就安全了"是当前最危险的工程误解:侧信道、I/O 边界、timing pattern 和黑盒模拟器四条路径都不需要理解 VM 内部语义。 本文是一篇原创逆向研究文章(Type A),记录笔者分析 Android Native VMP 的实战过程、失败路径和方法论积累。与本博客的 Chrome VMP 文章 不同,那篇讨论的是 DRM/Widevine 场景下的白盒密码学保护;本文聚焦 Android App 保护厂商(360加固、梆梆、爱加密等)和自研 VMP 实现,目标对象是签名算法、加密模块和反作弊逻辑,分析工具链以 IDA Pro + Frida + unidbg/Unicorn 为主。 ...

July 10, 2026 · 20 min · 4071 words · +5

签名过了,订单就安全吗 - 重读美团 mtgsig、DFP 与服务端风控

〇、摘要 这篇文章起初只准备回答一个问题:社区分析里的 mtgsig2.4,是不是美团的设备指纹? 🧑‍🔬 笔者把 2024 年看雪帖子、2019 年美团 Web 人机识别文章、2020 年 Zeus 规则引擎文章和 2026 年隐私政策排在一起后,发现这个问题问得太扁平了。四份材料跨越七年,面向不同终端,也在回答不同的工程问题。mtgsig 所在的请求保护、俗称 DFP 的设备连续性判断,以及围绕账号、位置、订单和履约展开的服务端风控,可能互相传递信号,却没有证据表明它们是一套算法的三个名字。 笔者不复现签名,也没有当前 APK、抓包或线上实验。真正要做的是把四份材料拆回原来的时间和职责,看看每一层的结论能走到哪里,又在哪里必须停下。 Research Evidence Methodology Item Detail 文章类型 Type B:官方资料与历史社区样本复核 时间跨度 2019-03 至 2026-06;不同年份材料不视为同一在线实现 证据标记 A:官方公开;B:跨材料架构判断;C:历史社区观察 一手实验 0;没有 APK Hash、运行环境、抓包或服务端原因码 安全边界 不公开生产签名配方、偏移、密钥、调用复刻或阈值试探 Sources & Evidence Grading 来源 等级 使用方式 美团 Web 人机识别文章,2019 A(历史) 观察公开流程如何区分入口校验与业务处理 美团 Zeus 规则引擎文章,2020 A(历史) 理解场景、因子、累计事件、决策和回放治理 看雪 mtgsig2.4 分析,2024 C 只确认某历史请求保护对象曾被社区分析 美团基本功能隐私政策,2026 A 确认安全场景涉及的设备、网络、应用等类别与用途 Android 标识符最佳实践 A 校准标识符作用域、可重置性和隐私边界 Scope Limitations mtgsig2.4 帖子没有提供足以独立复核的完整 App 版本、渠道、ABI、APK Hash 和设备环境。 2019 年 Web 流程与 2020 年 Zeus 是历史公开实践,不能直接映射到 2026 年 Android 客户端。 政策确认数据类别和用途,不提供当前 DFP 格式、字段组合、模型权重或采集频率。 文中的三层模型是职责划分,不声称采用美团内部命名。 一、路线总览:先把三层分开 笔者原来沿着 mtgsig2.4 继续追函数。样本身份核不实后,这条路越走越像在给旧帖子续写。于是研究问题换了一个方向:不再猜“怎么算”,先检查每层证据究竟有资格证明什么。 ...

June 18, 2026 · 2 min · 389 words · +5

所有分支都指向同一个 switch,然后呢

读完本文,你将获得: 能在 IDA 里一眼认出 Control Flow Flattening、Bogus Control Flow 和 Instruction Substitution 三种 OLLVM 混淆的视觉特征 理解 OLLVM 如何嵌入 LLVM 编译管线,以及每个 pass 在 IR 层面做了什么 掌握从 Frida 动态 trace 到 angr 符号执行再到 CFG 手动恢复的完整去混淆工作流 经历一个真实案例中"IDA 看到 400 个基本块、真正执行的只有 27 个"的完整分析过程 理解为什么 OLLVM 在 AI 时代正在从"有效保护"滑向"增加成本但不改变结局" 〇、摘要 🧑‍🔬 笔者最近在分析一个国内头部电商 App 的签名 SO 时,IDA 打开目标函数,CFG 窗口画出来的图像一块被碾平的披萨饼——400 多个基本块,全部通过一个巨型 switch 相互连接,没有任何可读的逻辑结构。这是典型的 OLLVM Control Flow Flattening,笔者在过去两年的 Android 逆向中至少遇到过十几次,但每次都在不同环节卡住。 这篇文章不是 OLLVM 的百科全书。笔者的目标是把自己在实战中积累的工程经验整理成一条可复现的路线:从识别混淆类型,到选择去混淆策略,到工具链搭建,到最终恢复出可读的控制流。过程中踩过的坑和失败的尝试一样会记录下来。 核心贡献: 三大 pass 的 IDA 视觉指纹库 🧑‍🔬:总结了 CFF、BCF、Instruction Substitution 在 IDA CFG/伪代码中的 12 个可识别特征,附实际截图级描述 从 Frida trace 到 CFG 恢复的完整工作流 🔬:以某电商 App 的 libsign.so 为案例,记录了从 0 到可读伪代码的全过程 基于 angr 的半自动 CFF 去平坦化 🤖🧑‍🔬:实现了一个 600 行的 Python 脚本,在 5 个不同目标上成功恢复了 CFF,失败了 2 个(原因分析见 §6.5) opaque predicate 的 7 种识别模式 🧑‍🔬:从 BCF 的死代码中提取了 7 类 opaque predicate 模板,其中 2 类是 MBA 变种 去混淆工具链横向对比 🔬:对比了 D-810、GAMBA、Triton、angr、手动五种方案在 4 个目标上的表现 OLLVM 在 AI 时代的失效曲线分析 🧑‍🔬:基于本文实验数据,评估了 LLM 辅助去混淆对各保护层的实际影响 防御方改进提案 🧑‍🔬:从保护方视角提出了 6 条 P0-P3 级改进建议 Research Evidence Environment Item Detail Device Pixel 7 Pro (cheetah), rooted via Magisk 27.0 OS Android 14 (UP1A.231005.007) Target SO libsign.so v8.2.3, arm64-v8a, 4.7 MB SO SHA256 7f3a2b1c4d5e******9a8b7c6d5e4f3a (partial) IDA 9.0 SP1 + Hex-Rays ARM64 Frida 16.5.9, frida-server 16.5.9 angr 9.2.107 Unicorn 2.1.1 Ghidra 11.2 (辅助交叉验证) Python 3.11.8, z3-solver 4.13.0 分析周期 2026-05-18 ~ 2026-06-03 (约 3 周) Hypothesis ID 假设内容 章节 结果 H1 目标函数使用标准 OLLVM CFF,state variable 为单一 32-bit 整数 §6.1 ✓ 确认 — switch 变量为 w8,取值 47 种 H2 通过 Frida trace 收集的 state 序列可以直接恢复原始 CFG §6.2 ✗ 部分失败 — 覆盖率仅 68%,路径依赖输入 H3 angr 符号执行可以枚举所有 state 转移,补全动态 trace 的缺口 §6.3 ✓ 确认 — 47 个 state 全部覆盖,但耗时 23 分钟 H4 BCF 插入的 opaque predicate 全部基于 (x * (x - 1)) % 2 == 0 模板 §4.2 ✗ 证伪 — 发现 7 种模板,含 2 种 MBA 变种 H5 D-810 可以一键去除所有 BCF dead code §7.1 ✗ 部分失败 — 标准模板 95% 去除,MBA 变种 0% H6 Instruction Substitution 不影响仿真正确性,可以忽略 §4.3 ✓ 确认 — Unicorn trace 语义等价 H7 字符串加密使用固定 XOR key,可全局批量解密 §5.1 ✗ 证伪 — 每个函数使用不同 key,需逐函数处理 Experiments ID 实验 验证假设 结果 关键证据 E01 IDA CFG 统计分析 H1 ✓ PASS 47 个 case,1 个 switch 变量 w8 E02 Frida state trace (100 次调用) H2 ✗ PARTIAL 32/47 states 覆盖,15 个未触发 E03 angr symbolic exploration H3 ✓ PASS 47/47 全覆盖,23 min,peak 4.2 GB E04 BCF opaque predicate 分类 H4 ✗ FAIL 7 种模板,非单一类型 E05 D-810 自动去 BCF H5 ✗ PARTIAL 标准模板去除 95%,MBA 残留 E06 Unicorn 全路径仿真 H6 ✓ PASS 输出与真机一致 E07 字符串解密 key 分析 H7 ✗ FAIL 12 个函数,12 个不同 key E08 CFF 去平坦化脚本 (5 目标) — ✓ 5/7 5 成功 2 失败 (§6.5) E09 恢复后 CFG vs 真机 trace 验证 — ✓ PASS 27 个真实基本块,执行顺序一致 一、路线总览 这一节给出完整的分析路线图。笔者的经验是:面对 OLLVM 保护的二进制,最大的陷阱不是技术难度,而是在错误的层次上花时间。先花 30 分钟做识别和分类,能省下 3 天的无效逆向。 ...

June 5, 2026 · 23 min · 4747 words · +5

Shield 之后还有什么 - 小红书请求签名与设备风控材料复核

〇、摘要 🧑‍🔬 这篇文章最初有一个看上去很完整的提纲:先讲 shield 算法,再列设备字段,接着画服务端画像,最后讨论内容风控。真正开始核对来源后,后三步几乎都缺证据。 能回到原文确认的逆向材料只有一篇 2020 年 libshield.so 分析。它展示了 Java 初始化、Native 拦截器与请求签名之间的历史关系,却没有按今天的复核标准留下完整 App 版本、渠道、ABI、APK Hash 和设备环境。官方隐私政策能确认安全场景涉及设备、应用、网络与运行状态等类别,但不能说明哪些值进入 shield。至于服务端怎样合并画像、怎样判断内容和交易风险,公开材料没有答案。 因此,这不是一次“补完小红书风控架构”的尝试,而是一份补不完的材料复核。能确认的地方尽量说清,不能确认的地方不借后来的仓库、相似库名或漂亮流程图补齐。 Research Evidence Methodology Item Detail 文章类型 Type B:历史材料复核与架构边界分析 资料范围 2019 年官方介绍、2020 年原始逆向文章、2023 年历史隐私政策 资料截止 2026-05-26;晚于截止日或无稳定发布日期的材料不进入论证 证据标记 A:官方历史材料;B:通用架构判断;C:社区历史观察 一手实验 无 APK、二进制 Hash、真机日志或服务端原因码 Sources & Evidence Grading 来源 日期 等级 能支持什么 小红书官方介绍页 2019-10 A(历史) 当时平台月活过亿,社区与电商场景并存 《小红书 App 之 shield 逆向》 2020-12-18 C 某历史样本中的 Native 初始化、拦截器与签名路径 小红书用户隐私政策 2023-02-24 A(历史版本) 安全运行与风控验证涉及的数据类别和用途 Scope Limitations 2020 年文章没有留下足以唯一定位发布物的完整样本元数据,笔者不声称复现其结论。 官方政策页面可能持续更新;这里只采用能够核对到 2023-02-24 的历史表述。 未观察设备注册、画像 ID、置信度、规则、模型、原因码和申诉结果。 历史文章包含双用途细节;笔者不传播密钥材料、拼接顺序、偏移或可运行代码。 一、路线总览:图里故意留下的空白 这张图里最重要的不是箭头,而是三个明确写着“未知”的位置。客户端材料能把读者带到网络边界,再往后走就需要另一类证据。 ...

May 26, 2026 · 2 min · 309 words · +5

五个函数,一条链 - Apple FairPlay DRM 的 Frida 逆向全记录

读完本文,你将获得: 掌握从 Java 层追踪到 Native 层的 Frida 动态插桩方法论(分组 hook + 二分定位) 理解 FairPlay DRM 在 Android 上的完整解密调用链:5 个函数、4 个阶段 学会识别 in-place 解密模式(输入输出共用 buffer)——这是 sample-AES 的典型特征 获得一套可复用的"7000+ 导出函数中精确定位目标"的逆向工程流程 〇、摘要 本文记录了笔者对 Apple Music for Android(v3.6.0-beta)FairPlay DRM 实现的完整逆向分析过程。目标是理解 Apple 如何在 Android 平台上保护 ALAC 无损音频,并找到从播放流中提取明文音频数据的技术路径。 核心发现: FairPlay 解密调用链还原:从 Java 层的 FootHillDecryptionKey 追踪到 Native 层的 5 个关键函数,完整还原了「初始化 → 密钥获取 → 解密上下文创建 → 逐样本解密」的四阶段生命周期 白盒 AES 入口定位:在 libandroidappmusic.so 的 7000+ 导出函数中,通过分组 hook + 二分法定位到核心解密函数 NfcRKVnxuKZy04KWbdFu***(混淆函数名),确认其 5 个参数的语义 in-place 解密确认:解密函数的输入和输出共用同一个 buffer 指针,明文直接覆盖密文——这是 sample-AES 的典型实现模式 流式 dump 验证:通过 Frida 拦截 N 函数的调用前后,将加密/解密 buffer 分别 dump 到文件,验证了解密前后数据大小一致,且解密后为裸 ALAC 样本序列 本系列文章分为三部分: ...

May 10, 2026 · 8 min · 1500 words · +5
CC BY-NC-SA 4.0 © 2026 +5 · Repost with attribution, non-commercial only
All research is for academic and security purposes only. No functional exploit code or keys provided. For takedown requests contact overkazaf@gmail.com.
本站总访问量 次  ·  访客数 人