Mobile applications frequently bundle third-party software development kits (SDKs) that collect user data for analytics, advertising, and other purposes. Understanding what these SDKs do is essential for developers building privacy-conscious apps and for power users who want to know what happens on their devices. This guide covers practical methods to audit mobile app SDKs and identify third-party trackers in iOS and Android applications.
Why SDK Auditing Matters
Third-party SDKs can transmit sensitive user data to remote servers without clear disclosure. Common data points include device identifiers, location information, installation details, browsing behavior, and contact lists. Some SDKs share data with advertising networks, data brokers, or analytics platforms. By auditing the SDKs embedded in an app, you can identify privacy risks, ensure compliance with regulations like GDPR and CCPA, and make informed decisions about which apps to use or distribute.
Static Analysis: Examining App Binaries
Static analysis involves examining the compiled app without running it. This approach reveals what SDKs are present in the app bundle.
Android APKs
Android apps distributed as APK files can be extracted and analyzed. Use apktool to decode the app resources:
apktool d myapp.apk -o myapp_decoded
cd myapp_decoded
ls -la lib/
The lib/ directory contains native libraries (.so files) for different architectures. SDKs often include native code for performance-critical operations.
More importantly, examine the smali/ directory for decompiled Dalvik bytecode:
grep -r "com\.adjust" smali/ # Look for Adjust SDK
grep -r "com\.google\.analytics" smali/
grep -r "com\.facebook\.ads" smali/
The AndroidManifest.xml file reveals declared permissions and components:
grep -E "permission|activity|service|receiver" AndroidManifest.xml
iOS Apps
iOS apps distributed as IPA files can be extracted similarly. First, rename the IPA to ZIP and extract:
mv myapp.ipa myapp.zip
unzip myapp.zip
ls Payload/MyApp.app/
The app bundle contains the executable and frameworks. List embedded frameworks:
ls -la Payload/MyApp.app/Frameworks/
Search for known tracker frameworks:
strings Payload/MyApp.app/MyApp | grep -i "appsflyer\|adjust\|branch\|mixpanel"
The Info.plist file contains declared permissions and URL schemes that reveal tracker integrations.
Identifying Common Tracker SDKs
Several SDKs appear frequently in mobile apps for tracking purposes. Recognizing these helps you understand what data flows where.
Advertising and Attribution SDKs
- Google Ads / Firebase Analytics: Device identifiers, ad performance
- Facebook Audience Network: User profiles, behavior tracking
- Adjust: Attribution tracking, device fingerprinting
- AppsFlyer: Install attribution, user segmentation
- Branch.io: Deep linking, cross-platform tracking
Analytics SDKs
- Mixpanel: Event tracking, user behavior analysis
- Amplitude: Product analytics, user sessions
- Segment: Customer data platform, event forwarding
- Flurry: App usage analytics
Advertising ID Retrieval
Many trackers access the advertising identifier (IDFA on iOS, GAID on Android). Search for these references:
# Android - search for advertising ID access
grep -r "AdvertisingIdClient" smali/
# iOS - check for IDFA access frameworks
otool -L Payload/MyApp.app/MyApp | grep -i "advertising\|identifier"
Dynamic Analysis: Runtime Monitoring
Static analysis shows what SDKs exist, but dynamic analysis reveals what they actually do at runtime.
Network Traffic Monitoring
Intercept network traffic to see where data goes. Set up a proxy like mitmproxy:
mitmproxy -p 8080
Configure your device or emulator to use the proxy. On Android, you may need to install the mitmproxy CA certificate. On iOS, install the profile in Settings > General > VPN & Device Management.
Once traffic flows through the proxy, use the app and examine requests. Look for:
- Known tracker domains:
adjust.com,appsflyer.com,branch.io,facebook.com/tr - Device identifiers: UUIDs, advertising IDs in URL parameters
- POST bodies: JSON payloads containing user data
Filter mitmproxy to isolate tracker traffic:
# In mitmproxy, filter by domain
set view.filter = "~d adjust.com | ~d appsflyer.com"
Android: Using Logcat
Android’s logcat reveals SDK behavior at runtime. Filter for specific SDKs:
adb logcat | grep -i "adjust\|appsflyer\|mixpanel"
For more detailed analysis, use tools like MobSF (Mobile Security Framework), which automates both static and dynamic analysis:
# Run MobSF Docker container
docker run -it -p 8000:8000 opensecurity/mobsf:latest
Access the web interface at http://localhost:8000 and upload your APK or IPA for automated analysis.
iOS: Debugging with Frida
Frida allows you to instrument iOS apps at runtime. Hook into tracker SDKs to see what data they collect:
frida -U -f com.example.myapp -l tracker-hook.js
Example hook to interceptAdjust SDK calls:
// tracker-hook.js
Interceptor.attach(Module.findExportByName("libAdjust.so", "Java_com_adjust_sdk_Adjust trackEvent"), {
onEnter: function(args) {
console.log("Adjust event: " + Java.vm.tryGetEnv().getJavaVM());
}
});
Code-Level Auditing: Examining SDK Integration
When you have access to the app’s source code, examine how SDKs are initialized and used.
Android: Check Application Class
In Android apps, SDKs often initialize in the Application class:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Analytics initialization
FirebaseAnalytics.getInstance(this);
// Attribution SDK
AdjustConfig config = new AdjustConfig(this, "APP_TOKEN", AdjustEnvironment.SANDBOX);
Adjust.onCreate(config);
}
}
Look for configuration options that control data collection:
// Disable data collection
FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(false);
// Opt-out for Adjust
config.setDeferredDeeplinkCallbackListener(@NonNull DeferredDeeplinkCallbackListener));
iOS: Check App Delegate
iOS apps initialize SDKs in the App Delegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configure analytics
Analytics.configure(with: configuration)
// Initialize attribution
Adjust.appDidLaunch(adjustConfig)
return true
}
Search for IDFA usage restrictions:
// Request IDFA permission (iOS 14+)
ATTrackingManager.requestTrackingAuthorization { status in
// Handle authorization status
}
Building an Audit Checklist
When auditing an app, work through this checklist:
- Extract and list all embedded frameworks — Note each SDK name
- Check permissions — Determine what data each SDK could access
- Monitor network traffic — Record all external domains contacted
- Review initialization code — See if data collection is enabled by default
- Check for data sharing — Identify if data leaves the app or stays local
- Document findings — Create a report of all trackers and their purposes
Automating SDK Detection
For large-scale analysis, automate SDK detection. The AppCensus and Exodus projects maintain databases of known trackers:
- Exodus (exodus-privacy.eu.org): Android app tracker database
- AppCensus: iOS and Android privacy labels and tracker analysis
You can also build your own detection using the Mobile SDK Registry from the AppCensus project, which maps SDK package names to tracker categories.
Reducing Tracker Impact
After identifying trackers, consider mitigation strategies:
- Use app alternatives — Some apps have privacy-focused alternatives
- Block network requests — Use DNS-level blocking like NextDNS or AdGuard
- Use sandboxed profiles — Android Work Profile or iOS App Privacy limits data collection
- Request app changes — Contact developers to remove or reduce tracking
Getting Started
Begin by auditing an app you frequently use. Start with static analysis to identify obvious trackers, then use network monitoring to confirm data transmission. Build a personal database of common SDKs and their behavior patterns.
The methods in this guide apply to both iOS and Android, though specific tools differ. As you gain experience, you’ll recognize tracker signatures quickly and understand what data flows where. This knowledge helps you build more privacy-respecting apps and make informed choices about the software you use.
Regular auditing of mobile apps reveals the constantly evolving tracking ecosystem. New SDKs emerge, and existing ones change their behavior. Staying current requires ongoing analysis, but the fundamentals—examining binaries, monitoring networks, and reviewing code—remain consistent.
Related Articles
- How To Detect And Block Hidden Third Party Trackers On Websi
- Cname Cloaking How Trackers Disguise As First Party Dns Expl
- Cookie Alternatives After Third-Party Deprecation: A.
- Data Processing Agreement Template for Third Party Vendors
- Third Party Cookie Deprecation Chrome Timeline What Replaces
Built by theluckystrike — More at zovo.one