2011-03-30 11 views
15

मैंने ऐप में ऐप बिलिंग में लागू किया है, और अब मैं इसे और अधिक सुरक्षित करना चाहता हूं। पढ़ना डेवलपर सामग्री यह कहता है:इनएप बिलिंग सुरक्षा और दूरस्थ विधि आमंत्रण

एक कहानियो कार्यक्रम चलाने के अलावा, हमारी सलाह है कि आप अपने एप्लिकेशन के तहत बिलिंग कोड अंधेरा करना निम्न तकनीक का उपयोग करें।

अन्य विधियों में इनलाइन विधियों।

उन्हें स्थिरांक के रूप में परिभाषित करने के बजाय फ्लाई पर स्ट्रिंग का निर्माण करें।

कॉल विधियों के लिए जावा प्रतिबिंब का उपयोग करें।

http://developer.android.com/guide/market/billing/billing_best_practices.html

कहानियो - ठीक मैं ऐसा कर सकते हैं = ProGuard

अन्य तरीकों में

इनलाइन तरीकों - यह एक बार कह रहा है मेरी कोड पूरा, मैं के रूप में ज्यादा OO से छुटकारा पाने के है क्या मैं अपने सभी कोड को कई पंक्तियों में डाल सकता हूं क्योंकि मैं (मेरे ऐप के बिलिंग हिस्से के लिए) एक विधि में कर सकता हूं? क्या इसमें कक्षाओं को रेखांकित करना शामिल है? एंड्रॉइड उदाहरण में उनके पास एक स्थिरांक वर्ग है, क्या मैं इन सभी को इनलाइन कर दूंगा?

मक्खी पर

निर्माण तार - हाँ तो लाइन में सभी वर्ग लगातार चर के लिए कदम - ठीक ProGuard इस

उपयोग जावा प्रतिबिंब को शामिल करना चाहिए - यह मेरा मुख्य सवाल है। क्या मुझे सभी बुलाए जाने के बजाय मेरे तरीकों का आह्वान करना चाहिए?

अपने आप को कुछ प्रयास को बचाने के लिए मैं कर सकता यह:

private static Object invokeMethod(String name, Class<?>[] params, Object[] args){ 
    try { 
     return MySpecificClass.class.getMethod(name, params).invoke(null, args); 
    } catch (IllegalArgumentException e) { 
     // Should never happen in my code, ignore and cancel in app charge 
    } catch (SecurityException e) { 
     // Should never happen in my code, ignore and cancel in app charge 
    } catch (IllegalAccessException e) { 
     // Should never happen in my code, ignore and cancel in app charge 
    } catch (InvocationTargetException e) { 
     // Should never happen in my code, ignore and cancel in app charge 
    } catch (NoSuchMethodException e) { 
     // Should never happen in my code, ignore and cancel in app charge 
    } 
    return null; 
} 

मैं तो इस तरह की बातें कर सकता है:

private static boolean someMethod() { 
    return true; // just an example 
} 

params = new Class<?>[0]; 
    if ((Boolean) invokeMethod("someMethod", params, null)) { 
     // Do something 
    } 

इस अच्छा सुरक्षा है, या यह सिर्फ कोड ब्लोट और मेरी बना रही है असली उपयोगकर्ता मुद्दों के लिए ऐप undebuggable?

धन्यवाद।

+0

मैं "इनलाइन विधियों" और "प्रतिबिंब का उपयोग" बिंदुओं के बारे में भी सोच रहा था। यह सब एक विशाल दर्द की तरह लगता है। मुझे लगता है कि अपनी विधियों को विशाल-सुपर-विधियों में बदलना थोड़ा सा मदद कर सकता है, espuscating नामों के बाद esp। लेकिन हर जगह प्रतिबिंब का उपयोग करने के लिए ... (अगली टिप्पणी में जारी) –

+0

.. लेकिन प्रतिबिंब का उपयोग करने के लिए हर जगह मेरा सिर विस्फोट कर देगा। प्रतिबिंब के लिए आपका दृष्टिकोण दिलचस्प है, लेकिन मुझे यकीन नहीं है कि यह उन तरीकों के लिए जिम्मेदार है जो अन्य अपवादों को फेंकते हैं (आपने सभी को पकड़ नहीं लिया: 'पकड़ो (अपवाद सबकुछ) ')। मुझे लगता है कि आप इसे फिर से हटा सकते हैं और इसे कहां कहलाते हैं इसे संभालें। ** लेकिन ** आपको 'प्रोगुर्ड' के लिए भी खाता लेना होगा। चूंकि आप नामों को खराब कर देंगे, जो आपके प्रतिबिंब को तोड़ देगा, इसलिए आपको प्रोजेवार्ड कॉन्फ़िगरेशन फ़ाइलों को '-keep' नियम' जोड़ना होगा। तो शायद वे विधियां थोड़ा कम सुरक्षित होंगी क्योंकि उनके पास शायद सार्थक नाम होंगे। –

+0

हे प्रोजेगार्ड आपके तारों को छिपाता नहीं है। रनटाइम पर निर्माण करने के लिए स्ट्रिंग कॉन्सटेनेशन का मतलब नहीं है। यह आमतौर पर उन्हें बाइट्स या एन्कोडेड मानों और रनटाइम –

उत्तर

1

यह ऐसा लगता है जब आप चोरी के उच्च प्रदर्शन वाले खतरे में दिख सकते हैं। यदि उपयोगकर्ता के अनुभव से समझौता करने का मौका था तो मैं केवल अपर्याप्तता की एक अतिरिक्त परत के लिए प्रतिबिंब का उपयोग करके औचित्य साबित नहीं कर पाऊंगा।

+8

पर मूल स्ट्रिंग पर एक अधिक obfuscated स्थिति से परिवर्तित करने का मतलब है तो मेरे ऐप को क्रैक और वितरित किए जाने तक प्रतीक्षा करें .. फिर एक अद्यतन जारी करें। क्या आप माइक्रोसॉफ्ट के लिए काम करते हैं? – Blundell

+6

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

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