资讯动态

如何不泄露目标地发表逆向成果:apk-reverse的脱敏与泄漏扫描工作流

发布时间:2026/10/3 12:48:04 来源:尧图企业网站定制
如何不泄露目标地发表逆向成果apk-reverse的脱敏与泄漏扫描工作流【免费下载链接】apk-reverseSuitable for Android APK reverse engineering analysis项目地址: https://gitcode.com/gh_mirrors/ap/apk-reverse在发布 Android APK 逆向分析成果时目标身份包名、设备序列号、SDK 密钥往往混在工作记录里悄无声息地外泄。apk-reverse是一个面向 APK 逆向、去广告、dex 修补与运行时分析的开源 Agent Skill它内置了完整的脱敏与泄漏扫描工作流一套 17 条规则、6 大类目标身份的扫描脚本 scan_leaks.py以及一份可争论、可审计的脱敏规范 desensitization-and-leak-scans.md。本文将带你快速掌握这套不泄露目标地发表成果的方法。 为什么逆向成果最容易顺手泄露逆向分析的材料来自真实工作设备命令输出、ps进程列表、日志摘录、shell 历史记录。目标身份正是从这些材料里一行一行混进来的泄露载体典型形态包名bundle idpm path/pidof/ps -A输出中的一行、component后的活动引用设备序列号adb devices旁边出现的 16 位大写字母数字串凭据与密钥粘贴调试时留下的APPKEY、SECRET_KEY赋值、Authorization头网络端点非回环地址的IP:port用户路径/home/名字/、C:\Users\名字\关键问题是没有任何结构性检查能发现它。校验目录结构的 check_repo.py、校验锚点的 check_refs.py 都能通过而文件里明晃晃地写着一个在网应用和真实手机。这也是为什么泄漏扫描必须作为一道独立的内容检查存在。⚖️ 脱敏的两条核心原则desensitization-and-leak-scans.md 把规则写成可以被争论的形式避免过度脱敏与脱敏不足两个方向的失败原则 1抹掉识别目标的内容保留识别技术的内容。包名、序列号、宿主路径、appkey、线上 token、非回环端点属于身份而工具名、库名、函数名、协议字段名、CVE 编号、加固产品名、公开 crackme 名称属于技术——正是靠它们文档才有教学价值。区分两者的检验法只有一句话删掉这个字符串这句话还能教会人东西吗删掉frida、RegisterNatives、UnCrackable-Level1会损失知识换成PKG、DEVICE、APPKEY这类占位符则既保住句式结构又不携带任何身份。原则 2报告给出有限上下文而不是光给行号。报告foo.md:412会把修复者送回文件里逐行重读报告命中点前后各约 48 个字符决策就能直接在报告上完成。️ 不要匿名化清单什么绝不能删只写第一条规则会产生关于nothing的文档只写第二条则直接产生泄漏。两边要靠同一份产物解决——代码里显式的豁免清单。扫描器把清单落地为可审计的常量scan_leaks.py 中的BENIGN_PACKAGE_PREFIXES、PUBLIC_TARGET_PREFIXES、BENIGN_IP_PREFIXES等任何一条豁免都可以用一行编辑扩展、用--show-exempt审计类别例子为何豁免工具/库名frida、apktool、jadx、libart.so点名工具就是内容本身名字对每个读者都公开函数/符号名JNI_OnLoad、RegisterNativesAPI 词汇大量逆向技术恰恰就是这些名字协议字段名proto3、varint、length-delimited线格式词汇CVE 编号CVE-2024-31317公开通告编号抹掉即失去引用价值加固产品名libjiagu.so、com.secneo、com.stub.StubApp是产品签名帮助读者识别壳不指向任何目标公开 crackmeUnCrackable-Level1.apk等 MASTG 样本刻意发布的练习目标平台/SDK 包名com.android.settings、com.google.android.gms.ads这个应用带哪些 SDK本身就是分析发现占位符PKG、DEVICE、C:\Users\user\...脱敏机制本身报这些的扫描器不可用回环/模拟器地址127.0.0.1:27042、0.0.0.0:8080、10.0.2.2:8080frida 与 ADB 的惯用地址识别不了任何东西⚠️ 有一个故意不豁免的细节RFC 5737 文档保留地址段192.0.2.0/24等。它们是写合成地址的正确方式所以命中它们是信号而不是噪音——直接压制反而会隐藏某人粘贴了一个恰好长得像合成地址的真实地址的情况。 六大类泄漏与 scan_leaks.py 快速上手scan_leaks.py 纯标准库、无第三方依赖覆盖 6 大类目标身份、共 17 条规则类别扫描什么强度packagemanifest 属性、pm/am调用、ps进程行中的包名strongdeviceadb devices形态的 16 位序列号含设备语境词、表格形态strongtokenGitHub PAT/经典 token、内联 API-key/secret 赋值、Authorization 头certain / strongappkeySDK appkey/appsecret 带字面值的赋值strongendpoint非回环的IP:port与裸 IPv4 字面量weakpathPOSIX 与 Windows 用户主目录路径strong最常用的几个姿势详见 docs/tool-verification/EXTENSION-desensitization.md 的完整命令手册python skills/apk-reverse/scripts/scan_leaks.py # 扫描脚本所在的整个仓库 python skills/apk-reverse/scripts/scan_leaks.py --list-rules # 打印 17 条规则表 python skills/apk-reverse/scripts/scan_leaks.py --show-exempt # 审计哪些命中被豁免了、为什么 python skills/apk-reverse/scripts/scan_leaks.py --root 待发布目录 --fail-on any # 发布前的严格检查 如何读懂扫描结果退出码与 RESULT 令牌扫描器固定了退出码契约方便接入任何流水线退出码令牌含义该做什么0RESULTclean豁免清单之外无命中继续0RESULTleaks_found_strong_only只有weak命中如文档保留地址段继续但读一遍报告——它就是发布前检查清单1RESULTleaks_found至少一个 strong/certain 命中失败并阅读报告2RESULTerror用法错误、目录不可读作为基础设施故障处理而非内容问题这里有个容易忽略的设计令牌和退出码是两个独立通道。只 grep 输出的包装层分不清干净和扫描器根本没跑只读退出码的包装层没法在日志里解释自己。两个--fail-on档位回答的是两个不同问题--fail-on strong默认只让 strong/certain 命中失败。适合每次提交前的维护习惯——因为文档本身合法地引用了文档保留地址若每次都红这个门禁会被大家学会忽略。--fail-on anyweak 也失败。发布前对即将发布的那份文件用它跑严格检查。⏱️ 脱敏扫描应插在流程的哪三个时刻扫描的价值在于错误答案还很便宜的时候被抓住放置时机值得讲究提交前的维护门禁与结构检查并列跑此时材料正要变成永久内容它的退出 1 是内容发现需要阅读而不是重试。发布证据文件之前手动跑一次并加--show-exempt。豁免审计是最容易出有趣错误的地方——一个被以错误理由抑制的值看起来和一个从未存在的值完全一样。报告写完之后、发布之前报告为了具体而逐条引用命中值时它本身就是泄漏的副本。要对即将发布的文件跑扫描而不是你动笔时的那份文件。 一个真实教训扫描器抓住了自己的文档这个工作流最有说服力的证据来自它自己的事故记录EXTENSION-desensitization.md §3b标注为 observed第一版验证文档为了证明规则会触发把植入语料库里的 30 个泄漏值原样引用了进来扫描器在下一轮运行中对仓库本身报出RESULTleaks_found——26 个 strong/certain 命中全部落在这份文档里5 个包名、2 个设备序列号、2 个 token 格式、2 个内联赋值、2 个 SDK appkey、3 个主机用户名修正方式不是删证据而是改写为规则 类别 强度 位置 值的结构形态如反向域名.n、16×[A-Z0-9]、24×[0-9a-f]一个位置都不少修正后全仓库 129 个受跟踪文件的扫描收敛到0 个 strong/certain残留的 4 个 weak 命中全部是 RFC 5737 文档地址来源逐一注明。配套的单元测试同样体现这个纪律测试文件中的诱饵 token 由碎片拼接而成保证测试文件本身在被扫描时也不会成为命中。最终证据记录在 evidence-summary.md植入语料库 30 个泄漏全部报出不要匿名化清单零误报扫描器还抓到了它自己证据文件里的 26 个强命中。 常见误报情境与处理方式扫描器的规则是形状 上下文而非纯正则。首批真实树扫描曾报出 28 个发现、其中 27 个是误报——这些修正恰恰是最有价值的部分误报形态为何误报处理方式版本号四段数字如 JDK 路径里的N.N.N.N命中了 IP 形状命中前紧邻jdk/python/frida等版本词时抑制全数字 16 位十六进制串tombstone 栈地址、协议 fixture形似序列号真序列号必含至少一个字母全数字抑制公开 crackme 包名发布练习目标的包名本就是公开内容加入PUBLIC_TARGET_PREFIXES豁免脚本里的args.package.split(.)属性查找前缀窗口从匹配起点量起被长前缀推过args.窗口从捕获组起点计算并打印豁免理由供审计处置误报的纪律不要一条命中一个地加豁免。正确动作是跑--show-exempt按理由分组修规则本身——无上下文的正则是 bug豁免表不是补丁筐。✅ 发布前检查清单目标身份已换成PKG/DEVICE/APPKEY占位符技术内容工具名、函数名、CVE完整保留对即将发布的那份文件/目录跑了--fail-on any退出码为 0报告里没有任何命中值的原文引用只有形态描述与占位符残留的 weak 命中如 RFC 5737 地址来源逐一说明而不是被默默吞掉入口文件README、SKILL.md 等被当作指令读取的部分没有引用任何携带身份的外部内容。泄漏扫描不能替代判断——它看不到被描述而非被引用的身份一个中等规模的 Flutter 应用也看不到被刻意部分掩码的值。这两类只能由人判断一次、并写下来。但把它作为流水线中一道可退出码化的门禁就能保证每一次结构检查都通过之后内容检查依然站在最后一道门后。【免费下载链接】apk-reverseSuitable for Android APK reverse engineering analysis项目地址: https://gitcode.com/gh_mirrors/ap/apk-reverse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