The “TikTok Reads Your SIM” Theory Myth BUSTED?

Tonz18

Newbie
Joined
Aug 11, 2025
Messages
14
Reaction score
4
Been going deep into how TikTok detects region/location on iPhones lately and honestly… I’m starting to think the whole “TikTok reads your SIM card directly” thing might be outdated now.

Back in the day on iOS (pre-iOS 16) you could pull SIM info using CTCarrier:
  • isoCountryCode
  • mobileCountryCode
  • mobileNetworkCode
That was the normal way apps detected SIM region/operator.

Problem is Apple basically killed this in iOS 16+:
https://developer.apple.com/documentation/coretelephony/ctcarrier

On modern iPhones it now returns empty values / nil / 65535.

So if you’re building a normal iOS app today using public APIs, you pretty much CANNOT reliably get real SIM data anymore.

At first I thought TikTok might be using private APIs through Objective-C runtime tricks (objc_msgSend etc) where apps dynamically call hidden methods without importing private headers. Technically possible. But realistically TikTok probably wouldn’t risk openly breaking Apple ToS at that scale. If Apple caught them using private telephony APIs that would be a massive issue.

Also ruled out a few other theories:
  • Phone number access → impossible publicly on iOS
  • Reading cellular settings → private APIs only
  • Locale/timezone/App Store storefront → useful signals but not real SIM data
So honestly I think the “TikTok directly reads your SIM” theory is probably old info now.

Curious if anyone else here has tested this deeper on newer iPhones/iOS versions.
 
Been going deep into how TikTok detects region/location on iPhones lately and honestly… I’m starting to think the whole “TikTok reads your SIM card directly” thing might be outdated now.

Back in the day on iOS (pre-iOS 16) you could pull SIM info using CTCarrier:
  • isoCountryCode
  • mobileCountryCode
  • mobileNetworkCode
That was the normal way apps detected SIM region/operator.

Problem is Apple basically killed this in iOS 16+:
https://developer.apple.com/documentation/coretelephony/ctcarrier

On modern iPhones it now returns empty values / nil / 65535.

So if you’re building a normal iOS app today using public APIs, you pretty much CANNOT reliably get real SIM data anymore.

At first I thought TikTok might be using private APIs through Objective-C runtime tricks (objc_msgSend etc) where apps dynamically call hidden methods without importing private headers. Technically possible. But realistically TikTok probably wouldn’t risk openly breaking Apple ToS at that scale. If Apple caught them using private telephony APIs that would be a massive issue.

Also ruled out a few other theories:
  • Phone number access → impossible publicly on iOS
  • Reading cellular settings → private APIs only
  • Locale/timezone/App Store storefront → useful signals but not real SIM data
So honestly I think the “TikTok directly reads your SIM” theory is probably old info now.

Curious if anyone else here has tested this deeper on newer iPhones/iOS versions.


All depends to OS, iOS is not taking SIM any more

on android it reads:
-imsi
-mcc
-mnc
-android id
-media drm
-country carrier id
-country carrier name
-sensors bias (callibration, unique for example for Samsung S10 from 1 mln Samsungs S10) :)

Others (but there are 50 more^^)

| Identifier | Format | Source (typical) |


|---|---|---|

| `device_id` | 19-digit decimal (`did`) | Generated on first launch, stored locally |
| `iid` (install ID) | 19-digit decimal | Generated at install time |
| `cdid` | UUID v4 (lowercase, with dashes) | Generated at install time |
| `openudid` | 16-char lowercase hex | Generated at install time |
| `aid` | `1233` (TikTok) / `1340` (Lite) | Hardcoded app ID |
| `channel` | `googleplay` | Hardcoded |
| `device_type` | string model (e.g. `ONEPLUS A5000`) | `android.os.Build.MODEL` |
| `device_brand` | string (e.g. `OnePlus`) | `android.os.Build.BRAND` |
`os_api` | integer API level (e.g. `28`) | `android.os.Build.VERSION.SDK_INT` |
`os_version` | string (e.g. `9`) | `android.os.Build.VERSION.RELEASE` |
| `resolution` | `1080*1920` | `DisplayMetrics` |
`dpi` | integer (e.g. `420`) | `DisplayMetrics.densityDpi` |
| `host_abi` | `arm64-v8a` | `android.os.Build.SUPPORTED_ABIS[0]`




"But realistically TikTok probably wouldn’t risk openly breaking Apple ToS at that scale"

Forget about such standings. TikTok, Meta and other social media apps break all Google Play rules, for example spawning micro apps running in background withour Foreground Service and Google not acts.
It's private between Google and these apps, special agreements.
Google apps break even much more
 
All depends to OS, iOS is not taking SIM any more

on android it reads:
-imsi
-mcc
-mnc
-android id
-media drm
-country carrier id
-country carrier name
-sensors bias (callibration, unique for example for Samsung S10 from 1 mln Samsungs S10) :)

Others (but there are 50 more^^)

| Identifier | Format | Source (typical) |


|---|---|---|

