2011-12-30 8 views
12

मैं वर्तमान में उस संदेश को लिखने की कोशिश कर रहा हूं जो टेक्स्ट संदेश को रोकता है और उस संदेश की सामग्री के आधार पर प्रतिक्रिया करता है। मैंने सीकेएसएमएसएस सेवा कक्षा में _receivedMessage:(struct __CKSMSRecord *)message replace:(BOOL)replace विधि में हुक करने की कोशिश की लेकिन ऐसा लगता है कि ऐसा नहीं कहा जाता है।आईओएस जेलब्रेक एसएमएस/टेक्स्ट मैसेज को कैसे रोकता है

क्या कोई मुझे बता सकता है कि मुझे किस समारोह/कक्षा में हुक करना है? मुझे प्रदर्शित होने से पहले टेक्स्ट संदेश को अवरुद्ध करने और डेटाबेस में संग्रहीत करने की आवश्यकता है। मैं आईओएस 5.0.1 पर हूं।

किसी भी मदद की वास्तव में सराहना की जाती है।

+0

यदि आप इस प्रश्न में रुचि रखते हैं तो [जेल ब्रेकिंग स्टैक एक्सचेंज साइट] (http://area51.stackexchange.com/proposals/18154/ios-jailbreaking-development?referrer=EuWVi6IpN0_KzzEhC7I के लिए एरिया 51 प्रस्ताव का समर्थन क्यों नहीं करते हैं) -QW2) – rjstelling

उत्तर

10

इस कोड स्निपेट को एसएमएस संदेशों को अवरुद्ध करना चाहिए- आप इसे अन्य प्रकार की अधिसूचनाओं के लिए बढ़ा सकते हैं। आईओएस 5.0.1 पर भी काम करेगा। हालांकि iMessages के साथ काम नहीं करता है। CoreTelephony ढांचे के साथ लिंक (निजी हेडर की गुच्छा देखते हैं जो आप चाहते वर्ग डंप कर सकते हैं)

#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

आप निजी हेडर और क्लास-डंप कैसे देखते हैं? – brianestey

+0

हाय @rajagp, क्या आपको पता है कि अधिसूचना प्राप्त होने के बाद संदेशों को कैसे अवरुद्ध करना है? – RVN

+0

क्या ऐसा करने के लिए कोई विकल्प है। मैं Coretelephony.h हेडर फ़ाइल का उपयोग कर रहा हूँ। क्या मैं इस हेडर का उपयोग कर एसएमएस अधिसूचनाओं को कार्यान्वित कर सकता हूं। –

1

हालांकि पोस्टर पहले से ही rajagp's answer स्वीकार किए जाते हैं, मैं बहुत यह क्या सवाल वास्तव में पूछा भी नहीं करता है यकीन , आईओएस 5 पर । आईओएस 5 के लिए, अब मैं सामग्री संदेश अब नहीं देख रहा हूं, हालांकि मुझे सूचित किया गया है कि एक नया संदेश है।

तो, मैंने जो किया वह kCTMessageReceivedNotification के लिए राजप के अधिसूचना हैंडलर को लेता है, और इसके अंदर, एसएमएस डेटाबेस से use the code posted here to actually get the content of the text message के अंदर।

0

यह अभी भी आईओएस 7 पर काम करता है, लेकिन मुझे पता चला कि आपको kCTMessageReceivedNotification अधिसूचना प्राप्त करने के बाद थोड़ी देर की आवश्यकता है। अन्यथा आप अभी प्राप्त एसएमएस को याद करेंगे। मैं 0.1 सेकंड की देरी का उपयोग करता हूं, एक [स्वयं प्रदर्शन चयनकर्ता .. बाद में: 0.1];

संबंधित मुद्दे