
एक स्वचालित अस्पष्टीकरण उपकरण जो एंड्रॉइड ऐप्स के लिए है, ब्लैक-बॉक्स शैली में काम करता है, उन्नत अस्पष्टीकरण सुविधाओं का समर्थन करता है और इसमें मॉड्यूलर आर्किटेक्चर है जो नई तकनीकों के साथ आसानी से विस्तार योग्य है।
[!IMPORTANT] यह प्रोजेक्ट संग्रहीत है और अब इसका रखरखाव नहीं किया जाता है।
कुछ सामान्य प्रश्नों के उत्तर FAQ और समस्या निवारण में दिए गए हैं।

Android ऐप्स के लिए एक ब्लैक-बॉक्स अस्पष्टीकरण उपकरण।
Obfuscapk एक मॉड्यूलर पायथन उपकरण है जो Android ऐप्स को बिना उनके स्रोत कोड की आवश्यकता के अस्पष्ट करने के लिए है, क्योंकि मूल apk फ़ाइल को डीकंपाइल करने और नया एप्लिकेशन बनाने के लिए apktool का उपयोग किया जाता है, जो डीकंपाइल की गई smali कोड, संसाधनों और मेनिफेस्ट पर कुछ अस्पष्टीकरण तकनीकों को लागू करने के बाद होता है। अस्पष्ट किया गया ऐप मूल ऐप के समान कार्यक्षमता बनाए रखता है, लेकिन अंदरूनी अंतर कभी-कभी नए एप्लिकेशन को मूल से बहुत अलग बना देते हैं (जैसे, हस्ताक्षर-आधारित एंटीवायरस सॉफ़्टवेयर के लिए)।
Obfuscapk Android App Bundles (aab फ़ाइलें) के लिए समर्थन जोड़ रहा है, BundleDecompiler का उपयोग करके (देखें #121)। इस नई सुविधा का उपयोग करने के लिए, BundleDecompiler का नवीनतम संस्करण यहाँ से डाउनलोड करें, इसे BundleDecompiler.jar के रूप में PATH में शामिल निर्देशिका में सहेजें (जैसे, Ubuntu में, /usr/local/bin या /usr/bin) और सुनिश्चित करें कि इसमें निष्पादन योग्य ध्वज सेट है।
[!IMPORTANT] BundleDecompiler अभी Windows पर काम नहीं करता है, इसलिए Windows प्लेटफ़ॉर्म पर Obfuscapk द्वारा ऐप बंडल अस्पष्टीकरण समर्थित नहीं है। साथ ही, ऐप बंडल समर्थन अभी प्रारंभिक विकास में है, इसलिए यदि आपको कोई समस्या आती है या आप हमें सुधारने में मदद करना चाहते हैं, तो कृपया योगदान देखें।
Obfuscapk के बारे में अधिक विवरण पेपर "Obfuscapk: An open-source black-box obfuscation tool for Android apps" में पाया जा सकता है। आप पेपर को इस प्रकार उद्धृत कर सकते हैं:```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }
## ❱ डेमो

## ❱ आर्किटेक्चर

Obfuscapk को मॉड्यूलर और विस्तार में आसान बनाने के लिए डिज़ाइन किया गया है, इसलिए इसे [प्लगइन सिस्टम](https://github.com/tibonihoo/yapsy) का उपयोग करके बनाया गया है। परिणामस्वरूप, प्रत्येक ऑबफस्केटर एक प्लगइन है जो एक अमूर्त [बेस क्लास](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py) से विरासत प्राप्त करता है और `obfuscate` विधि को लागू करने की आवश्यकता होती है। जब टूल एक नई Android एप्लिकेशन फ़ाइल को प्रोसेस करना शुरू करता है, तो यह सभी आवश्यक जानकारी (जैसे, डीकंपाइल की गई `smali` कोड का स्थान) और संचालन की आंतरिक स्थिति (जैसे, पहले से उपयोग किए गए ऑबफस्केटरों की सूची) को संग्रहीत करने के लिए एक [ऑबफस्केशन ऑब्जेक्ट](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py) बनाता है। फिर ऑबफस्केशन ऑब्जेक्ट को सभी सक्रिय प्लगइन/ऑबफस्केटर को (अनुक्रम में) प्रोसेस और संशोधित करने के लिए `obfuscate` विधि के पैरामीटर के रूप में पास किया जाता है। सक्रिय प्लगइनों की सूची और क्रम [कमांड लाइन विकल्पों](#-usage) के माध्यम से निर्दिष्ट किया जाता है।
टूल को नए ऑबफस्केटर के साथ आसानी से विस्तारित किया जा सकता है: ऑबफस्केशन तकनीक को लागू करने वाला स्रोत कोड और प्लगइन मेटाडेटा (एक `<obfuscator-name>.obfuscator` फ़ाइल) को [`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators) निर्देशिका में जोड़ना पर्याप्त है (एक सरल मौजूदा ऑबफस्केटर जैसे [`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py) को शुरुआती उदाहरण के रूप में लें)। टूल स्वचालित रूप से नए प्लगइन का पता लगाएगा, इसलिए किसी और कॉन्फ़िगरेशन की आवश्यकता नहीं है (नए प्लगइन को टूल के साथ बंडल किए गए अन्य सभी प्लगइनों की तरह ही व्यवहार किया जाएगा)।
## ❱ स्थापना
अपने कंप्यूटर पर Obfuscapk की एक कार्यशील प्रतिलिपि प्राप्त करने के दो तरीके हैं: या तो [Docker का उपयोग करके](#docker-image) या `Python 3` वातावरण में [सीधे स्रोत कोड का उपयोग करके](#from-source)। दोनों ही मामलों में, पहली चीज़ इस रिपॉजिटरी की एक स्थानीय प्रतिलिपि प्राप्त करना है, इसलिए उस निर्देशिका में एक टर्मिनल खोलें जहाँ आप प्रोजेक्ट को सहेजना चाहते हैं और रिपॉजिटरी को क्लोन करें:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
यह Obfuscapk को स्थापित करने का सुझाया गया तरीका है, क्योंकि एकमात्र आवश्यकता Docker का एक नवीनतम संस्करण स्थापित होना है:```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### आधिकारिक Docker Hub इमेज
[आधिकारिक Obfuscapk Docker इमेज](https://hub.docker.com/r/claudiugeorgiu/obfuscapk)
Docker Hub पर उपलब्ध है (इस रिपॉजिटरी से स्वचालित रूप से निर्मित):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
यदि आपने Docker Hub से आधिकारिक इमेज डाउनलोड की है, तो आप टूल का उपयोग करने के लिए तैयार हैं, इसलिए उपयोग निर्देश देखें, अन्यथा पहले बनाए गए Obfuscapk/src/ निर्देशिका (जिसमें Dockerfile युक्त फ़ोल्डर है) में निम्नलिखित कमांड चलाएं Docker इमेज बनाने के लिए:```Shell
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
जब Docker इमेज तैयार हो जाए, तो यह सुनिश्चित करने के लिए एक त्वरित परीक्षण करें कि सब कुछ सही ढंग से स्थापित किया गया था:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk अब उपयोग के लिए तैयार है, उपयोग निर्देश देखें अधिक जानकारी के लिए।
सुनिश्चित करें कि आपके पास नवीनतम संस्करण हो
apktool,
apksigner
और zipalign स्थापित
और कमांड लाइन से उपलब्ध हो:```Shell
$ apktool
Apktool v2.9.0 - a tool for reengineering Android apk files
...
```Shell
$ apksigner
Usage: apksigner <command> [options]
apksigner --version
apksigner --help
...
$ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
...
ऐप बंडल अस्पष्टता (obfuscation) का समर्थन करने के लिए आपको BundleDecompiler की भी आवश्यकता है, इसलिए नवीनतम उपलब्ध संस्करण यहाँ से डाउनलोड करें, इसे BundleDecompiler.jar के रूप में PATH में शामिल एक निर्देशिका में सहेजें (उदाहरण के लिए, Ubuntu में, /usr/local/bin या /usr/bin) और सुनिश्चित करें कि इसका निष्पादन योग्य ध्वज (executable flag) सेट है।
BundleDecompiler और apktool का उपयोग करने के लिए आपको Java के एक हालिया संस्करण की भी आवश्यकता है। zipalign और apksigner Android SDK में शामिल हैं। निष्पादन योग्य फ़ाइलों के स्थान को निम्नलिखित पर्यावरण चर (environment variables) के माध्यम से भी निर्दिष्ट किया जा सकता है: APKTOOL_PATH, BUNDLE_DECOMPILER_PATH, APKSIGNER_PATH और ZIPALIGN_PATH (उदाहरण के लिए, Ubuntu में, एक ही टर्मिनल में Obfuscapk चलाने से पहले export APKTOOL_PATH=/custom/location/apktool चलाएं)।
उपरोक्त उपकरणों के अलावा, इस परियोजना की एकमात्र आवश्यकता एक कार्यशील Python 3 (कम से कम 3.7) स्थापना (इसके पैकेज मैनेजर pip के साथ) है।
परियोजना के मुख्य निर्देशिका (Obfuscapk/) में आवश्यक निर्भरताओं (dependencies) को स्थापित करने के लिए निम्नलिखित कमांड चलाएं:```Shell
$ # Make sure to run the commands in Obfuscapk/ directory.
$ # The usage of a virtual environment is highly recommended. $ python3 -m venv venv $ source venv/bin/activate
$ # Install Obfuscapk's requirements. $ python3 -m pip install -r src/requirements.txt
आवश्यकताएँ स्थापित होने के बाद, यह जांचने के लिए एक त्वरित परीक्षण करें कि सब कुछ सही ढंग से काम करता है:```Shell
$ cd src/
$ # The following command has to be executed always from Obfuscapk/src/ directory
$ # or by adding Obfuscapk/src/ directory to PYTHONPATH environment variable.
$ python3 -m obfuscapk.cli --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk अब उपयोग के लिए तैयार है, उपयोग निर्देश देखें अधिक जानकारी के लिए।
अब से, Obfuscapk को obfuscapk के रूप में उपलब्ध एक निष्पादन योग्य माना जाएगा, इसलिए आपको उपकरण को स्थापित करने के तरीके के अनुसार कमांड को अनुकूलित करने की आवश्यकता है:
Docker छवि: अस्पष्ट करने के लिए एप्लिकेशन वाली एक स्थानीय निर्देशिका को कंटेनर में /workdir पर माउंट किया जाना चाहिए (उदाहरण के लिए, वर्तमान निर्देशिका "${PWD}"), इसलिए कमांड:
$ obfuscapk [params...]
बन जाता है:
$ docker run --rm -it -u $(id -u):$(id -g) -v "${PWD}":"/workdir" obfuscapk [params...]
स्रोत से: प्रत्येक निर्देश को Obfuscapk/src/ निर्देशिका से निष्पादित किया जाना चाहिए (या Obfuscapk/src/ निर्देशिका को PYTHONPATH पर्यावरण चर में जोड़कर) और कमांड:
$ obfuscapk [params...]
बन जाता है:
$ python3 -m obfuscapk.cli [params...]
आइए सहायता संदेश को देखकर शुरू करें:```Shell $ obfuscapk --help obfuscapk [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB] [-i] [-p] [-k VT_API_KEY] [--keystore-file KEYSTORE_FILE] [--keystore-password KEYSTORE_PASSWORD] [--key-alias KEY_ALIAS] [--key-password KEY_PASSWORD] [--use-aapt2] <APK_OR_BUNDLE_FILE>
यहाँ दो अनिवार्य पैरामीटर हैं: `<APK_OR_BUNDLE_FILE>`, ऑबफस्केट करने के लिए एपीके या ऐप बंडल फ़ाइल का पथ (सापेक्ष या निरपेक्ष) और लागू करने के लिए ऑबफस्केशन तकनीकों के नामों की सूची (`-o` विकल्प के साथ निर्दिष्ट जिसे कई बार उपयोग किया जा सकता है, जैसे, `-o Rebuild -o NewAlignment -o NewSignature`)। अन्य वैकल्पिक तर्क इस प्रकार हैं:
* `-w DIR` का उपयोग कार्यशील निर्देशिका सेट करने के लिए किया जाता है जहाँ मध्यवर्ती फ़ाइलें (जो `apktool` द्वारा उत्पन्न होती हैं) सहेजी जाएँगी। यदि निर्दिष्ट नहीं किया गया है, तो इनपुट एप्लिकेशन के समान निर्देशिका में `obfuscation_working_dir` नाम की निर्देशिका बनाई जाती है। यह डीबगिंग उद्देश्यों के लिए उपयोगी हो सकता है, लेकिन यदि इसकी आवश्यकता नहीं है तो इसे एक अस्थायी निर्देशिका पर सेट किया जा सकता है (जैसे, `-w /tmp/`)।
* `-d OUT_APK_OR_AAB` का उपयोग गंतव्य फ़ाइल का पथ सेट करने के लिए किया जाता है: ऑबफस्केशन प्रक्रिया द्वारा उत्पन्न एपीके फ़ाइल (जैसे, `-d /home/user/Desktop/obfuscated.apk` या `-d /home/user/Desktop/obfuscated.aab`)। यदि निर्दिष्ट नहीं किया गया है, तो अंतिम ऑबफस्केटेड फ़ाइल कार्यशील निर्देशिका के अंदर सहेजी जाएगी। ध्यान दें: मौजूदा फ़ाइलें बिना किसी चेतावनी के ओवरराइट कर दी जाएँगी।
* `-i` एक फ्लैग है जो ऑबफस्केशन प्रक्रिया के दौरान ज्ञात तृतीय-पक्ष लाइब्रेरियों को अनदेखा करने के लिए है, ताकि कम संसाधनों का उपयोग हो, प्रदर्शन बढ़े और त्रुटियों का जोखिम कम हो। अनदेखा करने के लिए [लाइब्रेरियों की सूची](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/libs_to_ignore.txt) [LiteRadar](https://github.com/pkumza/LiteRadar) परियोजना से अनुकूलित की गई है।
* `-p` एक फ्लैग है जो ऑबफस्केशन संचालन के दौरान प्रगति पट्टियाँ दिखाने के लिए है। जब टूल का उपयोग बैच संचालन/स्वचालित बिल्ड में किया जाता है, तो प्रगति पट्टियाँ अक्षम रखना सुविधाजनक होता है, अन्यथा ऑबफस्केशन प्रगति देखने के लिए इस फ्लैग को सक्षम किया जाना चाहिए।
* `-k VT_API_KEY` की आवश्यकता केवल `VirusTotal` ऑबफस्केटर का उपयोग करते समय होती है, ताकि Virus Total के साथ संचार करते समय उपयोग की जाने वाली API कुंजी सेट की जा सके।
* `--keystore-file KEYSTORE_FILE`, `--keystore-password KEYSTORE_PASSWORD`, `--key-alias KEY_ALIAS` और `--key-password KEY_PASSWORD` का उपयोग एक कस्टम कीस्टोर निर्दिष्ट करने के लिए किया जा सकता है (एपीके हस्ताक्षर के लिए आवश्यक)। यदि `--keystore-file` का उपयोग किया जाता है, तो `--keystore-password` और `--key-alias` भी निर्दिष्ट किए जाने चाहिए, जबकि `--key-password` की आवश्यकता केवल तब होती है जब चुनी गई कुंजी का पासवर्ड कीस्टोर पासवर्ड से भिन्न हो। डिफ़ॉल्ट रूप से (जब `--keystore-file` निर्दिष्ट नहीं किया जाता है), हस्ताक्षर संचालन के लिए [Obfuscapk के साथ बंडल किए गए कीस्टोर](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/obfuscation_keystore.jks) का उपयोग किया जाता है।
* `--ignore-packages-file IGNORE_PACKAGES_FILE` एक फ़ाइल का पथ है जिसमें अनदेखा किए जाने वाले पैकेज नाम शामिल हैं। जब इस विकल्प का उपयोग किया जाता है, तो उन पैकेजों के अंदर की सभी क्लासेज़ ऑबफस्केट नहीं होंगी। फ़ाइल में प्रति पंक्ति एक पैकेज नाम होना चाहिए जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
```
com.mycompany.dontobfuscate
com.mycompany.ignore
...
```
* `--use-aapt2` एक फ्लैग है जो `apktool` के साथ ऐप को पुनर्निर्माण करते समय aapt2 विकल्प का उपयोग करने के लिए है।
आइए अब एक सरल कार्यशील उदाहरण पर विचार करें कि Obfuscapk कैसे काम करता है:```Shell
$ # original.apk is a valid Android apk file.
$ obfuscapk -o RandomManifest -o Rebuild -o NewAlignment -o NewSignature original.apk
जब उपरोक्त कमांड चलाया जाता है, तो पर्दे के पीछे यह होता है:
चूंकि कोई कार्यशील निर्देशिका निर्दिष्ट नहीं की गई थी, एक नई कार्यशील निर्देशिका
(obfuscation_working_dir) original.apk के समान स्थान पर बनाई जाती है (यह
त्रुटियों के मामले में smali फ़ाइलों/मेनिफेस्ट/संसाधनों का निरीक्षण करने के लिए
उपयोगी हो सकता है)
यह सुनिश्चित करने के लिए कुछ जाँचें की जाती हैं कि सभी आवश्यक फ़ाइलें/निष्पादन योग्य फ़ाइलें उपलब्ध हैं और उपयोग के लिए तैयार हैं
वास्तविक अस्पष्टीकरण प्रक्रिया शुरू होती है: निर्दिष्ट अस्पष्टीकरणकर्ताओं को (क्रम में) एक के बाद एक तब तक निष्पादित किया जाता है जब तक कोई अस्पष्टीकरणकर्ता शेष न हो या कोई त्रुटि न आए
पहला अस्पष्टीकरणकर्ता चलाते समय, original.apk को apktool से डीकंपाइल किया जाता है
और परिणाम कार्यशील निर्देशिका में संग्रहीत किए जाते हैं
चूंकि पहला अस्पष्टीकरणकर्ता RandomManifest है, डीकंपाइल किए गए
Android मेनिफेस्ट में प्रविष्टियों को बेतरतीब ढंग से पुनर्व्यवस्थित किया जाता है (xml संरचनाओं को तोड़े बिना)
Rebuild अस्पष्टीकरणकर्ता केवल apktool का उपयोग करके एप्लिकेशन को (अब संशोधित
मेनिफेस्ट के साथ) पुनर्निर्माण करता है, और चूंकि कोई आउटपुट फ़ाइल निर्दिष्ट नहीं की गई थी, परिणामी
apk फ़ाइल पहले बनाई गई कार्यशील निर्देशिका में सहेजी जाती है
अस्पष्टीकरणकर्ता परिणामी apk फ़ाइल को संरेखित करने के लिए टूल का उपयोग करता है
जैसा कि पिछले उदाहरण में देखा गया है, किसी अस्पष्टीकरण ऑपरेशन को पूरा करने के लिए, Rebuild, NewAlignment और NewSignature
अस्पष्टीकरणकर्ताओं की हमेशा आवश्यकता होती है, ताकि अंतिम अस्पष्टीकृत apk का निर्माण किया जा सके।
वे वास्तविक अस्पष्टीकरण तकनीक नहीं हैं, लेकिन निर्माण प्रक्रिया में उनकी आवश्यकता होती है, इसलिए समग्र
आर्किटेक्चर को मॉड्यूलर रखने के लिए उन्हें अस्पष्टीकरणकर्ताओं की सूची में शामिल किया गया है।
जैसा अपेक्षित काम नहीं कर रहा? देखें FAQ और समस्या निवारण.
Obfuscapk में शामिल अस्पष्टीकरणकर्ताओं को उनके द्वारा किए जाने वाले कार्यों के आधार पर विभिन्न श्रेणियों में विभाजित किया जा सकता है:
Trivial: जैसा कि नाम से पता चलता है, इस श्रेणी में सरल संचालन शामिल हैं (जो मूल एप्लिकेशन को बहुत अधिक संशोधित नहीं करते हैं), जैसे कि apk फ़ाइल पर नए हस्ताक्षर के साथ हस्ताक्षर करना।
Rename: संचालन जो उपयोग किए गए पहचानकर्ताओं (क्लास, फ़ील्ड, मेथड) के नाम बदलते हैं।
Encryption: एन्क्रिप्टेड कोड/संसाधनों को पैकेज करना और ऐप निष्पादन के दौरान उन्हें डिक्रिप्ट करना। जब Obfuscapk शुरू होता है, तो यह स्वचालित रूप से एक यादृच्छिक गुप्त कुंजी (32 वर्ण लंबी, ASCII अक्षरों और अंकों का उपयोग करके) उत्पन्न करता है जिसका उपयोग एन्क्रिप्शन के लिए किया जाएगा।
Code: वे सभी संचालन जिनमें डीकंपाइल स्रोत कोड का संशोधन शामिल है।
Resources: संसाधन फ़ाइलों पर संचालन (जैसे मेनिफेस्ट को संशोधित करना)।
Other
Obfuscapk के साथ वर्तमान में बंडल किए गए अस्पष्टीकरणकर्ता नीचे संक्षेप में प्रस्तुत किए गए हैं (वर्णमाला क्रम में)। अधिक विवरण के लिए कृपया परियोजना के स्रोत कोड देखें।
[!सुझाव] नीचे दिए गए सभी अस्पष्टीकरणकर्ता वास्तविक अस्पष्टीकरण तकनीकों के अनुरूप नहीं हैं (उदा.,
Rebuild,NewAlignment,NewSignatureऔरVirusTotal), लेकिन आर्किटेक्चर को मॉड्यूलर और नई कार्यक्षमता के साथ विस्तारित करने में आसान रखने के लिए उन्हें अस्पष्टीकरणकर्ता के रूप में लागू किया गया है।
Android फ्रेमवर्क के खतरनाक APIs को लागू करने के लिए रिफ्लेक्शन का उपयोग करता है। यह पता लगाने के लिए कि कोई विधि Android फ्रेमवर्क से संबंधित है या नहीं, Obfuscapk Backes et al द्वारा खोजी गई मैपिंग को संदर्भित करता है।
📄 AdvancedReflection स्रोत कोड
जंक कोड सम्मिलित करें। इस मामले में, जंक कोड अंकगणितीय गणनाओं और इन गणनाओं के परिणाम पर निर्भर एक शाखा निर्देश से बना होता है, जिसे इस तरह से तैयार किया जाता है कि शाखा कभी नहीं ली जाती।
📄 ArithmeticBranch स्रोत कोड
एसेट फ़ाइलों को एन्क्रिप्ट करें।
📄 AssetEncryption स्रोत कोड
यह तकनीक कोड सिमेंटिक्स को प्रभावित किए बिना नियंत्रण-प्रवाह ग्राफ को संशोधित करती है: यह नई विधियाँ जोड़ती है जो मूल विधियों को लागू करती हैं। उदाहरण के लिए, m1 विधि के लिए एक आह्वान एक नई रैपर विधि m2 द्वारा प्रतिस्थापित किया जाएगा, जो आह्वान करने पर मूल विधि m1 को कॉल करती है।
📄 CallIndirection स्रोत कोड
पैकेज का नाम बदलें और क्लास का नाम बदलें (मेनिफेस्ट फ़ाइल में भी)।
📄 ClassRename स्रोत कोड
कोड में स्थिर स्ट्रिंग्स को एन्क्रिप्ट करें।
📄 ConstStringEncryption स्रोत कोड
डीबग जानकारी हटाएँ।
📄 DebugRemoval स्रोत कोड
फ़ील्ड का नाम बदलें।
📄 FieldRename स्रोत कोड
किसी विधि को देखते हुए, यह विधि के अंत की ओर इशारा करते हुए एक
gotoनिर्देश और पहलेgotoके बाद के निर्देश की ओर इशारा करते हुए एक औरgotoडालता है; यह दो नए नोड जोड़कर नियंत्रण-प्रवाह ग्राफ को संशोधित करता है।
📄 Goto स्रोत कोड
नेटिव लाइब्रेरीज़ को एन्क्रिप्ट करें।
📄 LibEncryption स्रोत कोड
यह विभिन्न विधियों को समान नाम निर्दिष्ट करने के लिए Java प्रोग्रामिंग भाषा की ओवरलोडिंग सुविधा का शोषण करता है, लेकिन विभिन्न तर्कों का उपयोग करता है। किसी पहले से मौजूद विधि को देखते हुए, यह तकनीक समान नाम और तर्कों के साथ एक नई void विधि बनाती है, लेकिन यह नए यादृच्छिक तर्क भी जोड़ती है। फिर, नई विधि का मुख्य भाग यादृच्छिक अंकगणितीय निर्देशों से भरा जाता है।
📄 MethodOverload स्रोत कोड
विधियों का नाम बदलें।
📄 MethodRename स्रोत कोड
एप्लिकेशन को पुनः संरेखित करें।
📄 NewAlignment स्रोत कोड
एक नए कस्टम हस्ताक्षर के साथ एप्लिकेशन पर फिर से हस्ताक्षर करें।
📄 NewSignature स्रोत कोड
जंक कोड सम्मिलित करें। Nop, no-operation का संक्षिप्त रूप, एक समर्पित निर्देश है जो कुछ नहीं करता है। यह तकनीक प्रत्येक विधि कार्यान्वयन के भीतर बेतरतीब ढंग से
nopनिर्देश सम्मिलित करती है।
📄 Nop स्रोत कोड
मेनिफेस्ट फ़ाइल में प्रविष्टियों को बेतरतीब ढंग से पुनर्व्यवस्थित करें।
📄 RandomManifest स्रोत कोड
एप्लिकेशन का पुनर्निर्माण करें।
📄 Rebuild स्रोत कोड
यह तकनीक ऐप के विधि आह्वानों की तलाश में मौजूदा कोड का विश्लेषण करती है, Android फ्रेमवर्क (देखें
AdvancedReflection) के कॉल को अनदेखा करते हुए। यदि इसे उपयुक्त विधि आह्वान वाला कोई निर्देश मिलता है (अर्थात, कोई कंस्ट्रक्टर विधि नहीं, सार्वजनिक दृश्यता, पर्याप्त मुक्त रजिस्टर आदि), तो ऐसे आह्वान को एक कस्टम विधि पर पुनर्निर्देशित किया जाता है जो Reflection APIs का उपयोग करके मूल विधि को लागू करेगी।
📄 Reflection स्रोत कोड
इस तकनीक में कोड में बुनियादी ब्लॉकों के क्रम को बदलना शामिल है। जब एक शाखा निर्देश मिलता है, तो शर्त को उलट दिया जाता है (उदा., branch if lower than, branch if greater or equal than बन जाता है) और लक्ष्य बुनियादी ब्लॉकों को तदनुसार पुनर्व्यवस्थित किया जाता है। इसके अलावा, यह
gotoनिर्देशों का दुरुपयोग करके बेतरतीब ढंग से कोड को पुनर्व्यवस्थित भी करता है।
📄 Reorder स्रोत कोड
संसाधनों में स्ट्रिंग्स को एन्क्रिप्ट करें (केवल वे जो कोड के अंदर कॉल की जाती हैं)।
📄 ResStringEncryption स्रोत कोड
मूल और अस्पष्टीकृत एप्लिकेशन को Virus Total पर भेजें। आपको VT API कुंजी प्रदान करनी होगी (देखें
-kविकल्प)।
📄 VirusTotal स्रोत कोड
आप इस कोड का उपयोग करने के लिए स्वतंत्र हैं MIT लाइसेंस के तहत।
यह सॉफ्टवेयर कंप्यूटर सुरक्षा प्रयोगशाला (CSecLab) में अनुसंधान उद्देश्यों के लिए विकसित किया गया था, जो DIBRIS, जेनोआ विश्वविद्यालय में स्थित है।
NewAlignmentzipalignNewSignature अस्पष्टीकरणकर्ता नवनिर्मित apk फ़ाइल पर एक कस्टम
प्रमाणपत्र के साथ हस्ताक्षर करता है जो एक
Obfuscapk के साथ बंडल किए गए कीस्टोर में निहित है
(हालाँकि --keystore-file पैरामीटर के साथ एक अलग कीस्टोर निर्दिष्ट किया जा सकता है)
जब सभी अस्पष्टीकरणकर्ता त्रुटियों के बिना निष्पादित हो जाते हैं, तो परिणामी अस्पष्टीकृत
apk फ़ाइल obfuscation_working_dir/original_obfuscated.apk में पाई जा सकती है, जो हस्ताक्षरित,
संरेखित और किसी डिवाइस/एम्युलेटर में स्थापित करने के लिए तैयार है।