Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
Log in
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

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

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
simplify — एंड्रॉइड वर्चुअल मशीन और डीओबफसकेटर | Kitploit
उपकरण/GitHubGitHub/calebfenton/simplify
एंड्रॉइड सुरक्षागतिशील विश्लेषण (सैंडबॉक्सिंग)रिवर्स इंजीनियरिंगमालवेयर विश्लेषणबाइनरी विश्लेषण
GitHubcalebfenton/simplify

simplify

एंड्रॉइड वर्चुअल मशीन और डीओबफसकेटर

रिपॉजिटरी देखें
4.7k455235 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

सरल करें

निर्माण स्थिति कवरेज स्थिति कवरिटी स्कैन निर्माण स्थिति

सामान्य एंड्रॉइड डिओबफस्केटर

Simplify वस्तुतः एक ऐप को निष्पादित करके उसके व्यवहार को समझता है और फिर कोड को अनुकूलित करने का प्रयास करता है ताकि वह समान व्यवहार करे लेकिन मनुष्य के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए इससे कोई फर्क नहीं पड़ता कि किस विशेष प्रकार का अस्पष्टीकरण (obfuscation) उपयोग किया गया है।

पहले और बाद में

बाईं ओर का कोड एक अस्पष्टीकृत ऐप का डीकंपाइलेशन है, और दाईं ओर का कोड डिओबफस्केट किया गया है।

बहुत सारे मेथड कॉल, कोई स्पष्ट अर्थ नहीं वाह, इतना शाब्दिक, बहुत अर्थ

अवलोकन

परियोजना के तीन भाग हैं: smalivm, simplify, और डेमो ऐप।

  1. smalivm: Dalvik विधियों को निष्पादित करने के लिए एक वर्चुअल मशीन सैंडबॉक्स प्रदान करता है। किसी विधि को निष्पादित करने के बाद, यह एक ग्राफ़ लौटाता है जिसमें प्रत्येक निष्पादन पथ के लिए सभी संभावित रजिस्टर और क्लास मान शामिल होते हैं। यह तब भी काम करता है जब कुछ मान अज्ञात हों, जैसे फ़ाइल और नेटवर्क I/O। उदाहरण के लिए, अज्ञात मान वाली कोई भी if या switch सशर्त स्थिति दोनों शाखाओं को लेने का कारण बनती है।
  2. simplify: smalivm से निष्पादन ग्राफ़ का विश्लेषण करता है और अनुकूलन लागू करता है जैसे स्थिर प्रसार, मृत कोड हटाना, अनुरूपण हटाना (unreflection), और कुछ पीपहोल अनुकूलन। ये काफी सरल हैं, लेकिन जब एक साथ बार-बार लागू किए जाते हैं, तो वे स्ट्रिंग्स को डिक्रिप्ट करेंगे, रिफ्लेक्शन हटाएंगे, और कोड को बहुत सरल बनाएंगे। यह विधियों और कक्षाओं का नाम बदलता नहीं है।
  3. demoapp: आपके अपने प्रोजेक्ट में smalivm का उपयोग करने के लिए सरल, भारी टिप्पणी वाले उदाहरण शामिल हैं। यदि आप कुछ ऐसा बना रहे हैं जिसे Dalvik कोड निष्पादित करने की आवश्यकता है, तो इसे देखें।

उपयोग

usage: java -jar simplify.jar <input> [options]
deobfuscates a dalvik executable
 -et,--exclude-types <pattern>   उन कक्षाओं और विधियों को बाहर करें जिनमें REGEX शामिल है, जैसे: "com/android", include-types के बाद लागू होता है
 -h,--help                       यह संदेश प्रदर्शित करें
 -ie,--ignore-errors             विधियों को निष्पादित और अनुकूलित करते समय त्रुटियों को अनदेखा करें। इससे अप्रत्याशित व्यवहार हो सकता है।
    --include-support            Android समर्थन लाइब्रेरी पैकेजों में कक्षाओं को निष्पादित और अनुकूलित करने का प्रयास करें, डिफ़ॉल्ट: false
 -it,--include-types <pattern>   निष्पादन को उन कक्षाओं और विधियों तक सीमित करें जिनमें REGEX शामिल है, जैसे: ";->targetMethod\("
    --max-address-visits <N>     किसी विधि को निष्पादित करना छोड़ दें जब उसी पते पर N बार जाया जाए, लूप को सीमित करता है, डिफ़ॉल्ट: 10000
    --max-call-depth <N>         N की कॉल गहराई तक पहुँचने के बाद विधियों को कॉल न करें, पुनरावृत्ति और लंबी विधि श्रृंखलाओं को सीमित करता है, डिफ़ॉल्ट: 50
    --max-execution-time <N>     किसी विधि को N सेकंड के बाद निष्पादित करना छोड़ दें, डिफ़ॉल्ट: 300
    --max-method-visits <N>      किसी विधि में N निर्देश निष्पादित करने के बाद उसे निष्पादित करना छोड़ दें, डिफ़ॉल्ट: 1000000
    --max-passes <N>             किसी विधि पर अनुकूलक को N बार से अधिक न चलाएं, डिफ़ॉल्ट: 100
 -o,--output <file>              सरलीकृत आउटपुट को FILE में लिखें
    --output-api-level <LEVEL>   आउटपुट DEX API संगतता को LEVEL पर सेट करें, डिफ़ॉल्ट: 15
 -q,--quiet                      शांत रहें
    --remove-weak                कमजोर दुष्प्रभाव होने पर भी कोड हटाएं, डिफ़ॉल्ट: true
 -v,--verbose <LEVEL>            वाचालता को LEVEL पर सेट करें, डिफ़ॉल्ट: 0

