Используйте частный API для внутренних приложений, чтобы получить IMEI, ICCID и IMSI

Я пытаюсь создать приложение, которое возвращает следующую информацию:

  • IMEI
  • ИККИД
  • ИМСИ

Я видел, что могу использовать CoreTelephony, но у меня возникли сомнения: чтобы использовать эти файлы заголовков (импорт CoreTelephony.h из class-dump), устройство должно быть взломано?

Если нет, то CoreTelephony действителен только для iOS6?

Вот как я делаю:

CTServerConnectionRef conn;
void ConnectionCallback(CTServerConnectionRef connection, CFStringRef string, CFDictionaryRef dictionary, void *data) {
    NSLog(@"ConnectionCallback");
    CFShow(dictionary);
}

- (NSString *)coreTelephonyInfoForKey:(const NSString *)key {
    NSString *retVal = nil;
    conn = _CTServerConnectionCreate(kCFAllocatorDefault, ConnectionCallback,NULL);
    if (conn) {
        struct CTResult result;
        CFMutableDictionaryRef equipmentInfo = nil;
        _CTServerConnectionCopyMobileEquipmentInfo(&result, conn, &equipmentInfo);
        if (equipmentInfo) {
            retVal = [NSString stringWithString:CFDictionaryGetValue(equipmentInfo, (__bridge const void *)(key))];
            CFRelease(equipmentInfo);
        }
        CFRelease(conn);
    }
return retVal;
}
- (NSString *)IMEI {
    return [self coreTelephonyInfoForKey:@"kCTMobileEquipmentInfoIMEI"];

Вот мой CoreTelephony.h


person grapejuice    schedule 24.09.2013    source источник


Ответы (2)


Частично отвечая на ваш вопрос:

  • API, которые не задокументированы, называются частными API (в сфере iOS). Я думаю, вы поняли это с учетом тега "iphone-privateapi

  • Частные API можно использовать как на взломанном, так и на не взломанном телефоне. Вообще говоря, единственное техническое различие между общедоступным и частным API заключается в том, определяется ли API в файлах .h.

  • Иногда частные API устаревают (модифицируются, удаляются или защищаются правами). Последний (защищенный правами) является наиболее распространенным случаем. Право - это разрешение, которое дает вам возможность использовать некоторые API. На устройствах с джейлбрейком только системные приложения могут иметь права. На устройствах с джейлбрейком любое приложение может иметь права.

Возвращаясь к вашему вопросу. Я не пробовал CoreTelephony на iOS 7. Вы пробовали? (Я не был уверен, что «Если нет, то CoreTelephony действительна только для iOS6?» означает, что вы пробовали это).

person Victor Ronin    schedule 24.09.2013
comment
Я пытался использовать CoreTelephony iOS7, но безуспешно. Поэтому я сомневался, что он не работает из-за того, что не разрешено использовать вышеуказанный метод на устройствах без взлома, или на самом деле в iOS7 мы не можем использовать CoreTelephony. - person grapejuice; 25.09.2013

Вероятно, для этого требуется com.apple.coretelephony.Identity.get право. Нашел его в приложении «Настройки».

person creker    schedule 09.10.2013
comment
Протестировал. Это право действительно требуется в iOS 7, если вы хотите получить IMEI или IMSI. ICCID не проверял, но уверен, что он тоже сработает. - person creker; 23.12.2013
comment
можно ли добавить право com.apple.coretelephony.Identity.get в специальное приложение для устройств без джейлбрейка? - person c0ming; 21.01.2014