首页 / 资讯中心 / 文章详情

MASTG 通用技术:移动应用篡改与运行时插桩(Tampering and Runtime Instrumentation)

MASTG 通用技术:移动应用篡改与运行时插桩(Tampering and Runtime Instrumentation) ★ FEATURED ARTICLE
文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载本技术条目是 OWASP Mobile Application Security Testing Guide (MASTG) 中平台无关generic分类下的一篇通用技术说明对应的文件为 techniques/generic/MASTG-TECH-0051.md其定位是「移动应用安全测试与逆向工程技术」系列中的一个概念性章节。本文以该条目为核心结合仓库中动态分析、调试、代码注入、二进制补丁等配套章节与工具文档系统阐述篡改与运行时插桩的概念、分类、动机以及在 Android / iOS 双平台下的具体落地手法帮助读者建立从「静态读码」走向「运行时动手」的完整技能框架。核心概念什么是篡改Tampering在 0x04c-Tampering-and-Reverse-Engineering.md 章节中MASTG 对篡改给出了精确的定义篡改Tampering是改变移动应用无论是已编译的应用包还是运行中的进程或其运行环境以影响其行为的过程。例如一个应用在检测到测试机已 root 时拒绝启动导致基于动态分析的测试无法进行此时测试者就需要修改应用的行为来绕过这类防护。典型诉求包括停用 SSL Pinning让 HTTPS 流量可以被中间人代理拦截与分析停用二进制防护解除 root 检测、防调试、防篡改等阻碍测试流程的防护逻辑修改运行环境掩盖su二进制、伪造系统属性等。从技术形式上看篡改既可以发生在静态层面修改 APK/IPA 包中的字节码、二进制代码或资源文件也可以发生在动态层面修改运行中进程的内存、寄存器、变量与对象状态。移动端安全测试中这两个层面常常被组合使用。运行时插桩Runtime Instrumentation超越篡改的观察与控制与「修改行为」的篡改相比运行时插桩Runtime Instrumentation更强调「挂钩hooking与运行时补丁runtime patches」的组合目的是观察应用的运行行为。MASTG 特别指出在移动应用安全语境下「插桩」一词被宽泛地用来指代所有类型的运行时操纵包括重写方法以改变行为。换句话说插桩是篡改的一个超集——观察是基础能力修改则是进阶能力。两者共同构成了动态分析Dynamic Analysis的核心技术手段。MASTG 技术分类中与本文直接相关的配套条目包括MASTG-TECH-0047逆向工程拆解应用以理解其工作原理的总纲包含静态分析检视已编译产物与动态分析运行时观察两条路径MASTG-TECH-0048静态分析在无源码的 black-box 测试中通过反编译 APK/DEX 理解内部逻辑、定位硬编码凭据等缺陷MASTG-TECH-0049动态分析通过执行应用并分析工作流来发现业务逻辑缺陷、输入校验问题等静态分析难以捕获的漏洞MASTG-TECH-0050二进制分析借助符号执行等自动化手段推导「到达某目标分支所需的条件」。为什么测试者需要篡改与插桩能力0x04c 章节 给出了三个最核心的动机打通黑盒动态测试现代应用普遍包含 SSL Pinning、端到端加密、root 检测等防护直接阻断流量代理和高级测试工具。测试者必须先停用这些防御才能进行正常的动态测试。增强黑盒测试中的静态分析即使没有源码通过反编译字节码也能理解内部逻辑、发现硬编码凭据等缺陷——这与篡改能力互为补充。评估抗逆向韧性Resilience Assessment针对 MASVS-RAnti-Reversing Controls系列控制项测试者需要扮演逆向工程师的角色实际尝试绕过防御以验证其有效性。MASTG 还给出了一个常被忽视的「好消息」在移动端逆向工程师最终总是能赢。原因在于移动应用的部署与沙箱机制在设计上比桌面应用更受限制无法像 Windows DRM 那样部署 rootkit 级别的防御Android 的开放性允许测试者修改操作系统本身而 iOS 虽然控制更严但其防御选项也更有限。这意味着防护只能「增加难度」永远无法做到绝对安全——这与 0x06j 章节 中「防护缺失本身不构成漏洞、但能提升韧性」的结论一致。篡改的两种主要形式1. 二进制/资源补丁Binary PatchingMASTG-KNOW-0109Binary Patching 定义了补丁的概念补丁Patching是修改已编译应用的过程例如改变二进制可执行文件中的代码、修改 Java 字节码或篡改资源文件。在移动游戏破解圈中这一过程被称为 modding。补丁的落地方式多种多样直接用十六进制编辑器hex editor修改二进制文件或先反编译、再编辑、最后重新汇编打包。MASTG 同时提醒一个关键约束现代移动操作系统严格强制代码签名code signing因此修改后的应用需要重新签名或关闭默认的签名校验设施才能运行——这比桌面时代的逆向要繁琐得多。2. 进程内存操纵 / 运行时补丁Process Memory Tampering相对于「改文件」的静态补丁运行时对进程内存的篡改更难被检测因此在多数场景下是首选方案。运行时补丁可以直接修改运行中对象的字段、函数的返回值、甚至系统调用的结果。判断一种防御是否「过硬」MASTG 给出的评估维度包括检测方法是否分散在应用各处而不是集中在一个方法里是否在多个 API 层上运作Java API、native 库函数、汇编/系统调用机制是否原创而不是从 StackOverflow 复制粘贴。这些维度同时也可用于评估绕过难度能否用 Frida 等标准工具轻松绕过是否需要编写自定义代码绕过耗时多久运行时插桩的工具生态从 JDWP 调试到 Frida运行时插桩的实现高度依赖工具。MASTG 的知识库文档 MASTG-KNOW-0110Code Injection 指出代码注入是一种非常强大的技术能在运行时探索和修改进程且得益于成熟的开源工具测试者无需了解全部底层细节FridaMASTG-TOOL-0001自定位为完整的「动态插桩框架」dynamic instrumentation framework包含代码注入、多语言绑定和一个可注入的 JavaScript VM 与控制台。可在 Android 与 iOS 上向进程注入 JavaScript VM既能处理 Java 层也能处理 native 层JNI。MASTG 推荐初学者优先使用 Frida因为它是三者中通用性最强的。ElleKit 与 Xposed专注于代码注入和/或挂钩。ElleKit 仅支持 iOSXposed 仅支持 Android且 Xposed 缺乏 native 代码支持。若需要长期生效的钩子Xposed 可能更合适但 Frida 支持在进程运行期间随时注入和更新脚本无需重启反馈回路更短。工具文档 tools/android/MASTG-TOOL-0001.md 给出了 Frida 在 Android 上的完整落地流程安装 frida-serverroot 设备adb push frida-server /data/local/tmp/ adb shell chmod 755 /data/local/tmp/frida-server adb shell su -c /data/local/tmp/frida-server 列出进程与应用-U指 USB 设备-a指应用-i指已安装frida-ps -U frida-ps -Uai追踪 native 库调用例如 libc.so 的 openfrida-trace -U com.android.chrome -i open用 Frida CLI 加载脚本frida -U -l myscript.js com.android.chromeJava API 挂钩示例——重写 Activity.onResumeJava.perform(function () { var Activity Java.use(android.app.Activity); Activity.onResume.implementation function () { console.log([*] onResume() got called!); this.onResume(); }; });堆上实例枚举示例——扫描所有 android.view.View 对象setImmediate(function() { console.log([*] Starting script); Java.perform(function () { Java.choose(android.view.View, { onMatch:function(instance){ console.log([*] Instance found: instance.toString()); }, onComplete:function() { console.log([*] Finished heap search) } }); }); });Frida 还支持通过Java.use包装类后用反射列出其全部公共方法以及用Memory API扫描进程内存中的字符串。此外MASTG-TOOL-0018jadx-gui 的反编译器内置了「Copy as frida snippet」功能可直接把目标方法一键转换为 Frida 挂钩脚本进一步缩短从静态分析到运行时插桩的距离。实战案例用 jdb 篡改运行时状态绕过防篡改MASTG-TECH-0031Android 调试 提供了一个教科书级的运行时篡改实例仅凭 JDWP 调试器 jdbMASTG-TOOL-0019 破解 UnCrackable Level 1MASTG-APP-0003 的防篡改弹窗。前置连接到可调试进程。用adb jdwp列出可调试进程 PID再用adb forward把主机端口转发到该进程的 JDWP transport最后用管道把suspend命令灌入 jdb保持进程挂起以便从容操作adb jdwp adb forward tcp:7777 jdwp:12167 { echo suspend; cat; } | jdb -attach localhost:7777利用限制条件发布版字节码不含行号信息因此行断点无效但方法断点有效。常用命令包括classes、class/methods/fields、locals、print/dump、stop in、clear、set。篡改第一步——让不可取消的弹窗可取消。反编译代码显示MainActivity.a方法创建了AlertDialog调用了setCancelable(false)且设置了非取消监听器。对android.app.Dialog.setCancelable设方法断点并 resume每次命中后用locals查看参数再用set命令把flag改为true反复数轮后弹窗即可被点按关闭而不会终止应用 stop in android.app.Dialog.setCancelable resume main[1] locals flag false main[1] set flag true main[1] resume篡改第二步——在 String.equals 断点处读取明文密钥。对java.lang.String.equals设方法断点输入任意文本并点击验证命中后用locals观察other参数即得到与输入比较的明文密钥 stop in java.lang.String.equals main[1] locals Method arguments: Local variables: other I want to believe这个案例同时演示了篡改与插桩的一体两面断点观察插桩定位逻辑set修改变量篡改改变行为。从概念到测试MASTG 中的相关测试用例MASTG 将技术概念映射到了可执行的测试用例与演示demo中方便测试者按图索骥MASTG-TEST-0038应用是否正确签名静态验证 APK 签名防止篡改。要求 Android 7.0 至少使用 v2 签名方案Android 9 建议 v2v3支持密钥轮换Android 11 可选 v4并警示 v1JAR签名受 Janus 漏洞CVE-2017-13156影响不应在 Android 7.0 上单独依赖。可用apksigner verify --verbose example.apk与apksigner verify --print-certs --verbose example.apk检查。MASTG-TEST-0045测试 Root 检测绕过 root 检测的通用策略清单包括重命名su二进制、卸载/proc阻止读取进程列表、用 Frida/Xposed 挂钩 Java 与 native 层 API、用内核模块挂钩底层 API、以及直接打补丁移除检测逻辑。MASTG-DEMO-0101本地存储完整性检查参考一个角色控制 demo展示「无 HMAC 校验的存储读取」可被直接篡改sed改 SharedPreferences 中的角色为admin即绕过而「带 HMAC 校验的读取」会检测到篡改同时指出若 HMAC 密钥硬编码在应用内逆向者仍可伪造合法 HMAC。局限与边界本文所有概念均属于平台无关generic分类Android 与 iOS 平台的具体工具链如lldb-server、Xcode 调试器、Sideloadly 侧载等请参阅 Android 安全测试章节 与 iOS 安全测试章节 及其技术条目。运行时插桩需要相应运行环境如 root 设备、frida-server、可调试进程部分技术如 JDWP 调试非 debuggable 应用需要先通过 MASTG-TECH-0038 的 manifest 补丁 或resetprop ro.debuggable 1等方式启用。所有防护都遵循「逆向工程师最终获胜」的攻防常态篡改与插桩技术应仅用于授权测试场景。赞分享文档教程网络安全【免费下载链接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.项目地址https://gitcode.com/gh_mirrors/ow/mastg点击查看免费下载相关推荐EDK II代码审查清单模板提升UEFI固件质量的终极指南EDK II代码审查清单模板提升UEFI固件质量的终极指南 EDK II作为开源UEFI固件开发框架其代码质量直接影响系统稳定性与安全性。本文提供一份通用代固件操作系统驱动开发嵌入式Hacker101 Cookie Tampering 实战指南浏览器、请求与编码层篡改技术Hacker101 Cookie Tampering 实战指南浏览器、请求与编码层篡改技术 本篇技术指南以 Hacker101 课程体系中的 Cookie T教程网络安全Phoenix 自动插桩Auto-InstrumentationPython 实战指南零代码改动为 LLM 应用生成追踪 SpanPhoenix 自动插桩Auto InstrumentationPython 实战指南零代码改动为 LLM 应用生成追踪 Span 导读 本文以 Pho可观测性AI 评测LLMOpsAI 应用人工智能上一篇rinna/japanese-hubert-large19000小时训练的日本语音识别大模型全面解析下一篇深入解析Milvus分布式架构存储与计算分离的设计哲学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站