दिलचस्प पोस्ट
सिस्टम रीबूट के बाद प्रसारण रिसीवर में एक चेतावनी संवाद दिखाएं ऑटोसाइज़िंग मास्क प्रोग्रामैटिक बनाम इंटरफ़ेस बिल्डर / xib / nib सी, पायथन – मॉड्यूलो (%) ऑपरेशन के विभिन्न व्यवहार Int8_t, int_least8_t और int_fast8_t का अंतर? क्या मैं जावास्क्रिप्ट में एचटीएमएल विशेष वर्णों से बच सकता हूं? Linq में बैच बनाएं बॉक्स स्टैकिंग समस्या एंड्रॉइड एक्सएमएल-लेआउट में <मर्ज> और <include> उपयोग का सरल उदाहरण Levenshtein: MySQL + PHP ऐप्पल इंटरफ़ेस बिल्डर: यूआईएमएजेव्यू में सबव्यू को जोड़ना किसी सामग्री स्क्रिप्ट का उपयोग करके पृष्ठ संदर्भ में कोड डालें रिकर्सिव संरचना को पुनरावृत्त करके अस्थिर संदर्भ प्राप्त करना WebClient.DownloadString () अजीब अक्षर के साथ तार देता है उपप्रक्रिया में कई पाइप रेल 3: अजाक्स कॉल में "redirect_to" कैसे करें?

ओब्बुस्केटेड कोड में स्ट्रिंग छुपाना

मैंने प्रोगुअर का उपयोग करते हुए अपना एंड्रॉइड कोड छुड़ाया और फिर उसे कुंठित किया। कई स्ट्रिंग्स हैं जो मैं सचमुच छिपे हुए आँखों से छुपाना चाहूंगा। जब मैंने अपना कोड डिकंपल किया तो सभी के लिए स्ट्रिंग देखने के लिए … और बदलते थे। स्ट्रिंग में से एक मेरे लाइसेंसिंग सर्वर पर एक यूआरएल है और वे यूआरएल को एक नकली सर्वर पर इंगित करने के लिए बदल सकते हैं (जैसा कि मैं जनता को सर्वर कोड जारी कर रहा हूं)। इस तरह की जानकारी को छुपाने का सबसे अच्छा तरीका क्या है?

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

दुश्मन उदाहरण मैं देख रहा हूँ: new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);

2130903058 लेआउट फ़ाइल है लेकिन यह क्या संदर्भित है? संख्या का कोई मतलब नहीं है जब तक कि यह किसी तरह के पते की ओर इशारा करता है।

वेब के समाधान से एकत्रित समाधान "ओब्बुस्केटेड कोड में स्ट्रिंग छुपाना"

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

इसे हासिल करने के लिए आपको स्ट्रिंग के एन्कोडिंग या एन्क्रिप्शन करने की आवश्यकता होगी, जिस तरीके से आप उपयोग करते हैं वह इस बात पर निर्भर करता है कि आप किस प्रकार बचाव के लिए प्रयास कर रहे हैं, अगर आप केवल स्पष्ट निरीक्षण से छिपाने की कोशिश कर रहे हैं, तो एन्कोडिंग पर्याप्त हो सकता है (एंड्रॉइड देखें) .atil.Base64, http://developer.android.com/reference/android/util/Base64.html )। ध्यान दें कि एन्कोडिंग किसी भी तरह से सुरक्षित है और यह आपकी साइट के स्पष्ट संदर्भ को निकाल देगा।

यदि आप कुछ और के खिलाफ बचाव करने की कोशिश कर रहे हैं, तो आप वास्तव में स्ट्रिंग को एन्क्रिप्ट करने के लिए स्थानांतरित कर सकते हैं, ऐसा करने के लिए आप एईएस जैसे एक सीमेट्रिक सिफर का उपयोग javax.crypto.Cipher, http://www.androidsnippets.org/snippets/ 39 / index.html एक सभ्य उपयोग उदाहरण प्रदान करता है। फिर यह और अधिक परेशान है तो हैकर्स होगा सुरक्षित होगा, क्योंकि आपको अपने जार में किसी की जगह को किसी भी क्रिप्टोग्राफिक सुरक्षा को नकारने की आवश्यकता होगी।

