
एंड्रॉइड ऐप्स के लिए पेनिट्रेशन टेस्टिंग और ऑडिटिंग टूलकिट।
एक जावा उपकरण जो Android ऐप्स को तेज़ी से, अधिक आसानी से और अधिक कुशलता से पेंटेस्ट करने में मदद करता है। AndroTickler जानकारी संग्रह, स्थैतिक और गतिशील जाँचों की कई सुविधाएँ प्रदान करता है जो Android ऐप पेंटेस्टिंग के अधिकांश पहलुओं को कवर करती हैं। यह पेंटेस्टर्स को उनके पेंटेस्ट के दौरान आवश्यक कई सुविधाएँ भी प्रदान करता है। AndroTickler विधि अनुरेखण और हेरफेर प्रदान करने के लिए Frida के साथ एकीकृत भी होता है। इसे पहले Tickler नाम से प्रकाशित किया गया था।
AndroTickler को एक लिनक्स होस्ट और एक रूटेड Android उपकरण की आवश्यकता होती है जो उसके USB पोर्ट से जुड़ा हो। यह उपकरण Android उपकरण पर कुछ भी स्थापित नहीं करता, केवल /sdcard पर एक Tickler निर्देशिका बनाता है। AndroTickler उपकरण पर कमांड चलाने और आगे के विश्लेषण के लिए ऐप के डेटा को होस्ट पर TicklerWorkspace निर्देशिका में कॉपी करने के लिए Android SDK पर निर्भर करता है। TicklerWorkspace AndroTickler की कार्यशील निर्देशिका है और प्रत्येक ऐप की TicklerWorkspace में एक अलग उपनिर्देशिका होती है जिसमें निम्नलिखित शामिल हो सकते हैं (उपयोगकर्ता क्रियाओं पर निर्भर करता है):
libs निर्देशिका और Tickler.conf कॉन्फ़िगरेशन फ़ाइल jar फ़ाइल के समान निर्देशिका में मौजूद हैं। कॉन्फ़िगरेशन फ़ाइल होस्ट पर TicklerDir निर्देशिका और Android उपकरण के /sdcard पर Tickler का स्थान निर्धारित करती है। यदि कॉन्फ़िगरेशन फ़ाइल मौजूद नहीं है या ये 2 निर्देशिकाएँ सेट नहीं हैं, तो डिफ़ॉल्ट मानों का उपयोग किया जाएगा (क्रमशः वर्तमान निर्देशिका पर Tickler_workspace और /sdcard/Tickler)। Tickler_lib निर्देशिका में AndroTickler द्वारा उपयोग की जाने वाली कुछ Java लाइब्रेरीज़ और बाहरी उपकरण जैसे apktool और dex2jar शामिल हैं।
AndroTickler निम्नलिखित उपकरणों पर अत्यधिक निर्भर करता है, इसलिए इसका उपयोग करने से पहले उन्हें आपकी मशीन पर मौजूद होना चाहिए:
कुछ सुविधाओं के लिए अन्य उपकरणों की आवश्यकता होती है, लेकिन AndroTickler उनके बिना भी चल सकता है:
कोड से उपकरण बनाएं
gradle build
AndroTickler.jar को Tickler_lib निर्देशिका और Tickler.conf फ़ाइल के समान निर्देशिका में ले जाएं (स्वचालित रूप से build/libs में बनाई गई)
dex2jar को निष्पादन योग्य बनाएं (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh और libs/notJars//dex2jar-2.1/d2j_invoke.sh)
अपने Android उपकरण को परीक्षण के लिए एप्लिकेशन के साथ कनेक्ट करें
नोट: यदि स्रोत कोड बनाना विफल हो जाता है, तो आप releases टैब से नवीनतम संकलित रिलीज़ डाउनलोड कर सकते हैं।
वर्तमान संस्करण निम्नलिखित करता है:
java -jar AndroTickler.jar -h
उपकरण पर स्थापित ऐप्स की सूची बनाएं:
java -jar AndroTickler.jar -pkgs
उपकरण पर स्थापित एक ऐप (पैकेज) खोजता है, जिसके पैकेज नाम में searchKey शामिल है
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [अन्य विकल्प]
कोई भी कमांड जिसमें -pkg विकल्प है (चाहे वह निम्नलिखित विकल्पों में से किसी के साथ उपयोग किया गया हो या नहीं), यदि पहले नहीं किए गए हैं तो निम्नलिखित क्रियाएँ करता है:
java -jar AndroTickler.jar -pkg <package> -info
निम्नलिखित जानकारी लौटाता है:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
ऐप के डीकंपाइल किए गए Java कोड से निम्नलिखित लाता है:
स्वाभाविक रूप से, इसका आउटपुट आमतौर पर बहुत बड़ा होता है, इसलिए कमांड के आउटपुट को एक फ़ाइल में रीडायरेक्ट करने की अनुशंसा की जाती है
short केवल डेवलपर से संबंधित डीकंपाइल किए गए कोड को स्क्वीज़ करता है। उदाहरण के लिए, यदि किसी ऐप का पैकेज नाम com.notEnaf.myapp है, तो squeeze short केवल com/notEnaf निर्देशिका में कोड को स्क्वीज़ करता है।
केवल codeLocation निर्देशिका में कोड को स्क्वीज़ करता है। अपनी खोज को सीमित करने या उपलब्ध होने पर स्रोत कोड को स्क्वीज़ करने में सहायक।
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
ऐप के सभी घटकों की सूची बनाता है
-exp केवल निर्यात किए गए घटकों को दिखाता है
-v प्रत्येक घटक के लिए अधिक विस्तृत जानकारी देता है:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
डिफ़ॉल्ट रूप से, सभी -db कमांड जाँच चलाने से पहले होस्ट पर ऐप के डेटा संग्रहण निर्देशिका को अपडेट करते हैं।
कोई गुण नहीं या e जाँचता है कि ऐप के डेटाबेस एन्क्रिप्टेड हैं या नहीं। यदि -db फ़्लैग के बाद कोई विकल्प नहीं दिया जाता है तो यह डिफ़ॉल्ट क्रिया है। l ऐप के सभी डेटाबेस सूचीबद्ध करता है। एन्क्रिप्टेड डेटाबेस का पता नहीं लग सकता है। d किसी भी अनएन्क्रिप्टेड डेटाबेस का sqlite डंप लेता है। nu noUpdate: होस्ट पर ऐप की डेटा निर्देशिका को अपडेट किए बिना उपरोक्त विकल्पों में से कोई भी चलाता है।
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
ऐप के डेटा संग्रहण निर्देशिका को (DataDirOld में) कॉपी करता है, फिर उपयोगकर्ता से वांछित कार्रवाई करने और पूर्ण होने पर Enter दबाने के लिए कहता है। फिर यह डेटा संग्रहण निर्देशिका को फिर से (DataDir में) कॉपी करता है और यह दिखाने के लिए उनके बीच diff चलाता है कि कौन सी फ़ाइलें जोड़ी, हटाई या संशोधित की गईं।
d|detailed सामान्य -diff कमांड के समान काम करता है, यह भी दिखाता है कि टेक्स्ट फ़ाइलों और अनएन्क्रिप्टेड डेटाबेस में वास्तव में क्या बदला।
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
निम्नलिखित स्थानों में key खोजता है:
खोज केस-असंवेदनशील है।
डीकंपाइल किए गए Java कोड के स्थान को कस्टम स्थान से बदलता है।
java -jar AndroTickler.jar -pkg <package> -sd <key>
दिए गए key के लिए ऐप की डेटा संग्रहण निर्देशिका खोजता है
इंटेंट के सभी संभावित संयोजनों द्वारा ऐप के घटकों को ट्रिगर करता है। उदाहरण के लिए, यदि किसी गतिविधि में 2 संभावित क्रियाओं और 3 डेटा URI स्कीमों का इंटेंट-फ़िल्टर है, तो AndroTickler इस इंटेंट के सभी संभावित संयोजनों के साथ इस गतिविधि को ट्रिगर करेगा। इसके अतिरिक्त, AndroTickler घटक के अनुरूप Java वर्ग में उल्लिखित इंटेंट एक्स्ट्रा को कैप्चर करता है, उन्हें डमी मान निर्दिष्ट करता है और उन्हें संभावित इंटेंट संयोजनों में जोड़ता है। केवल boolean, string, int और float प्रकार के एक्स्ट्रा समर्थित हैं।
यदि -exp विकल्प का उपयोग किया जाता है, तो घटक रूट विशेषाधिकारों या किसी विशेष अनुमति के बिना ट्रिगर किए जाएंगे। यदि नहीं, तो घटक रूट विशेषाधिकारों के साथ ट्रिगर किए जाएंगे। यह सामान्य-विशेषाधिकार या उच्च-विशेषाधिकार वाले हमलावरों के खिलाफ ऐप का परीक्षण करने के लिए 2 अलग-अलग परिदृश्यों में मदद करता है।
घटकों को ट्रिगर करने से पहले, AndroTickler निष्पादित किए जाने वाले सभी कमांड प्रिंट करता है। फिर प्रत्येक कमांड के लिए, यह घटक को ट्रिगर करता है, कमांड प्रिंट करता है और फिर उपयोगकर्ता की प्रतीक्षा करता है। यह उपयोगकर्ता को कमांड के निष्पादन के बाद कोई अतिरिक्त जाँच करने के लिए पर्याप्त समय देता है। उपयोगकर्ता के अगले कमांड पर जाने से पहले, उसे PoC दस्तावेज़ीकरण के लिए उपकरण का एक स्क्रीनशॉट कैप्चर करने का विकल्प दिया जाता है।
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target जैसा कि list कमांड के साथ समझाया गया है, यह हो सकता है:
यदि कोई मान नहीं है, तो लक्ष्य उपरोक्त सभी है
[-comp] <component_name> केवल एक घटक निर्दिष्ट करता है। आप बिना -comp फ़्लैग के सीधे <component_name> का भी उपयोग कर सकते हैं। -exp AndroTickler केवल निर्यात किए गए लक्ष्यों को ट्रिगर करने के लिए सामान्य विशेषाधिकारों का उपयोग करता है। -all डिफ़ॉल्ट विकल्प। AndroTickler निर्यात किए गए लक्ष्यों को ट्रिगर करने के लिए रूट विशेषाधिकारों का उपयोग करता है। -log ट्रिगरिंग सत्र के दौरान उत्पन्न सभी logcat संदेशों को कैप्चर करता है। लॉग फ़ाइल logs उपनिर्देशिका में सहेजी जाती है।
Frida आपके होस्ट मशीन पर स्थापित होना चाहिए। इसके अलावा, Android उपकरण पर Frida सर्वर का स्थान Tickler.conf फ़ाइल में Frida_server_path प्रविष्टि में जोड़ा जाना चाहिए
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
इस विधि के तर्क और वापसी मान प्रदर्शित करता है (केवल आदिम डेटाटाइप और String)
reuse vals और set विकल्पों के मामले में, Frida उस कार्यक्षमता का एक Frida स्क्रिप्ट बनाता/अपडेट करता है। आप बनाई गई स्क्रिप्ट को अपनी इच्छानुसार संशोधित कर सकते हैं, फिर यदि आप इसे AndroTickler के माध्यम से चलाना चाहते हैं, तो -reuse विकल्प का उपयोग करें ताकि यह ओवरराइड न हो।
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
तर्क संख्या NumberOfArgToModify को newValue पर सेट करता है (केवल आदिम डेटाटाइप और String)। NumberOfArgToModify 0 से शुरू होता है: पहला तर्क --> NumberOfArgToModify = 0, ...आदि वापसी मान संशोधित करने के लिए --> NumberOfArgToModify को ret पर सेट करें
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
आपके होस्ट पर scriptPath पर स्थित एक frida JS स्क्रिप्ट चलाता है
लोडेड कक्षाओं की गणना करें:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
ऐप का एक डिबग करने योग्य संस्करण बनाता है, जिसे उपकरण पर स्थापित किया जा सकता है और किसी भी बाहरी उपकरण का उपयोग करके डिबग किया जा सकता है। AndroTickler डिबग करने योग्य apk पर हस्ताक्षर करने के लिए एक कीस्टोर के साथ आता है, लेकिन होस्ट पर jarsigner उपकरण की आवश्यकता है।
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
एक निर्देशिका से apk फ़ाइल बनाता है, उस पर हस्ताक्षर करता है और उसे स्थापित करता है।
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
उपकरण द्वारा लिए गए पृष्ठभूमि स्नैपशॉट को ( -pkg विकल्प के साथ और बिना दोनों काम करता है) bgSnapshots उपनिर्देशिका में कॉपी करता है।
डेटा संग्रहण निर्देशिका कॉपी करें:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
डेटा संग्रहण निर्देशिका को DataDir में कॉपी करता है dest गंतव्य निर्देशिका का वैकल्पिक नाम, जो किसी भी तरह transfers उपनिर्देशिका पर स्थित होगा।
कोई भी फ़ाइल/निर्देशिका कॉपी करें:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
Android उपकरणों से फ़ाइलें/निर्देशिकाएँ कॉपी करता है।
यदि dest विकल्प नहीं दिया जाता है, तो निर्देशिका का नाम लेन-देन का टाइमस्टैम्प होगा।
java -jar AndroTickler.jar [-pkg <package>] -screen
उन विकल्पों के लिए जिन्हें -pkg विकल्प की आवश्यकता नहीं है, उनका डेटा Tickler_Dir/NoPackage पर सहेजा जाएगा
java -jar AndroTickler.jar -pkg <package> -t -act -exp
निर्यात की गई गतिविधियों को ट्रिगर करता है
java -jar AndroTickler.jar -pkg <package> -t -prov -log
सभी कंटेंट प्रोवाइडर से क्वेरी करता है और लॉगकैट संदेशों को तब तक सहेजता है जब तक उपकरण निष्पादन बंद नहीं करता
java -jar AndroTickler.jar -pkg <package> -t <component_name>
घटक को ट्रिगर करता है, ट्रिगरिंग का प्रकार घटक के प्रकार पर निर्भर करता है
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
मेथड "myMethod" जिसमें 2 तर्क हैं, में हुक लगाता है और पहले तर्क (args[0]) के मान को "newValue" में बदलता है
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
मेथड "myMethod" जिसमें 2 तर्क हैं, में हुक लगाता है और वापसी मान को boolean false में बदलता है