2010-03-14 12 views
5

मैं कोको में एक आवेदन कर रहा हूं और देखना चाहता हूं कि इसमें कुछ तार आसानी से सुलभ थे या नहीं, इसलिए मैंने ओटीएक्स चलाया और दुख की बात है कि मेरा पूरा कोड मिला। क्या कोई तरीका है जिसका उपयोग मैं अपने कोड को अधिक "सुरक्षित" बनाने के लिए कर सकता हूं या कम से कम स्ट्रिंग को एन्क्रिप्ट/छुपा सकता हूं? कारण मैं स्ट्रिंग को एन्क्रिप्ट करना चाहता हूं यह सर्वर के लिए एक पासवर्ड है। मुझे इसे वास्तव में सुरक्षित करने की ज़रूरत नहीं है, मैं नहीं चाहता कि पासवर्ड ढूंढना इतना आसान हो।सुरक्षित कोको कोड लिखें

सुरक्षित कोड में किसी भी मदद

+0

आपने जिस ओटीएक्स चीज का उल्लेख किया है और इसका उपयोग कैसे किया जाए? –

उत्तर

6

1. बचें ObjC के लिए धन्यवाद।

क्योंकि ओबीजेसी की कक्षा प्रणाली रनटाइम प्रतिबिंब पर भारी निर्भर करती है, इसलिए पूरे इंटरफ़ेस को निष्पादन योग्य के साथ शामिल करने की आवश्यकता होती है। यह बाइनरी के स्रोत @interface को आसानी से पुनर्प्राप्त करने के लिए class-dump जैसे टूल को अनुमति देता है।

इसलिए, सुरक्षित कोड फ़ंक्शंस को सी फ़ंक्शन के रूप में लिखा जाना चाहिए, न कि ओबीजेसी विधि।

2. strip का उपयोग करें।

डिफ़ॉल्ट रूप से संकलक सभी निजी प्रतीकों को रखेगा (जो स्टैक ट्रेस को अधिक पठनीय होने की अनुमति देता है)। इन सभी प्रतीकों को हटाने के लिए आप strip का उपयोग कर सकते हैं।

3. Obfuscation।

उपर्युक्त चरण केवल कोड तर्क छुपा सकते हैं। लेकिन अगर पासवर्ड एक स्थिर स्ट्रिंग है, तो यह तुरंत strings उपयोगिता का उपयोग कर दिखाई देता है। आप रनटाइम में पासवर्ड बनाकर इसे खराब कर सकते हैं (उदा। फ़ाइल में आरओटी -13 में एन्कोड किए गए पासवर्ड को स्टोर करें।)

4. या बस अपना डिज़ाइन बदलें।

कोई फर्क नहीं पड़ता कि आपकी सुरक्षा प्रणाली कितनी अच्छी है, क्योंकि हैकर के पास मशीन पर कुल नियंत्रण होता है, पर्याप्त समय दिया जाता है, वे हमेशा जीतते हैं। अपने डिज़ाइन को संशोधित करना बेहतर है, जैसे पासवर्ड निष्पादन योग्य के साथ क्यों आना चाहिए? या फिर वैश्विक पासवर्ड की आवश्यकता क्यों है?

+0

उत्तर के लिए धन्यवाद। मैं एक बहुत अनुभवी प्रोग्रामर नहीं हूं लेकिन मैं इसे सी फ़ंक्शन में कैसे बदलूं? – nosedive25

+1

@happy: '+ (NSString *) getPassword का उपयोग करने की बजाय, ', आप' स्थिर एनएसएसटींग * getPassword (शून्य) बनाते हैं; 'कक्षा के बाहर। – kennytm

8

आपको कभी निष्पादन योग्य में पासवर्ड डालना चाहिए।

यह मॉनीटर के बगल में एक चिपचिपा नोट पर पासवर्ड डालने जैसा है। यदि किसी दुर्भावनापूर्ण हैकर के पास आपका एप्लिकेशन है तो वे अंततः पासवर्ड निकाल सकते हैं चाहे आप इसे लिखने के लिए किस भाषा या एपीआई का उपयोग करते हैं।

उदाहरण के लिए, यदि मुझे पता है कि आपका एप्लिकेशन पासवर्ड से सुरक्षित सर्वर से जुड़ता है लेकिन एप्लिकेशन कभी पासवर्ड नहीं मांगता है, तो मुझे पता है कि आपने पासवर्ड शामिल करने की गलती की है। पासवर्ड खोजने के लिए, मुझे प्रोग्राम के संचालन की निगरानी करने की आवश्यकता है ताकि सर्वर के कनेक्ट होने के दौरान कोड के कौन से क्षेत्र सक्रिय हों। यह मुझे बताएगा कि आपका आवेदन कितना बड़ा है, इस पर ध्यान दिए बिना पासवर्ड के लिए खोज पर ध्यान केंद्रित करना है। फिर यह केवल समय की बात है जब तक कि मैं पासवर्ड को ट्रैक नहीं करता। पासवर्ड एन्क्रिप्ट करना अच्छा नहीं है क्योंकि एन्क्रिप्शन एल्गोरिदम ऐप में भी होना चाहिए और मैं इसे भी सुलझ सकता हूं।

याद रखें कि वहां बहुत से लोग हैं जो केवल कच्चे मशीन कोड का उपयोग करके आपके कोड को सुलझ सकते हैं। उन लोगों के लिए इससे कोई फर्क नहीं पड़ता कि आप किस भाषा या एपीआई का उपयोग करते हैं क्योंकि वे सभी अंत में मशीन कोड से आसवित होते हैं। वे लोग प्रोग्रामिंग के डरावने कुशल देवता हैं और वे केवल आप या मैं जैसे प्राणियों पर हंसते हैं।दुर्भाग्य से, उनमें से कुछ बुराई हैं।

क्या मैंने उल्लेख किया है कि आपको कभी नहीं एक निष्पादन योग्य में पासवर्ड डाल दिया? अगर मैंने नहीं किया, तो मुझे दोहराएं कि आपको कभी निष्पादन योग्य में पासवर्ड डालना चाहिए।

अपने विशेष मामले में, नौसिखिया प्रोग्रामर के रूप में, आपको किसी से पासवर्ड से छिपाने की कोई उम्मीद नहीं है, यहां तक ​​कि आपके से थोड़ा अधिक अनुभव भी है। यह एक और अच्छा कारण है कि आपको कभी निष्पादन योग्य में पासवर्ड डालना चाहिए।

+1

उत्तर के लिए धन्यवाद। एकमात्र कारण यह है कि इसमें कुछ पासवर्ड है, यह सिर्फ कुछ दोस्तों के लिए है और इसे वितरित नहीं किया जाएगा। – nosedive25

+3

दोस्त? तो आप इसे एन्क्रिप्ट क्यों करना चाहते हैं? :-) –

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