निर्माण

निर्माण के लिए जावा डेवलपमेंट किट 8 (JDK) स्थापित होना आवश्यक है।

क्योंकि इस परियोजना में Android फ्रेमवर्क के लिए सबमॉड्यूल शामिल हैं, --recursive के साथ क्लोन करें:

git clone --recursive https://github.com/CalebFenton/simplify.git

या किसी भी समय सबमॉड्यूल को अपडेट करें:

git submodule update --init --recursive

फिर, सभी निर्भरताओं वाला एक एकल jar बनाने के लिए:

./gradlew fatjar

Simplify jar simplify/build/libs/ में होगा। आप प्रदान किए गए अस्पष्टीकृत उदाहरण ऐप को सरल बनाकर इसके काम करने की जांच कर सकते हैं। इसे चलाने का तरीका यहां दिया गया है (आपको simplify.jar बदलने की आवश्यकता हो सकती है):

java -jar simplify/build/libs/simplify.jar -it "org/cf/obfuscated" -et "MainActivity" simplify/obfuscated-app.apk

यह समझने के लिए कि क्या डिओबफस्केट किया जा रहा है, Obfuscated App का README देखें।

समस्या निवारण

यदि Simplify विफल हो जाता है, तो क्रम से इन सुझावों को आज़माएं:

  1. केवल कुछ विधियों या कक्षाओं को लक्षित करने के लिए -it विकल्प का उपयोग करें।
  2. यदि विफलता अधिकतम विज़िट से अधिक होने के कारण है, तो उच्च --max-address-visits, --max-call-depth, और --max-method-visits का उपयोग करने का प्रयास करें।
  3. -v या -v 2 के साथ प्रयास करें और लॉग और DEX या APK के हैश के साथ समस्या की रिपोर्ट करें।
  4. फिर से प्रयास करें, लेकिन आँख से संपर्क न तोड़ें। Simplify डर को महसूस कर सकता है।

यदि Windows पर निर्माण कर रहे हैं और निर्माण इस तरह की त्रुटि के साथ विफल होता है:

Could not find tools.jar. Please check that C:\Program Files\Java\jre1.8.0_151 contains a valid JDK installation.

इसका अर्थ है कि Gradle उचित JDK पथ खोजने में असमर्थ है। सुनिश्चित करें कि JDK स्थापित है, JAVA_HOME पर्यावरण चर को अपने JDK पथ पर सेट करें, और निर्माण के लिए उपयोग किए जाने वाले कमांड प्रॉम्प्ट को बंद करके फिर से खोलें।

योगदान

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

समस्याओं की रिपोर्ट करना

कृपया APK या DEX का लिंक और आपके द्वारा उपयोग किया जा रहा पूर्ण कमांड शामिल करें। इससे आपकी समस्या को पुन: उत्पन्न करना (और इस प्रकार ठीक करना) बहुत आसान हो जाता है।

यदि आप नमूना साझा नहीं कर सकते, तो कृपया फ़ाइल हैश (SHA1, SHA256, आदि) शामिल करें।

अनुकूलन रणनीतियाँ

स्थिर प्रसार

यदि कोई op किसी प्रकार का मान रखता है जिसे स्थिरांक में बदला जा सकता है जैसे स्ट्रिंग, संख्या या बूलियन, तो यह अनुकूलन उस op को स्थिरांक से बदल देगा। उदाहरण के लिए:

const-string v0, "VGVsbCBtZSBvZiB5b3VyIGhvbWV3b3JsZCwgVXN1bC4="
invoke-static {v0}, Lmy/string/Decryptor;->decrypt(Ljava/lang/String;)Ljava/lang/String;
# Decrypts to: "Tell me of your homeworld, Usul."
move-result v0

इस उदाहरण में, एक एन्क्रिप्टेड स्ट्रिंग को डिक्रिप्ट किया जाता है और v0 में रखा जाता है। चूंकि स्ट्रिंग "constantizable" हैं, move-result v0 को const-string से बदला जा सकता है:

const-string v0, "VGVsbCBtZSBvZiB5b3VyIGhvbWV3b3JsZCwgVXN1bC4="
invoke-static {v0}, Lmy/string/Decryptor;->decrypt(Ljava/lang/String;)Ljava/lang/String;
const-string v0, "Tell me of your homeworld, Usul."

मृत कोड हटाना

टूल डाउनलोड करें