资讯动态

OWASP MASTG iOS UnCrackable L2 实战破解:从抗篡改防线到反调试绕过的逆向分析

发布时间:2026/10/14 0:12:58 来源:尧图企业网站定制
文档教程网络安全【免费下载链接】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点击查看免费下载导读iOS UnCrackable L2 是 OWASP MASTG移动应用安全测试指南官方 Crackmes 系列中的第二关 iOS 逆向挑战由 Bernhard Mueller 编写。与第一关L1纯隐藏字符串提取不同L2 的设定是应用内部藏有秘密而且这次它不会被篡改This app holds a secret inside - and this time it wont be tampered with!即它比 L1 多了一层完整性校验/防篡改防护。本文以该挑战题为核心完整梳理它的挑战目标、在仓库中的获取方式Crackmes/iOS/Level_02/UnCrackable-Level2.ipa并借助仓库内 MASTG-TECH 系列技术文档IPA 注入、签名、调试、越狱检测绕过、二进制补丁等与 MASVS-RESILIENCE 测试用例给出从环境搭建、静态分析、动态插桩到绕过防篡改与反调试的完整实战方案。读完本文你将掌握针对带有完整性校验和反调试逻辑的 iOS 应用进行系统性逆向与绕过测试的完整方法论。挑战题背景与目标挑战题定义仓库中该挑战题的元数据定义见 apps/ios/MASTG-APP-0026.md标题iOS UnCrackable L2平台iOS官方来源OWASP MAS Crackmes 的 iOS 板块mas.owasp.org/crackmes/iOS作者Bernhard Mueller核心设定应用内部藏有一个秘密secret string并且这次它不会被篡改——暗示与 L1 相比增加了防篡改anti-tampering防护机制与 Android 版 apps/android/MASTG-APP-0004.mdAndroid UnCrackable L2May include traces of native code即可能包含原生代码痕迹相呼应iOS UnCrackable L2 同样属于升级版挑战测试者不仅要提取隐藏字符串还要先突破应用自身的完整性校验否则即使修改了应用也无法正常运行。挑战题在整个 MASTG 中的定位这些 UnCrackable 应用是 MASTG 全书反复使用的活教材。Crackmes/README.md 明确说明它们是一组 Android/iOS 移动逆向挑战collection of mobile reverse engineering challenges被用作整个 MASTG 的示例读者也可以纯粹出于兴趣去攻克它们。从 MASTG 目录结构看L2 所处的对抗维度属于MASVS-RESILIENCE抗逆向工程与篡改韧性类目与之对应的测试用例是 tests/ios/MASVS-RESILIENCE/MASTG-TEST-0089.mdTesting Anti-Debugging Detection与 Android 侧的 tests/android/MASVS-RESILIENCE/MASTG-TEST-0046.md。也就是说攻克 L2 的过程本质上就是一次完整的防篡改 反调试韧性评估演练。获取挑战题与初始检查从仓库获取 IPA挑战题的 IPA 包存放在仓库中Crackmes/iOS/Level_02/UnCrackable-Level2.ipa同目录还配套了 L1 的 UnCrackable-Level1.ipa。在开始分析之前先对 IPA 做基础检查。IPA 本质是 ZIP 压缩包可以像 techniques/ios/MASTG-TECH-0091.md 中演示的那样解包unzip UnCrackable-Level2.ipa解包后得到Payload/UnCrackable Level 2.app/目录其中包含主二进制、Info.plist等资源。分析前建议确认主二进制是否被 FairPlay DRM 加密若从 App Store 获取的二进制通常带有LC_ENCRYPTION_INFO且cryptid为 1需要先在越狱设备上用 frida-ios-dump 等工具脱壳详见 techniques/ios/MASTG-TECH-0054.md 的 Decrypting the App Binary 一节本仓库中的 IPA 为原始发布包可直接解包分析。静态侦察class-dump 与符号枚举对主二进制进行静态侦察第一步是用 class-dump 类工具还原 Objective-C 类结构。tools/ios/MASTG-TOOL-0105.md 介绍的ipsw工具可以直接输出 Mach-O 中的 ObjC 类信息对 universalfat二进制可用--arch指定架构ipsw class-dump --arch arm64 UnCrackable Level 2输出会呈现AppDelegate、ViewController等类以及它们的方法、属性列表。对于 L2 这种带防篡改的应用可以推断其ViewController中除了buttonClick:校验输入按钮之外还会出现与完整性校验相关的逻辑入口。随后可用rabin2 -Iradare2 家族见 techniques/ios/MASTG-TECH-0054.md查看二进制架构与加密标志用otool -l ... | grep -i LC_ENCRYPTION确认加密状态。环境搭建把不可篡改的应用装到测试设备上签名、重打包与安装的选择L2 的不会被篡改意味着直接修改后的 IPA 无法通过代码签名校验。要把它装到测试设备上需要遵循 techniques/ios/MASTG-TECH-0092.mdSigning IPA files的完整签名流程非越狱设备必须用开发者证书 provisioning profile 重新签名。标准 Apple 账号只能用修改过的唯一化Bundle Identifier开发者账号可用原始 Bundle ID。越狱设备可安装 [MASTG-TOOL-0127 等越狱签名禁用工具]见 techniques/ios/MASTG-TECH-0056.md 的说明后免签名安装但如果应用本身带有完整性校验仅绕过系统签名校验还不够应用自身的防篡改检查仍会在运行时发现二进制被修改。常用安装途径见 techniques/ios/MASTG-TECH-0056.mdSideloadlyGUItools/ios/MASTG-TOOL-0118.md自动完成签名与安装使用标准 Apple 账号时会把 Team ID 追加进包名如sg.vp.UnCrackable1变为sg.vp.UnCrackable1.QH868V5764。libimobiledevice / ideviceinstallertools/ios/MASTG-TOOL-0126.mdLinux/macOS 命令行安装ideviceinstaller -i UnCrackable-Level2.ipaios-deploytools/ios/MASTG-TOOL-0054.md与xcrun devicectltools/ios/MASTG-TOOL-0072.mdmacOS 上的命令行方案。为动态调试打基础让应用可调试App Store 的 release 包默认没有get-task-allow权限无法被调试器附加。techniques/ios/MASTG-TECH-0147.mdPatching给出完整流程用开发 provisioning profile 重新签名profile 自带get-task-allow true即可附加 LLDB。若需注入 Frida Gadget 做动态插桩可参照 techniques/ios/MASTG-TECH-0091.md解包 IPA创建Payload/UnCrackable Level 2.app/Frameworks/目录复制FridaGadget.dylib进去用optool install -c load -p executable_path/Frameworks/FridaGadget.dylib -t ...向 Mach-O 注入LC_LOAD_DYLIB加载命令重新打包zip -r patched.ipa Payload并签名安装。安装后需以调试模式启动否则应用通过 SpringBoard 正常启动会因缺少调试环境而崩溃。techniques/ios/MASTG-TECH-0055.md 给出两种方式iOS 17xcrun devicectl device process launch --device UDID --start-stopped BundleID然后用 LLDBdevice process attach --pid PID附加iOS 16 及更早idevicedebug -d run BundleID或ios-deploy --bundle Payload/UnCrackable Level 2.app -W -d -v。启动后frida-ps -Ua能看到名为Gadget的进程frida -U -n Gadget即可连入。深入应用内部定位秘密与防篡改逻辑从界面行为反推代码路径L2 的交互与 L1 相似界面上有一个输入框、一个 Verify 按钮和提示标签。点击 Verify 后ViewController buttonClick:会调用某个校验类的方法比较用户输入与内部 secret。与 L1 不同的是L2 中校验逻辑很可能被藏进原生代码native library或者校验前会先做完整性自检——这正是it wont be tampered with的兑现方式。这一点与 Android 版 L2 的架构高度一致tests/android/MASVS-RESILIENCE/MASTG-TEST-0046.md 指出处理混淆应用时经常发现开发者把数据和功能藏进 native 库并以 Android L2 的CodeCheck类为例——a(String)方法调用native boolean bar(byte[])校验实际发生在原生层public class CodeCheck { public boolean a(String arg2) { return this.bar(arg2.getBytes()); } private native boolean bar(byte[] arg1); static { System.loadLibrary(foo); } }可以推断 iOS L2 也采用了类似入口在 ObjC 层、核心校验在 C/C 原生层的结构因此不能只盯着 Swift/ObjC 符号还要把主二进制中的 native 代码段纳入静态与动态分析范围techniques/ios/MASTG-TECH-0087.md 专门讨论了 iOS native code tracing。静态分析工具链ipsw class-dump / swift-dumptools/ios/MASTG-TOOL-0105.md还原 ObjC 类接口与 Swift 类型结构ipsw swift-dump --arch arm64 ... -V可带地址输出。反汇编器如 Ghidra定位校验函数与 secret 所在偏移。techniques/ios/MASTG-TECH-0084.md 以 L1 为例演示了完整的地址计算法在 Ghidra 中得到断点偏移例如0x100004520再用 LLDBimage list -o -f得到ASLR 偏移例如0x70000最终断点地址 偏移和0x100074520b 0x100074520后可用po $x0直接打印寄存器里的隐藏字符串。L2 的 secret 读取可以照搬这套流程但要先绕过它的防篡改与反调试。radare2 / rabin2符号列表与加密标志检查rabin2 -I ... | grep crypto。对抗防篡改让不会被篡改变成可以被篡改防篡改的常见实现与检测点L2 声称不会被篡改其防篡改机制常见形态包括二进制哈希自检启动时或校验按钮点击时计算自身 Mach-O 关键段的哈希与内置基准比较不一致则直接退出或显示失败提示代码签名校验调用SecStaticCodeCheckValidity/SecCodeCopySelf等 API 验证自身签名是否被破坏与越狱检测联动越狱设备上CydiaSubstrate、MobileSubstrate等路径的存在也会触发环境被篡改的判断。对抗策略Document/0x04c-Tampering-and-Reverse-Engineering.md 开宗明义黑盒测试越来越需要反编译、打补丁、篡改二进制或活动进程而应用也普遍实现防篡改防御Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md 则给出关键判断防止调试几乎是不可能的——只要应用公开发布就可能在攻击者完全控制的不受信任设备上运行坚决的攻击者终将通过修补二进制或运行时动态修改行为如 Frida绕过全部反调试控制。因此 L2 的防篡改并不是不可战胜的而是提高韧性而非绝对防护。针对 L2 的实操路线不修改二进制、纯运行时绕过这是破坏性最小、也最贴合挑战精神的方式。直接在内存中对校验结果做 hook让应用以为自己没有被篡改详见下一节的 Frida 方案。若必须静态修补先定位自检函数并 NOP 掉比较分支再整体重签名。注意修补后的哈希值本身会改变若自检是基于固定基准哈希必须同时打掉自检逻辑这正是 techniques/ios/MASTG-TECH-0147.md 强调的高风险应用在默认代码签名之外还有额外完整性检查必须连这些额外检查一起修补的原因。动态插桩实战Frida 绕过防篡改与提取秘密用 Frida 定位校验函数注入 Frida Gadget 并启动见上文为动态调试打基础后可以用 objectiontools/ios/MASTG-TOOL-0074.md快速枚举类与方法ios hooking list classes ios hooking list class_methods ClassName重点搜索名字含Check、Verify、Tamper、Integrity、Jailbreak的类与方法。挂钩校验方法的返回值如果 secret 校验发生在 ObjC 方法里用frida-trace挂钩即可参照 techniques/ios/MASTG-TECH-0152.md 的 jailbreak 绕过手法把篡改检测当作越狱检测一样处理frida-trace -U -f Payload/UnCrackable Level 2.app/UnCrackable Level 2 -m *[ViewController* *Check*]生成的 handler 中用onLeave改写返回值onLeave: function (log, retval, state) { console.log(Original return value: retval); retval.replace(0); // 强制返回未篡改/校验通过 console.log(Forced return value: retval); }挂钩原生层函数若校验逻辑在 C/C 原生层L2 的高概率设计改用frida-trace的 native 追踪techniques/ios/MASTG-TECH-0087.mdfrida-trace -U -i open sg.vp.UnCrackable2 # 示例追踪 open 系统调用或直接编写 Frida JS 脚本Module.findExportByName/Interceptor.replace挂钩目标 native 函数打印参数、返回值甚至直接调用内部函数把 secret 计算出来。提取 secret 的三种落地手段内存断点法用 Ghidra 找到存放 secret 的指令偏移LLDB 算好 ASLR 偏移后下断点命中时po打印寄存器/字符串完整流程见 techniques/ios/MASTG-TECH-0084.md 的 Debugging Release Apps 一节。Frida 主动调用法定位校验类后直接调用其内部方法如-[ViewController someMethod:]并读取返回值或内存中的字符串。native tracing 法追踪strcmp/memcmp等比较函数观察传入的参数——两个比较参数中通常就有一个是 secretAndroid 侧 tests/android/MASVS-RESILIENCE/MASTG-TEST-0046.md 对 native 校验的思路完全适用于 iOS。纵深对抗反调试与越狱检测的绕过反调试Anti-DebuggingL2 的不可篡改往往还叠加反调试检测应用会检测自己是否被ptrace/LLDB 附加一旦发现就退出或进入异常分支。iOS 上调试器通过task_for_pid获取 Mach task port 后再用 Mach IPC 接口操作进程详见 techniques/ios/MASTG-TECH-0084.md 对 ptrace/Mach 机制的讲解因此检测手段也常常围绕ptrace、sysctlP_TRACED标志或task_info展开。针对性的测试与绕过方法tests/ios/MASVS-RESILIENCE/MASTG-TEST-0089.mdTesting Anti-Debugging Detection给出了评估框架尝试附加调试器观察应用反应弹窗警示、优雅退出、擦除敏感数据、上报后端等然后评估能否通过 hook 单个 API 函数就轻松绕过、静态/动态定位检测代码的难度、是否需要编写自定义代码以及绕过的主观难度。实操中常用 Frida 挂钩ptrace/sysctl返回伪造值隐藏P_TRACED标志task_for_pid/mach_vm_read相关检测点hook 返回值或直接 NOP 掉检测分支。越狱检测Jailbreak Detection越狱检测常与防篡改一起出现。自动绕过首选 objection 的 jailbreak bypass 模块手动方案techniques/ios/MASTG-TECH-0152.md用 radare2 在二进制里 grep 已知字符串is~jail定位isJailbroken之类的方法符号用frida-trace -m -[XxxViewController isJailbroken]挂钩在onLeave中retval.replace(0)强制返回未越狱。$ frida-trace -U -f /Applications/... -m -[JailbreakDetectionVC isJailbroken] Function [JailbreakDetectionVC isJailbroken] originally returned:0x1 Changing the return value to:0x0L2 中若存在越狱检测可采用完全相同的模式处理。通关后的韧性评估对照 MASVS-RESILIENCE 检验完成 secret 提取后一个合格的测试者还应对 L2 的防护强度做系统性评估评估维度来自 tests/ios/MASVS-RESILIENCE/MASTG-TEST-0089.md 与 tests/android/MASVS-RESILIENCE/MASTG-TEST-0046.md防篡改是否可被轻易绕过是否 hook 一个 API 就失效检测逻辑是否分散在多处是否跨 ObjC 与 native 多层实现反调试是否有效附加调试器时应用是否终止或功能异常检测点是否唯一是否在 native 层也有自检检测机制是否有原创性是否只是从公开资料抄来的标准检查容易被 objection/Frida 的通用绕过脚本一击击穿绕过成本是否需要编写定制代码耗时多少主观难度评分如果发现 L2 的防护太容易被绕过可以按照韧性评估标准提出加固建议增加更多检测手段、将检测逻辑散布到应用各处、与后端联动上报、对检测逻辑做混淆参照 Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md 中商业方案通常组合多种技术未公开的检测技术、多场景触发、每构建独特的检测组合、后端协同验证与 HTTP payload 加密的思路。总结iOS UnCrackable L2 是一道浓缩了 iOS 应用韧性对抗核心要点的挑战题隐藏的秘密只是表面真正要过的是防篡改与反调试两道关。本文沿挑战定义 → 获取与安装 → 静态侦察 → 防篡改对抗 → Frida 动态插桩 → 反调试/越狱绕过 → 韧性评估的完整链路给出了可复现的实战方案并将每一步都锚定到 MASTG 仓库中的对应技术文档MASTG-TECH-0084、MASTG-TECH-0091、MASTG-TECH-0092、MASTG-TECH-0147、MASTG-TECH-0152与测试用例MASTG-TEST-0089。这套方法论不只适用于刷题——把它迁移到真实 App 的韧性评估中就是一次标准的 MASVS-RESILIENCE 验证流程。赞分享文档教程网络安全【免费下载链接】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 MASTG Android UnCrackable L3 实战指南从 APK 逆向到网络层证书验证绕过OWASP MASTG Android UnCrackable L3 实战指南从 APK 逆向到网络层证书验证绕过 本文基于 OWASP MASTG 仓库中的文档教程网络安全iOS 抗逆向工程防御Anti-Reversing DefensesOWASP MASTG 中的纵深防御检测与绕过测试指南iOS 抗逆向工程防御Anti Reversing DefensesOWASP MASTG 中的纵深防御检测与绕过测试指南 导读 本文以 OWASP 移动文档教程网络安全OWASP MASTG UnCrackable 移动逆向挑战实战指南Android 与 iOS 全关卡解析OWASP MASTG UnCrackable 移动逆向挑战实战指南Android 与 iOS 全关卡解析 UnCrackable Mobile Apps 是文档教程网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价 →
↑