跳过内容

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
    },

    ...