Using CoreTelephony framework to get IMEI and IMSI on iOS 7
Asked Answered
B

1

1

Hi developers around the world, the app I am making is for in house distribution, we used some Apple's little secrets to get the app working as we want: like getting the IMEI and IMSI with methods described here: get IMEI on iPhone with CoreTelephony?

It worked fine for last 2 years, but since more and more people in the company moved to iOS 7, we found this method no longer suits our need - it simply returns a nil in iOS 7. The whole system is designed to hold IMEI and IMSI info, modifying it would require a considerable amount of effort, so we would rather focus on getting the IMEI and IMSI info out of the device.

My research has lead me to this article: https://code.google.com/p/iphone-wireless/source/browse/wiki/CoreTelephonyFunctions.wiki , which described a private method called __CTGetIMEI. However, I don't know how to use this method since it looks like a C level method. If so one could point me to an example, please help.

Boxberry answered 14/3, 2014 at 6:49 Comment(0)
N
2

There is no such function in iOS7 CoreTelephony framework. There was in iOS 4.0 but it missing since 4.3 or so.

There are many ways to get IMEI How to get IMEI on iPhone 5 but since iOS7 they are protected with entitlement com.apple.coretelephony.Identity.get. Therefore these APIs will only work on jailbroken devices. The same applies to IMSI.

Nematic answered 14/3, 2014 at 7:41 Comment(9)
It would be nice to know more about these APIs on jailbroken devices, could you point me a link? Thank you.Boxberry
I've found (reverse-engineered) those APIs myself and don't known of any documentation on them.Nematic
So there is no way to get it running on iOS 7.1.2 in 2015, right?Robert
There is a way, by signing the app with your own entitlement file, which gives you permission to read from the private frameworks, then you can read it with the methods I described above. But that's no way Apple would allow your app to appear on App Store for this.Boxberry
@CraigZheng, without jailbreak you can't even properly sign your app with the entitlement - provisioning profile will not let you. But there is a way to sign some NDA with Apple to get access to some private APIs. For example, OpenVPN is signed with entitlement that regular developers doesn't have access to. It needs it in order to access routing tables, tun device and other VPN APIs. It's not even implemented as regular app rather as VPN plugin.Nematic
Hi @creker, I found signing NDA with Apple quite interesting, it would be lovely if you can provide some articles that I can have a read.Boxberry
Thank you @Nematic for the explanation. At the same time according to my other research there is no way to get IMSI or MSISDN since iOS7. I hope this comment will be invalid in the future.Lazare
@Nematic Do you have further info on the process of NDA with Apple for private API access?Spout
@Gruntcakes, no, unfortunately. Even with OpenVPN it's more of an educated guess. I don't know for sure but that's probably what's going on. Same thing with Twitter, by the way. It's signed with entitlement regular developers don't have access to. Probably to be able to plug into iOS since it has internal support for twitter.Nematic

© 2022 - 2024 — McMap. All rights reserved.