| `device_id` | 19-digit decimal (`did`) | Generated on first launch, stored locally |
| `iid` (install ID) | 19-digit decimal | Generated at install time |
| `cdid` | UUID v4 (lowercase, with dashes) | Generated at install time |
| `openudid` | 16-char lowercase hex | Generated at install time |
| `aid` | `1233` (TikTok) / `1340` (Lite) | Hardcoded app ID |
| `channel` | `googleplay` | Hardcoded |
| `device_type` | string model (e.g. `ONEPLUS A5000`) | `android.os.Build.MODEL` |
| `device_brand` | string (e.g. `OnePlus`) | `android.os.Build.BRAND` |
`os_api` | integer API level (e.g. `28`) | `android.os.Build.VERSION.SDK_INT` |
`os_version` | string (e.g. `9`) | `android.os.Build.VERSION.RELEASE` |
| `resolution` | `1080*1920` | `DisplayMetrics` |
`dpi` | integer (e.g. `420`) | `DisplayMetrics.densityDpi` |
| `host_abi` | `arm64-v8a` | `android.os.Build.SUPPORTED_ABIS[0]`




"But realistically TikTok probably wouldn’t risk openly breaking Apple ToS at that scale"

Forget about such standings. TikTok, Meta and other social media apps break all Google Play rules, for example spawning micro apps running in background withour Foreground Service and Google not acts.
It's private between Google and these apps, special agreements.
Google apps break even much more
I’m not really familiar with the Android world, but considering a lot of those settings can easily be changed on a rooted Android phone anyway, the Google Play Store seems a bit like the Wild West for app devs.

In the iOS world, Apple markets itself heavily around privacy, and apps generally go through stricter reviews to protect the Apple ecosystem. I find it hard to believe Apple would turn a blind eye to TikTok if they were using private APIs, especially considering Apple has previously pulled or restricted big apps like Facebook and Google for breaking App Store rules.

Also, it seems like TikTok trusts iPhones a lot more than Android devices.
 
Yeah, agree — SIM-reading is basically dead on modern iOS.


Most likely stack now = IP + GPS (if allowed) + device signals + behavior patterns.
Also things like App Store region, language, timezone, and network consistency play a bigger role than ppl think.


TikTok doesn’t need SIM access anymore tbh — plenty of cleaner signals.
 
I’m not really familiar with the Android world, but considering a lot of those settings can easily be changed on a rooted Android phone anyway, the Google Play Store seems a bit like the Wild West for app devs.

In the iOS world, Apple markets itself heavily around privacy, and apps generally go through stricter reviews to protect the Apple ecosystem. I find it hard to believe Apple would turn a blind eye to TikTok if they were using private APIs, especially considering Apple has previously pulled or restricted big apps like Facebook and Google for breaking App Store rules.

Also, it seems like TikTok trusts iPhones a lot more than Android devices.
no they cannot be easily change
I am making kernel spoofer, yes, in kernel, because all root things like Zygisk and LSposed are detectable. They do a lot in rooted device, it's illegal what they do, but they do ;)
 
Yeah, agree — SIM-reading is basically dead on modern iOS.
I feel stupid ordering bulk US SIMs now haha. Although they can see how many active sims in the phone so no sim could be a flag.
 
Yeah I think people overfocus on SIM theory now when platforms use tons of smaller signals together. Device behavior timezone language network patterns and account activity probably matter more than direct SIM reads today. One signal alone is rarely what triggers detection anymore.
 
Actually TikTok checks your IP through the WiFi network and if multiple devices are logged in on the same WiFi then if one account gets flagged it can affect all of them.
 
TikTok doesn't need the SIM — they triangulate region from a bundle of signals: NSLocale.preferredLanguages, NSTimeZone.system, currency code, keyboard layouts installed, IP geo, WiFi BSSID lookup against their internal DB, and (on iOS) the App Store storefront ID which leaks through receipt validation. Each signal is weak, the ensemble is strong. Even if you proxy your IP, mismatched timezone or storefront ID alone flags the account as "spoofed region" without ever touching CTCarrier. Faking SIM on iOS 16+ is mostly cargo cult at this point.
 
After abit more researching TikTok App has access to
CNContactsUserDefaults.shared().countryCode.

It is not the SIM country code directly. Apple describes it as the device’s default phone-number region, which can be influenced by the SIM card.
 
It's certainly possible; nowadays, all apps collect almost all the personal information on the device. tiktok was targeted by Trump for the same reason, which is why he wanted to ban the app. But if tiktok does it, they all will, regardless of the app's origin.
 
Been going deep into how TikTok detects region/location on iPhones lately and honestly… I’m starting to think the whole “TikTok reads your SIM card directly” thing might be outdated now.

Back in the day on iOS (pre-iOS 16) you could pull SIM info using CTCarrier:
  • isoCountryCode
  • mobileCountryCode
  • mobileNetworkCode
That was the normal way apps detected SIM region/operator.

Problem is Apple basically killed this in iOS 16+:
https://developer.apple.com/documentation/coretelephony/ctcarrier

On modern iPhones it now returns empty values / nil / 65535.

So if you’re building a normal iOS app today using public APIs, you pretty much CANNOT reliably get real SIM data anymore.

At first I thought TikTok might be using private APIs through Objective-C runtime tricks (objc_msgSend etc) where apps dynamically call hidden methods without importing private headers. Technically possible. But realistically TikTok probably wouldn’t risk openly breaking Apple ToS at that scale. If Apple caught them using private telephony APIs that would be a massive issue.

Also ruled out a few other theories:
  • Phone number access → impossible publicly on iOS
  • Reading cellular settings → private APIs only
  • Locale/timezone/App Store storefront → useful signals but not real SIM data
So honestly I think the “TikTok directly reads your SIM” theory is probably old info now.

Curious if anyone else here has tested this deeper on newer iPhones/iOS versions.
The idea that TikTok is secretly “reading your SIM card” to spy on everything is mostly an oversimplified internet theory mixed with some real technical permissions. What’s actually happening is more nuanced.
 
Back
Top