Frameworks, libraries and APIs define how an iOS app communicates internally and externally. They reveal hidden logic, internal layers, cryptographic behavior, networking stacks, authentication flows and private interfaces. Identifying them is essential for static and dynamic analysis because it tells you how the app is built, which third-party dependencies are in use, which APIs can be hooked, and where sensitive logic may be located. This chapter provides a complete, practical, hands-on workflow for discovering and analyzing frameworks, dynamic libraries, external APIs and internal modules within an iOS application.
Step 1: Locate All Frameworks in the App Bundle
Go to the app bundle:
cd extracted/Payload/AppName.app/
List frameworks:
ls -1 | grep .framework
Also check embedded plugins:
ls -1 PlugIns/
Apps often hide logic inside embedded frameworks.
Inspect contents:
ls FrameworkName.framework/
Look for:
-
Executable file
-
Resources
-
Info.plist in each framework
Each framework may contain sensitive logic such as:
-
API request signing
-
Custom encryption
-
Authentication routines
-
Internal SDKs
Step 2: Identify Linked Dynamic Libraries
Use otool to list all linked libraries:
otool -L AppName
Output examples:
@rpath/Alamofire.framework/Alamofire
@rpath/FirebaseCore.framework/FirebaseCore
/System/Library/Frameworks/Security.framework/Security
This tells you which libraries the app depends on.
Important signals:
-
Networking libs (Alamofire, AFNetworking, NSURLSession)
-
Crypto libs (CommonCrypto, CryptoKit)
-
Analytics libs (Firebase, Appsflyer, Mixpanel)
-
Payment libs
-
Custom internal frameworks
These highlight areas to inspect for vulnerabilities.
Step 3: Identify Third-Party SDKs Automatically
Run:
strings AppName | grep -i "firebase"
strings AppName | grep -i "mixpanel"
strings AppName | grep -i "alamo"
strings AppName | grep -i "key"
strings AppName | grep -i "oauth"
Third-party SDKs often leave identifiable strings.
Check for:
-
Payment processing
-
OAuth
-
Crypto libraries
-
Analytics
-
Messaging
-
Push notification SDKs
Each one creates attack surface.
Step 4: Inspect Each Framework for Hardcoded Data
Search strings inside frameworks:
strings FrameworkName.framework/FrameworkName | grep -i "http"
strings FrameworkName.framework/FrameworkName | grep -i "api"
strings FrameworkName.framework/FrameworkName | grep -i "key"
strings FrameworkName.framework/FrameworkName | grep -i "secret"
Frameworks often contain:
-
Internal API endpoints
-
Hidden resource files
-
API keys
-
Debug logs
-
Version identifiers
-
Authentication flows
Inspect Info.plist inside each framework:
plutil -convert xml1 FrameworkName.framework/Info.plist
cat FrameworkName.framework/Info.plist
This reveals metadata such as:
-
Supported devices
-
Embedded capabilities
-
Version numbers
-
Resource bundles
Step 5: Identify Private APIs
Private APIs indicate risky behavior.
Search:
grep -R "private" -n .
Search for Apple private frameworks:
otool -L AppName | grep -i "private"
Examples:
-
PrivateSecurity
-
MobileGestalt
-
SpringBoardServices
-
BackBoardServices
Private APIs often indicate jailbreak detection or anti-debug protections.
Step 6: Identify Networking APIs
Networking libraries reveal how the app communicates with its backend.
Search for URLs:
grep -R "https" -n .
Search inside binary:
strings AppName | grep -i "https"
Check frameworks too:
strings FrameworkName.framework/FrameworkName | grep -i "http"
This identifies:
-
Main API base URLs
-
Staging/development endpoints
-
OAuth callback URLs
-
Analytics endpoints
-
Image CDN URLs
These endpoints form your API attack map.
Step 7: Identify Authentication Mechanisms
Search for auth keywords:
strings AppName | grep -i "auth"
strings AppName | grep -i "jwt"
strings AppName | grep -i "token"
Inspect frameworks for:
-
Token generation
-
JWT signing
-
API signing functions
-
OAuth flows
-
Biometric verification
-
Keychain access
This reveals potential weaknesses in authentication logic.
Step 8: Identify Crypto Libraries and Usage
Crypto libraries indicate where sensitive logic may exist.
Search:
otool -L AppName | grep -i crypto
Common hits:
-
CommonCrypto
-
CryptoKit
-
OpenSSL
-
Sodium
Search for cryptographic functions:
strings AppName | grep -i "AES"
strings AppName | grep -i "RSA"
strings AppName | grep -i "SHA"
Locate custom crypto:
grep -R "encrypt" -n .
grep -R "decrypt" -n .
grep -R "hmac" -n .
Custom cryptography often contains critical weaknesses.
Step 9: Identifying Internal APIs (Hidden Features)
Apps often contain internal endpoints not used in production.
Search:
grep -R "internal" -n .
grep -R "debug" -n .
grep -R "staging" -n .
grep -R "qa" -n .
Look inside JSON and plist configs:
grep -R ".json" -n .
Inspect:
cat Resources/*.json
cat Bundle/*.plist
These commonly reveal:
-
Test endpoints
-
Internal flags
-
Disabled features
-
Developer-only logic
Many bypass vulnerabilities are found here.
Step 10: Use Class-Dump to Enumerate Classes
Install class-dump:
brew install class-dump
Dump classes:
class-dump AppName -H -o headers/
Inspect headers:
grep -R "API" -n headers/
Class-dump gives you:
-
All Objective-C classes
-
Method names
-
Properties
-
Internal classes
-
Hidden APIs
This identifies attack surfaces for dynamic hooking.
Step 11: Identify Swift Modules
Swift metadata exposes structures and functions.
List modules:
otool -oV AppName | grep swift
Dump Swift symbols:
strings AppName | grep "Swift"
Swift modules often contain:
-
Names of internal classes
-
Enum values
-
Protocol names
-
Hidden functionality
Step 12: Using Hopper or Ghidra to Inspect Framework Imports
Load the decrypted binary into Hopper or Ghidra.
Navigate to:
-
Imported symbols
-
Imported frameworks
-
Objective-C selectors
-
Swift method names
Look for:
-
Security-sensitive calls
-
Networking calls
-
File system access
-
Keychain usage
-
Crypto functions
This helps determine which logic to target with Frida hooks.
Step 13: Linking Frameworks to Dynamic Analysis
Once frameworks and APIs are identified:
-
Hook networking frameworks with Frida
-
Watch function calls in runtime
-
Modify authentication logic
-
Override crypto functions
-
Trace internal API calls
-
Dump sensitive data in memory
-
Intercept private API calls
Everything mapped during static analysis becomes a target during dynamic analysis.
Intel Dump
-
Frameworks and libraries reveal internal logic and third-party dependencies
-
Use otool to list linked libraries and private APIs
-
Extract strings to locate URLs, keys and identifiers
-
Inspect embedded frameworks and their Info.plist files
-
Identify networking APIs and authentication mechanisms
-
Dump classes using class-dump for full ObjC class enumeration
-
Analyze Swift modules for hidden structures and logic
-
Use grep and strings for quick scanning of sensitive keywords
-
Framework analysis guides dynamic hooking and exploit development