MASTG-TEST-0230: 未启用自动引用计数 (ARC)
概述¶
此测试用例检查 iOS 应用是否启用了 ARC(自动引用计数)。ARC 是 Objective-C 和 Swift 中的一种编译器特性,可以自动进行内存管理,从而降低内存泄漏和其他相关问题的可能性。启用 ARC 对于维持 iOS 应用程序的安全性和稳定性至关重要。
- Objective-C 代码:可以通过在 Clang 中使用
-fobjc-arc
标志进行编译来启用 ARC。 - Swift 代码:默认情况下启用 ARC。
- C/C++ 代码:ARC 不适用,因为它专门针对 Objective-C 和 Swift。
启用 ARC 后,二进制文件将包含诸如 objc_autorelease
或 objc_retainAutorelease
之类的符号。
步骤¶
- 提取应用程序并识别主二进制文件( 获取和提取应用程序)。
- 识别所有共享库( 获取共享库)。
- 在主二进制文件和每个共享库上运行 获取编译器提供的安全功能,查找 ARC 符号,如
objc_autorelease
或objc_retainAutorelease
。
观察¶
输出应包含主二进制文件和每个共享库的符号列表。
评估¶
如果任何包含 Objective-C 或 Swift 代码的二进制文件或库缺少与 ARC 相关的符号,则测试失败。存在诸如 _objc_msgSend
(Objective-C) 或 _swift_allocObject
(Swift) 等符号,但没有相应的 ARC 符号,表明可能未启用 ARC。
注意:检查这些符号仅表明 ARC 已在应用程序中的某个位置启用。虽然通常为整个二进制文件启用或禁用 ARC,但在某些情况下,可能只有应用程序或库的部分受到保护。例如,如果应用程序开发人员静态链接一个启用了 ARC 的库,但为整个应用程序禁用了 ARC。
如果您想确定特定的安全关键方法是否受到充分保护,您需要对每个方法进行逆向工程并手动检查 ARC,或者从开发人员处请求源代码。