Search code examples
iosobjective-cios6jailbreakimei

How to get IMEI on iPhone 5


I'm develop application for jailbroken iOS devices. I use https://github.com/erica/uidevice-extension/blob/master/UIDevice-IOKitExtensions.m to get IMEI, but on iPhone 5 this solution does not work(return empty string). Is there any way to get IMEI on iPhone 5(iOS 6.1.2)?


Solution

  • There are several ways to get IMEI on newer devices

    1) Private ManagedConfiguration.framework

    CFStringRef MCCTIMEI()
    

    2) CoreTelephony.framework

    struct CTResult
    {
        int flag;
        int a;
    };
    extern CFStringRef kCTMobileEquipmentInfoIMEI;
    
    void *connection = _CTServerConnectionCreate(kCFAllocatorDefault, NULL, NULL);
    
    NSDictionary *info = nil;
    struct CTResult result;
    _CTServerConnectionCopyMobileEquipmentInfo(&result, connection, &info);
    [info autorelease];    
    CFRelease(connection);
    
    NSString* IMEI = (NSString*)info[(NSString*)kCTMobileEquipmentInfoIMEI];
    

    3) liblockdown.dylib

    extern CFStringRef kLockdownIMEIKey;
    
    void* connection = lockdown_connect();
    NSString* IMEI = [(NSString*)lockdown_copy_value(connection, NULL, kLockdownIMEIKey) autorelease];
    lockdown_disconnect(connection);
    

    I had some problems with MCCTIMEI - returned empty IMEI after device start-up. Now I'm using CoreTelephony solution, never had a problem with it.

    UPDATE

    On iOS 7 these APIs are protected by com.apple.coretelephony.Identity.get entitlement. To access IMEI (IMSI, phone number and other info) you need to sign your with that entitlement with boolean value set to true.