यह स्पष्ट करने के लिए, मूल कदम होंगे:

  1. किसी ज्ञात कुंजी का उपयोग करके मैन्युअल रूप से अपनी स्ट्रिंग को एन्क्रिप्ट करें।
  2. इस स्ट्रिंग के एक डिक्रिप्टेड संस्करण का उपयोग करने के लिए अपना कोड कन्वर्ट करें, उदाहरण:

पहले:

 public class Foo { private String mySecret = "http://example.com"; ... } 

हो जाता है:

 public class Foo { private String encrypted = "<manually created encrypted string>"; private String key = "<key used for encryption"; private String mySecret = MyDecryptUtil.decrypt(encrypted, key); ... } 

इस सब के लिए एक (अच्छा) विकल्प तीसरे पक्ष के ड्रम समाधान का प्रयोग करने पर विचार कर रहा है जैसे कि लाइसेंसिंग सर्वर Google http://android-developers.blogspot.com/2010/07/licensing-service-for-android.html प्रदान करता है। यह आपके द्वारा अपने आप को रोल किए जाने की तुलना में अधिक सुरक्षित हो सकता है, लेकिन इसके बाद मैं इसके बाद के संस्करण के बारे में बहुत कुछ बताता हूं।

नमस्ते।

  1. secret को आप जिस पाठ को छुपाना चाहते हैं, उसे दो

  2. अपने डीबग / रिलीज की कुंजीशॉट खोजें। k1 को यह कुंजी दें।

(उपकरण कुंजी टूल्स का उपयोग करें + openssl: keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 )

  1. के k1 साथ secret एन्क्रिप्ट करने के लिए एक उपकरण (एंड्रॉइड कोड के बाहर) का उपयोग करें

    encrypted = encode (secret, k1)

(उदाहरण के लिए: https://jwt.io , जावा के लिए: https://github.com/jwtk/jjwt )।

  1. आपके एंड्रॉइड जावा कोड में encrypted लिखिए। जब आपको encrypted के डीकोड संस्करण की आवश्यकता होती है (यह है, मूल secret ) लिखें

original = decode(encrypted, get_my_keyhash_programmatically() )

बस इतना ही। यह काम करता है क्योंकि मूल secret जावा स्रोत कोड पर नहीं दिखाया गया है, न कि k1 को इसे डिकोड करना है। और, यदि कोई हैकर आपके डीकोड किए गए गुप्त को मुद्रित करना चाहता है, तो उसे कोड बदलना होगा और पुनः कंपाइल करना होगा, अपनी खुद की कीस्टोर के साथ एपीके पर हस्ताक्षर नहीं करना चाहिए, और इस प्रकार सही मूल secret नहीं मिल रहा secret । ("केवल" बिंदु यह है कि क्या आपके मूल। एपीके से k1 का पता लगाया जा सकता है)।

नोट: get_my_keyhash_programmatically ():

 try { PackageInfo info = getPackageManager().getPackageInfo( "el nombre de su paquete por ejemplo com.tarea.u8", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 

मैंने जो किया वह मेरे वैश्विक उपयोगिता वर्ग में स्थैतिक तारों की एक लंबी सूची बना रहा था तारों की लंबी सूची में कुछ जगहों पर मैं अपने पासकी को कई खंडों में डाल दिया।

मेरे कोड के साथ यह देखने के लिए आसान है कि वास्तविक पासकीज़ क्या हैं – लेकिन एक बार ऑब्फीस्केटर को काम करने के लिए सभी स्थिति के नाम पर ए, बी, सी इत्यादि का नाम होगा और यह किसी भी अधिक स्थान को आसान नहीं होगा।

मैं ROT47 का इस्तेमाल किया यह बहुत सुरक्षित नहीं है, लेकिन इसका उपयोग करना आसान और कार्यान्वयन करना है, क्योंकि यह एक सममित एनकोडर / डिकोडर है

आपको "बस एक और पर्ल हैकर" के लिए Google चाहिए ये प्रोग्राम होते हैं जो ओफ़्फोसकेटेड कोड के साथ एक स्ट्रिंग मुद्रित करते हैं। अन्य भाषाओं में बहुत सारे उदाहरण हैं, फिर नेट पर पर्ल।

विकिपीडिया प्रविष्टि

आप DexGuard का प्रयोग स्ट्रिंग्स को एन्क्रिप्ट करने के लिए कर सकते हैं, शायद आप मैन्युअल रूप से हासिल कर सकते हैं, और स्रोत कोड को बोझ किए बिना।