2009-05-24 14 views
8

को रोकने के लिए info.plist का आकार प्राप्त करें मैं अपने ऐप में एंटी-पाइरेसी कोड डालने की कोशिश कर रहा हूं। इसका पिछला उत्तर (जो कि मैं अपने सदस्य की स्थिति के कारण लिंक नहीं कर सकता - बेकार) आसानी से गिना जा सकता है, क्योंकि "हस्ताक्षरकर्ता" स्ट्रिंग को हेक्स संपादक का उपयोग करके बाइनरी में देखा जा सकता है और प्रतिस्थापित किया जा सकता है।फ़ाइल प्राप्त करें piracy

इसके बजाय, info.plist फ़ाइल का फ़ाइल आकार जांचना और इसे संदर्भ मान से तुलना करना अधिक ठोस लगता है (चूंकि जानकारी.प्लिस्ट ऐप को क्रैक करते समय यहां और वहां संशोधित हो रहा है)। मुझे यह कैसे करना है? मैं निम्नलिखित की कोशिश की लेकिन यह लॉग 0.

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *mainDictionary = [bundle infoDictionary]; 
NSLog(@"%d", [mainDictionary fileSize]); 

उत्तर

7

आप ROT13 या किसी ऐसे ही सरल obscuring एल्गोरिथ्म http://en.wikipedia.org/wiki/ROT13

लागू करने ROT13 लागू करने के बाद से संदर्भ के लिए "SignerIdentity" अपने कोड में खोजने से noobish पटाखे रोक सकती हैं , "साइनर इडेंटिटी" "FvtareVqragvgl" बन जाएगा।

वैसे भी, अपने प्रश्न का उत्तर (कैसे आप Info.plist फ़ाइल का आकार मिलता है):

NSBundle *bundle = [NSBundle mainBundle]; 
NSString* bundlePath = [bundle bundlePath]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath ]; 

NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path 
                  error:NULL]; 

if (fileAttributes != nil) { 
    NSNumber *fileSize; 

    if (fileSize = [fileAttributes objectForKey:NSFileSize]) { 
     NSLog(@"File size: %qi\n", [fileSize unsignedLongLongValue]); 
    }   
} 

यह भी ध्यान रखें कि अपने Xcode प्रोजेक्ट में आकार (बाइट्स में) Info.plist की निर्देशिका और Info.plist बंडल के अंदर भिन्न हो सकता है। आप शायद एक बार गेम बनाना चाहते हैं, फिर <your app bundle.app>/Info.plist के आकार को देखें और फिर अपने एंटीपायरसी कोड को अपडेट करें।

+0

बात यह है कि समुद्री डाकू कुछ और चीज़ों के लिए "FvtareVqragvgl" स्ट्रिंग को बदल सकता है और यह info.plist में एक और कुंजी की जांच करेगा .. शायद यह शून्य होगा। फाइलसाइज विशेषता की तुलना int की तुलना में की जाती है, इसलिए बाइनरी में इसे देखने का कोई आसान तरीका नहीं है। – samvermette

+0

उत्तर के लिए धन्यवाद! – samvermette

+0

अद्यतन: अब // \t NSDictionary * fileAttributes = [fileManager फ़ाइलAttributesAtPath: pathP traverseLink: हाँ]; बहिष्कृत है ... उपयोग: -> ... \t NSDictionary * fileAttributes = [fileManager विशेषताएँ IfItemAtPath: pathP त्रुटि: NULL]; ... इसके बजाय – meronix

5

मैंने कभी भी आईफोन के लिए प्रोग्राम नहीं किया है, लेकिन क्या आप उस फ़ाइल का हैश नहीं ले सकते हैं और इसे संदर्भ में तुलना कर सकते हैं, संभावित रूप से हैश वैल्यू को सलाम कर सकते हैं ताकि किसी को संदर्भ हैश को नए में बदल दिया जा सके?

2

कोड अभी भी है कि कई giveaways:

स्ट्रिंग Info.plist को खोजने के लिए आसान है। NSFileSize भी बहुत संदिग्ध है ....

2

जैसा कि कहा गया है Determining if an iPhone is Jail broken Programmatically ऐसा लगता है कि install0us के माध्यम से स्थापित हालिया क्रैक किए गए ऐप्स में से कुछ को उनकी जानकारी नहीं है .plist संशोधित। (कम से कम info.plist में कोई संकेतक कुंजी नहीं है)। हम इस तरह के मामले में दरार का पता कैसे लगा सकते हैं?

+0

क्या आपने 2 info.plist फ़ाइल आकारों की तुलना करने की कोशिश की? – samvermette

+0

नहीं, लेकिन क्या मैं एक आईफोन उपयोगकर्ता द्वारा ऐपस्टोर से डाउनलोड की गई जानकारी के आकार पर कोई धारणा कर सकता हूं? क्या यह ऐपस्टोर (आईट्यून्स कनेक्ट के माध्यम से) पर अपलोड होने पर एक जैसा होगा? तथ्य यह है कि यह फ़ाइल कभी-कभी एक्सएमएल में होती है, कभी-कभी बाइनरी के रूप में मुझे इस फ़ाइल के लिए पूरे प्रवाह की स्पष्ट तस्वीर नहीं मिलती है:/ – yonel

+0

फाइलसाइज आपके वितरण निर्माण के आपके .app पैकेज में से एक होगा। मुझे यकीन नहीं है कि ऐप्पल आपके ऐप सबमिट करने के बाद info.plist फ़ाइल में कुछ बदलता है ... – samvermette