
Android ऐप्स के लिए स्वचालित पूर्व-विश्लेषण उपकरण जो नमूनों को विघटित करता है, कॉन्फ़िगरेबल पैटर्न मिलान के माध्यम से गुण निकालता है, और त्वरित रिवर्स इंजीनियरिंग और मैलवेयर विश्लेषण के लिए आउटपुट को व्यवस्थित करता है।
DroidLysis एक Android ऐप्स के लिए पूर्व-विश्लेषण उपकरण है: यह उन दोहराए जाने वाले और उबाऊ कार्यों को करता है जो हम आमतौर पर किसी भी रिवर्स इंजीनियरिंग की शुरुआत में करते हैं। यह Android नमूने को डिस्सेम्बल करता है, आउटपुट को निर्देशिकाओं में व्यवस्थित करता है, और कोड में संदिग्ध स्थानों की खोज करता है जिन्हें देखना होता है। आउटपुट रिवर्स इंजीनियर को विश्लेषण के पहले कुछ चरणों को गति देने में मदद करता है।
DroidLysis का उपयोग Android पैकेज (apk), Dalvik निष्पादन योग्य (dex), Zip फ़ाइलें (zip), Rar फ़ाइलें (rar) या फ़ाइलों की निर्देशिकाओं पर किया जा सकता है।
sudo apt-get install default-jre git python3 python3-pip unzip wget libmagic-dev libxml2-dev libxslt-dev
$ mkdir -p ~/softs
$ cd ~/softs
$ wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar
$ wget https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.5.2.jar
$ wget https://github.com/pxb1988/dex2jar/releases/download/v2.4/dex-tools-v2.4.zip
$ unzip dex-tools-v2.4.zip
$ rm -f dex-tools-v2.4.zip
Python वर्चुअल एनवायरनमेंट में Git से इंस्टॉल करें (python3 -m venv, या pyenv वर्चुअल एनवायरनमेंट आदि)।
$ python3 -m venv venv
$ source ./venv/bin/activate
(venv) $ pip3 install git+https://github.com/cryptax/droidlysis
वैकल्पिक रूप से, आप DroidLysis को सीधे PyPi से इंस्टॉल कर सकते हैं (pip3 install droidlysis)।
conf/general.conf कॉन्फ़िगर करें। विशेष रूप से सुनिश्चित करें कि /home/axelle को अपनी उपयुक्त निर्देशिकाओं से बदलें।[tools]
apktool = /home/axelle/softs/apktool_2.9.3.jar
baksmali = /home/axelle/softs/baksmali-2.5.2.jar
dex2jar = /home/axelle/softs/dex-tools-v2.4/d2j-dex2jar.sh
keytool = /usr/bin/keytool
...
python3 ./droidlysis3.py --help
कॉन्फ़िगरेशन फ़ाइल ./conf/general.conf है (आप --config विकल्प के साथ किसी अन्य फ़ाइल पर स्विच कर सकते हैं)।
यहाँ आप विभिन्न बाहरी उपकरणों (जैसे Apktool) का स्थान, पैटर्न फ़ाइलों के नाम
(डिफ़ॉल्ट रूप से ./conf/smali.conf, ./conf/wide.conf, ./conf/arm.conf, ./conf/kit.conf) और
डेटाबेस फ़ाइल का नाम (केवल तब उपयोग किया जाता है जब आप --enable-sql निर्दिष्ट करते हैं) कॉन्फ़िगर करते हैं।
डिस्सेम्बली टूल्स के लिए सही पथ निर्दिष्ट करना सुनिश्चित करें, अन्यथा DroidLysis उन्हें नहीं ढूँढ पाएगा।
DroidLysis Python 3 का उपयोग करता है। इसे लॉन्च करने और विकल्प प्राप्त करने के लिए:
droidlysis --help
उदाहरण के लिए, इसे Signal के APK पर परीक्षण करें:
droidlysis --input Signal-website-universal-release-6.26.3.apk --output /tmp --config /PATH/TO/DROIDLYSIS/conf/general.conf

