2011-12-30 21 views
12

Obecnie próbuję napisać aplikację, która przechwytuje wiadomości tekstowe i reaguje w zależności od treści tej wiadomości. Próbowałem podłączyć do metody _receivedMessage:(struct __CKSMSRecord *)message replace:(BOOL)replace w klasie CKSMSService, ale to nie jest w ogóle wywoływana.IOS Jailbreak Jak przechwytywać wiadomości SMS/wiadomości tekstowe

Czy ktoś mógłby mi powiedzieć, jaką funkcję/klasę muszę podłączyć? Muszę przechwycić wiadomość tekstową, zanim zostanie wyświetlona i zapisana w bazie danych. Jestem na IOS 5.0.1.

Każda pomoc jest naprawdę doceniana.

+0

Jeśli są Państwo zainteresowani tym pytaniem, dlaczego nie wesprzeć propozycji Area 51 dotyczącej [strony łamania zabezpieczeń Stack Exchange] (http://area51.stackexchange.com/proposals/18154/ios-jailbreaking-development?referrer=EuWVi6IpN0_KzzEhC7I -Qw2) – rjstelling

Odpowiedz

10

Ten fragment kodu powinien przechwytywać wiadomości SMS - możesz go rozszerzyć na inne rodzaje powiadomień. Działa również w systemie iOS 5.0.1. Nie działa jednak z iMessages. Związek z ram CoreTelephony (istnieją pęczek nagłówków prywatnych istnieje którą można by class-dump)

#include <dlfcn.h> 

#define CORETELPATH "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony" 
id(*CTTelephonyCenterGetDefault)(); 

void (*CTTelephonyCenterAddObserver) (id,id,CFNotificationCallback,NSString*,void*,int); 


static void telephonyEventCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) 
{ 
    NSString *notifyname=(NSString *)name; 
    if ([notifyname isEqualToString:@"kCTMessageReceivedNotification"])//received SMS 
    { 
     NSLog(@" SMS Notification Received :kCTMessageReceivedNotification"); 
     // Do blocking here. 
    } 
} 

-(void) registerCallback { 

void *handle = dlopen(CORETELPATH, RTLD_LAZY); 
    CTTelephonyCenterGetDefault = dlsym(handle, "CTTelephonyCenterGetDefault"); 
    CTTelephonyCenterAddObserver = dlsym(handle,"CTTelephonyCenterAddObserver"); 
    dlclose(handle); 
    id ct = CTTelephonyCenterGetDefault(); 

    CTTelephonyCenterAddObserver(
           ct, 
           NULL, 
           telephonyEventCallback, 
           NULL, 
           NULL, 
           CFNotificationSuspensionBehaviorDeliverImmediately); 
} 
+0

Jak widzisz prywatne nagłówki i zrzuty klasy? – brianestey

+0

Hi @rajagp, czy wiesz, jak blokować wiadomości po otrzymaniu powiadomienia? – RVN

+0

Czy jest jakaś alternatywa, aby to zrobić. Używam pliku nagłówkowego Coretelephony.h. Czy mogę zaimplementować powiadomienia SMS za pomocą tego nagłówka. –

0

To nadal działa na iOS 7, ale odkryłem, że po otrzymaniu powiadomienia kCTMessageReceivedNotification potrzebujesz niewielkiego opóźnienia. W przeciwnym razie przegapisz otrzymane SMS-y. Używam opóźnienia 0,1 s, z [self performSelector .. afterDelay: 0.1];

Powiązane problemy