MASTG-TECH-0082: 获取共享库
为了有效地识别和分析 iOS 应用程序中的共享库,区分应用程序捆绑的库和 iOS 提供的系统库非常重要。这种区分有助于专注于应用程序独有的组件,从而减少安全评估期间的干扰。
- 系统库:iOS SDK 的一部分,位于
/System/Library/Frameworks
或/usr/lib
等目录中。这些库是所有 iOS 应用程序的标准配置,通常不需要详细分析,除非有特殊原因。 - 应用程序捆绑的库:包含在应用程序捆绑包中,通常位于
Frameworks
目录(YourApp.app/Frameworks
)中。它们包括开发人员有意集成到应用程序中的第一方(自定义)和第三方库。 它们是安全评估的主要重点。但是,请注意,某些系统库也可能与应用程序捆绑在一起,以确保与特定版本的 iOS SDK 的兼容性,因此您需要将其过滤掉。
请注意,我们不考虑静态库,与运行时加载的动态库不同,静态库成为应用程序二进制文件的一部分,从而生成单个可执行文件。
策略:使用以下方法之一或它们的组合来识别共享库,然后过滤掉系统库,以专注于与应用程序捆绑的库。
检查应用程序二进制文件¶
导航到应用程序包中的 Frameworks
目录以查找共享库。共享库通常采用 .framework
或 .dylib
文件的形式。
ls -1 Frameworks
App.framework
Flutter.framework
libswiftCore.dylib
libswiftCoreAudio.dylib
...
otool¶
您可以使用 otool -L
命令列出共享库。
otool -L MASTestApp
MASTestApp:
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 2503.1.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1345.120.2)
/System/Library/Frameworks/CryptoKit.framework/CryptoKit (compatibility version 1.0.0, current version 1.0.0)
...
用于 iOS 的 radare2¶
在 radare2 中,您可以使用 il
命令列出链接的库。
r2 MASTestApp
[0x100006e9c]> il
[Linked libraries]
/System/Library/Frameworks/Foundation.framework/Foundation
/usr/lib/libobjc.A.dylib
/usr/lib/libSystem.B.dylib
/System/Library/Frameworks/CryptoKit.framework/CryptoKit
...
用于 iOS 的 objection¶
您可以使用 Objection 的命令 list_frameworks
列出代表框架的所有应用程序捆绑包。
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios bundles list_frameworks
Executable Bundle Version Path
-------------- ----------------------------------------- --------- -------------------------------------------
Bolts org.cocoapods.Bolts 1.9.0 ...8/DVIA-v2.app/Frameworks/Bolts.framework
RealmSwift org.cocoapods.RealmSwift 4.1.1 ...A-v2.app/Frameworks/RealmSwift.framework
...ystem/Library/Frameworks/IOKit.framework
...
list_bundles
命令列出应用程序的所有与框架无关的捆绑包。输出包含可执行文件名、捆绑包 ID、库版本和库的路径。
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios bundles list_bundles
Executable Bundle Version Path
------------ ----------------------------------------- --------- -------------------------------------------
DVIA-v2 com.highaltitudehacks.DVIAswiftv2.develop 2 ...-1F0C-4DB1-8C39-04ACBFFEE7C8/DVIA-v2.app
CoreGlyphs com.apple.CoreGlyphs 1 ...m/Library/CoreServices/CoreGlyphs.bundle
用于 iOS 的 Frida¶
Frida 的 REPL 中的 Process.enumerateModules()
函数允许枚举在运行时加载到内存中的模块。
[iPhone::com.iOweApp]-> Process.enumerateModules()
[
{
"base": "0x10008c000",
"name": "iOweApp",
"path": "/private/var/containers/Bundle/Application/F390A491-3524-40EA-B3F8-6C1FA105A23A/iOweApp.app/iOweApp",
"size": 49152
},
{
"base": "0x1a1c82000",
"name": "Foundation",
"path": "/System/Library/Frameworks/Foundation.framework/Foundation",
"size": 2859008
},
{
"base": "0x1a16f4000",
"name": "libobjc.A.dylib",
"path": "/usr/lib/libobjc.A.dylib",
"size": 200704
},
...