DroidLysis आउटपुट देता है:
--output /tmp सेट करते हैं, तो विश्लेषण /tmp/Signalwebsiteuniversalrelease4.52.4.apk-f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290 पर लिखा जाएगा।droidlysis.db) जिसमें उसने देखे गए गुण शामिल हैं।droidlysis --help के साथ उपयोग प्राप्त करें
इनपुट एक फ़ाइल या फ़ाइलों की एक निर्देशिका हो सकती है जिसे पुनरावर्ती रूप से देखा जाना है। DroidLysis Android पैकेज, DEX, ODEX और ARM निष्पादन योग्य, ZIP, RAR को संसाधित करना जानता है। DroidLysis अन्य प्रकार की फ़ाइलों पर विफल नहीं होगा (जब तक कि कोई बग न हो...) लेकिन सामग्री को समझने में सक्षम नहीं होगा।
फ़ाइलों की निर्देशिकाओं को संसाधित करते समय, यह जानने के लिए कि क्या संसाधित किया गया है, संसाधित नमूनों को किसी अन्य स्थान पर ले जाना आमतौर पर बहुत मददगार होता है। यह --movein विकल्प द्वारा नियंत्रित किया जाता है। साथ ही, यदि आप केवल आँकड़ों में रुचि रखते हैं, तो आपको शायद आउटपुट निर्देशिका को साफ़ कर देना चाहिए जिसमें प्रत्येक नमूने के लिए विस्तृत जानकारी होती है: यह --clearoutput विकल्प है। यदि आप सभी आँकड़ों को SQL डेटाबेस में संग्रहीत करना चाहते हैं, तो --enable-sql का उपयोग करें (यहाँ देखें)
DroidLysis का विश्लेषण डिफ़ॉल्ट रूप से ज्ञात तृतीय-पक्ष SDK का निरीक्षण नहीं करता है, अर्थात उदाहरण के लिए यह इनमें से किसी भी संदिग्ध गतिविधि की रिपोर्ट नहीं करेगा। यदि आप चाहते हैं कि उनका निरीक्षण किया जाए, तो विकल्प --no-kit-exception का उपयोग करें। यह आमतौर पर नमूने के लिए कई और पता लगाए गए गुण बनाता है, क्योंकि SDK (जैसे विज्ञापन) कई फ़्लैग किए गए API का उपयोग करते हैं (GPS स्थान प्राप्त करें, IMEI प्राप्त करें, IMSI प्राप्त करें, HTTP POST...)।
--output DIR)इस निर्देशिका में (जब लागू हो) शामिल है:
AndroidManifest.xmlres में पठनीय संसाधनlib, संपत्तियाँ assetssmali (और अन्य)META-INF./unzipped में बस अनज़िप होने पर पैकेज सामग्रीclasses.dex (और अन्य), और jar में परिवर्तित: classes-dex2jar.jar, और ./unjarred में अनजैर किया गयानिम्नलिखित फ़ाइलें DroidLysis द्वारा उत्पन्न की जाती हैं:
autoanalysis.md: प्रत्येक पैटर्न की सूची बनाता है जो DroidLysis ने पाया और कहाँ।report.md: वही जो कंसोल पर मुद्रित किया गया थायदि आपको नमूना आउटपुट निर्देशिका उत्पन्न करने की आवश्यकता नहीं है, तो विकल्प --clearoutput का उपयोग करें।
--import-exodus)$ python3 ./droidlysis3.py --import-exodus --verbose
Processing file: ./droidurl.pyc ...
DEBUG:droidconfig.py:Reading configuration file: './conf/./smali.conf'
DEBUG:droidconfig.py:Reading configuration file: './conf/./wide.conf'
DEBUG:droidconfig.py:Reading configuration file: './conf/./arm.conf'
DEBUG:droidconfig.py:Reading configuration file: '/home/axelle/.cache/droidlysis/./kit.conf'
DEBUG:droidproperties.py:Importing ETIP Exodus trackers from https://etip.exodus-privacy.eu.org/api/trackers/?format=json
DEBUG:connectionpool.py:Starting new HTTPS connection (1): etip.exodus-privacy.eu.org:443
DEBUG:connectionpool.py:https://etip.exodus-privacy.eu.org:443 "GET /api/trackers/?format=json HTTP/1.1" 200 None
DEBUG:droidproperties.py:Appending imported trackers to /home/axelle/.cache/droidlysis/./kit.conf
Exodus से ट्रैकर्स जो आपके प्रारंभिक kit.conf में मौजूद नहीं हैं, ~/.cache/droidlysis/kit.conf में जोड़ दिए जाते हैं। दो फ़ाइलों में अंतर देखें और जाँचें कि आप कौन से ट्रैकर्स जोड़ना चाहते हैं।
यदि आप नमूनों की एक निर्देशिका को संसाधित करना चाहते हैं, तो संभवतः आप DroidLysis द्वारा पाए गए गुणों को एक डेटाबेस में संग्रहीत करना पसंद करेंगे, ताकि निष्कर्षों को आसानी से पार्स और क्वेरी किया जा सके। उस स्थिति में, विकल्प --enable-sql का उपयोग करें। यह स्वचालित रूप से सभी परिणामों को droidlysis.db नामक डेटाबेस में, samples नामक तालिका में डंप करेगा। तालिका में प्रत्येक प्रविष्टि किसी दिए गए नमूने से संबंधित है। प्रत्येक कॉलम DroidLysis द्वारा ट्रैक किए जाने वाले गुण हैं।
उदाहरण के लिए, डेटाबेस के सभी फ़ाइल नाम, SHA256 योग और smali गुण प्राप्त करने के लिए:
sqlite> select sha256, sanitized_basename, smali_properties from samples;
f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290|Signalwebsiteuniversalrelease4.52.4.apk|{"send_sms": true, "receive_sms": true, "abort_broadcast": true, "call": false, "email": false, "answer_call": false, "end_call": true, "phone_number": false, "intent_chooser": true, "get_accounts": true, "contacts": false, "get_imei": true, "get_external_storage_stage": false, "get_imsi": false, "get_network_operator": false, "get_active_network_info": false, "get_line_number": true, "get_sim_country_iso": true,
...
DroidLysis जो पता लगाता है उसे ./conf निर्देशिका की फ़ाइलों में कॉन्फ़िगर और विस्तारित किया जा सकता है।
एक पैटर्न में शामिल हैं:
send_sms। यह गुण का नाम है। .conf फ़ाइल में अद्वितीय होना चाहिए।;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage। smali.conf फ़ाइल में, यह regexp Smali कोड पर मिलान किया जाता है। इस विशेष मामले में, कोड से SMS संदेश भेजने के 3 अलग-अलग तरीके हैं: sendTextMessage, sendMultipartTextMessage और sendDataMessage।[send_sms]
pattern=;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage
description=Sending SMS messages
Exodus Privacy विभिन्न SDK की एक सूची बनाए रखता है जिन्हें conf/kit.conf के माध्यम से हमारे विश्लेषण में बाहर करना दिलचस्प है।
droidlysis कमांड लाइन में विकल्प --import_exodus जोड़ें: यह मौजूदा ट्रैकर्स को पार्स करेगा जिन्हें Exodus Privacy जानता है और जो अभी तक आपके kit.conf में नहीं हैं। अंत में, यह सभी नए ट्रैकर्स को ~/.cache/droidlysis/kit.conf में जोड़ देगा।
बाद में, आप अपनी kit.conf फ़ाइल को सॉर्ट करना चाह सकते हैं:
import configparser
import collections
import os
config = configparser.ConfigParser({}, collections.OrderedDict)
config.read(os.path.expanduser('~/.cache/droidlysis/kit.conf'))
# Order all sections alphabetically
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))
with open('sorted.conf','w') as f:
config.write(f)
यह स्क्रिप्ट आपको JEB UI पर उन विधियों को खोजने में मदद करती है जिनमें smali पैटर्न से मेल खाने वाला कोड होता है और उन फ़ंक्शनों पर आसानी से नेविगेट करती है। जब आप स्क्रिप्ट लोड करते हैं और droidlysis विश्लेषण फ़ाइलों में से details.md फ़ाइल का चयन करते हैं, तो एक खोज बॉक्स दिखाई देगा। एक बार स्थानांतरित होने के बाद, आप हाल की स्क्रिप्ट निष्पादन शॉर्टकट का उपयोग करके खोज विंडो को फिर से ला सकते हैं।
script/DroidlysisSearch.py