
एक Android मैलवेयर विश्लेषण उपकरण जो क्रिप्टोग्राफी, फ़ाइल सिस्टम, डेटाबेस, नेटवर्क संचार और प्रक्रिया संचालन में एप्लिकेशन व्यवहार में हुक करके व्यापक रनटाइम प्रोफ़ाइल बनाता है।
Android Binary API Tracer
Dexray Intercept, डायनामिक सैंडबॉक्स Sandroid का हिस्सा है। इसका उद्देश्य किसी Android एप्लिकेशन के व्यवहार को ट्रैक करने के लिए रनटाइम प्रोफ़ाइल बनाना है। यह frida का उपयोग करके किया जाता है।
इसे pip के साथ इंस्टॉल करें:
python3 -m pip install dexray-intercept
यह Dexray Intercept को कमांड लाइन टूल ammm या dexray-intercept के रूप में इंस्टॉल करेगा।
इसके अलावा यह एक पैकेज dexray_intercept प्रदान करेगा। पैकेज का उपयोग कैसे करें, इस पर अधिक जानकारी नीचे दी गई है।
सुनिश्चित करें कि आपका Android डिवाइस रूटेड है। frida-server स्वचालित रूप से नवीनतम संस्करण में इंस्टॉल हो जाएगा। फिर आप निम्नलिखित कमांड को चलाकर Dexray Intercept का उपयोग कर सकते हैं:
dexray-intercept <target app>
# or using its old name:
ammm <target app>
इष्टतम प्रदर्शन के लिए सभी हुक डिफ़ॉल्ट रूप से अक्षम हैं। अपनी विश्लेषण आवश्यकताओं के आधार पर हुक सक्षम करें:
# Enable specific hooks
dexray-intercept --enable-aes <app_name> # Enable AES crypto hooks
dexray-intercept --enable-web <app_name> # Enable web/HTTP hooks
dexray-intercept --enable-aes --enable-web <app_name> # Enable multiple hooks
# Enable hook groups
dexray-intercept --hooks-crypto <app_name> # Enable all crypto hooks
dexray-intercept --hooks-network <app_name> # Enable all network hooks
dexray-intercept --hooks-filesystem <app_name> # Enable all file system hooks
# Enable all hooks (performance impact)
dexray-intercept --hooks-all <app_name> # Enable all available hooks
# Use package identifier instead of app name
dexray-intercept -s com.example.package --hooks-crypto
--hooks-crypto (AES, encodings, keystore, certificates)--hooks-network (HTTP, sockets, SSL/TLS)--hooks-filesystem (file operations, databases, shared preferences)--hooks-ipc (intents, broadcasts, binder, shared preferences)--hooks-process (DEX unpacking, native libraries, runtime)--hooks-services (camera, location, telephony, bluetooth)यहाँ हमारे AVD पर chrome ऐप की निगरानी का एक उदाहरण है:
dexray-intercept Chrome
Dexray Intercept
⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠙⢷⣤⣤⣴⣶⣶⣦⣤⣤⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠾⠛⢉⣉⣉⣉⡉⠛⠷⣦⣄⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠋⣠⣴⣿⣿⣿⣿⣿⡿⣿⣶⣌⠹⣷⡀⠀⠀
⠀⠀⠀⠀⣼⣿⣿⣉⣹⣿⣿⣿⣿⣏⣉⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠁⣴⣿⣿⣿⣿⣿⣿⣿⣿⣆⠉⠻⣧⠘⣷⠀⠀
⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠈⠀⢹⡇⠀
⣠⣄⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣠⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⢸⣿⠛⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⢸⡇⠀
⣿⣿⡇⢸⣿⣿⣿Sandroid⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⠀⢿⡆⠈⠛⠻⠟⠛⠉⠀⠀⠀⠀⠀⠀⣾⠃⠀
⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣧⡀⠻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠃⠀⠀
⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢼⠿⣦⣄⠀⠀⠀⠀⠀⠀⠀⣀⣴⠟⠁⠀⠀⠀
⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣦⠀⠀⠈⠉⠛⠓⠲⠶⠖⠚⠋⠉⠀⠀⠀⠀⠀⠀
⠻⠟⠁⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠈⠻⠟⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠉⠉⣿⣿⣿⡏⠉⠉⢹⣿⣿⣿⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⣿⣿⡇⠀⠀⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⣿⣿⡇⠀⠀⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⢀⣄⠈⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
[*] starting app profiling
[*] press Ctrl+C to stop the profiling ...
[*] Filesystem profiling informations:
[*] [Libc::read] Read FD (anon_inode:[eventfd],0x7ac6b67540,8)
[*] Filesystem profiling informations:
[*] [Libc::read] Read FD (anon_inode:[eventfd],0x7fcb41c990,8
Dexray Intercept को एक पैकेज के रूप में इंस्टॉल करें और नई मॉड्यूलर आर्किटेक्चर का उपयोग करें:
from dexray_intercept import AppProfiler, setup_frida_device
from dexray_intercept.services.hook_manager import HookManager
# Connect to device and get process
device = setup_frida_device()
process = device.attach("com.example.app")
# Configure hooks (all disabled by default for performance)
hook_config = {
'aes_hooks': True,
'web_hooks': True,
'file_system_hooks': True,
'keystore_hooks': True
}
# Create profiler with new architecture
profiler = AppProfiler(
process,
verbose_mode=True,
output_format="JSON",
hook_config=hook_config,
enable_stacktrace=True
)
# Start profiling
script = profiler.start_profiling()
# ... let app run and collect data ...
# Get results
profile_data = profiler.get_profile_data()
json_output = profiler.get_profiling_log_as_json()
# Runtime hook management
profiler.enable_hook('socket_hooks', True) # Enable more hooks at runtime
enabled_hooks = profiler.get_enabled_hooks() # Check what's enabled
# Stop profiling
profiler.stop_profiling()
अपनी विश्लेषण आवश्यकताओं के आधार पर विशिष्ट हुक समूह सक्षम करें:
# Crypto hooks
hook_config = {
'aes_hooks': True,
'encodings_hooks': True,
'keystore_hooks': True
}
# Network hooks
hook_config = {
'web_hooks': True,
'socket_hooks': True
}
# File system hooks
hook_config = {
'file_system_hooks': True,
'database_hooks': True
}
# Enable all hooks (performance impact)
profiler.enable_all_hooks()
# Enable hook groups
profiler.enable_hook_group('crypto') # Enable all crypto-related hooks
पुराना API अभी भी पश्चगामी संगतता के लिए उपलब्ध है:
from dexray_intercept import AppProfilerLegacy
# OR use environment variable: DEXRAY_FORCE_OLD_ARCH=true
profiler = AppProfilerLegacy(process_session, verbose=True, output_format="CMD",
base_path=None, deactivate_unlink=False)
profiler.instrument() # Old method name
# ...
profiler.finish_app_profiling() # Old method name
इसे Sandroid में एक पैकेज के रूप में चलाने के लिए सुनिश्चित करें कि आपने AndroidFridaManager से JobManager भी इंस्टॉल किया है। यह विभिन्न थ्रेड्स में कई frida सत्रों को चलाने की अनुमति देता है।
आपको बस निम्नलिखित कोड चलाना है:
from AndroidFridaManager import JobManager
from dexray_intercept import AppProfiler
job_manager = JobManager()
app_package = "net.classwindexampleyear.bookseapiececountry"
profiler = AppProfiler(job_manager.process_session, True, output_format="JSON", base_path=None, deactivate_unlink=False)
frida_script_path = profiler.get_frida_script()
job_manager.setup_frida_session(app_package, profiler.on_appProfiling_message)
job = job_manager.start_job(frida_script_path, custom_hooking_handler_name=profiler.on_appProfiling_message)
# close only the job and the frida session keeps active to run other frida scripts
# job_manager.stop_job_with_id(job.job_id)
job_manager.stop_app_with_closing_frida(app_package) # stops the frida session and the app and all frida jobs
profiler.write_profiling_log() # write the log data to profile.json
# instead of writing it to a file the JSON output will just be returned
# profiler.get_profiling_log_as_JSON()
सुनिश्चित करें कि आपके कोड का कोई अन्य हिस्सा frida सर्वर से कनेक्ट करने का प्रयास नहीं कर रहा है (कोई अन्य frida सत्र नहीं)।
इसका परीक्षण करने के लिए आप निम्नलिखित नमूना आज़मा सकते हैं: catelites_2018_01_19.apk। पैकेज का नाम net.classwindexampleyear.bookseapiececountry है। सुनिश्चित करें कि आपका AVD Android 9 पर चल रहा है, ताकि नमूना अपने दुर्भावनापूर्ण कोड का सब कुछ निष्पादित कर सके। आप इस नमूने को adb install samples/unpacking/catelites_2018_01_19.apk के साथ सरलता से इंस्टॉल कर सकते हैं।
इस प्रोजेक्ट को कंपाइल करने के लिए सुनिश्चित करें कि npm और frida-compile आपके सिस्टम पर चल रहे हैं और आपके पाथ में इंस्टॉल हैं। frida संस्करण 17.0 के बाद से frida-compile pip install frida-tools के माध्यम से इंस्टॉल होता है।
फिर नवीनतम frida एजेंट को कंपाइल करने के लिए बस निम्नलिखित कमांड चलाएँ:
$ cd <AppProfiling-Project>
> Dexray [email protected] build
> frida-compile agent/hooking_profile_loader.ts -o src/dexray_intercept/profiling.js
$ npm install frida-java-bridge@latest --save
$ npm install --save-dev @types/frida-gum@latest
> Dexray [email protected] prepare
> npm run build
up to date, audited 75 packages in 6s
19 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
यह सुनिश्चित करता है कि dexray-intercept में नवीनतम frida स्क्रिप्ट/हुक का उपयोग किया जाता है।
पायथन कोड में समायोजन करने के लिए dexray-intercept को एडिटेबल मोड का उपयोग करके pip के साथ इंस्टॉल करने की सिफारिश की जाती है:
python3 -m pip install -e .
इस तरह पायथन कोड में स्थानीय परिवर्तन पैकेज का नया संस्करण बनाए बिना प्रतिबिंबित हो जाते हैं।
इंस्टॉलेशन, उपयोग, API संदर्भ और डेवलपमेंट को कवर करने वाला व्यापक दस्तावेज़ीकरण उपलब्ध है:
इस निर्देशिका में बस निम्नलिखित कमांड चलाकर setup.py का उपयोग dexray-intercept को आपके सिस्टम पर एक स्थानीय पायथन पैकेज के रूप में इंस्टॉल करने के लिए किया जाना चाहिए:
python3 -m pip install .
TypeScript frida हुक को कंपाइल करने के लिए हमें frida-compile (link) प्रोजेक्ट की आवश्यकता है। जो frida-tools के साथ बंडल किया जाएगा।
python3 -m pip install frida-tools
इसके अलावा हमें frida-java-bridge और आंतरिक frida प्रकारों के लिए समर्थन की भी आवश्यकता है:
npm install frida-java-bridge@latest --save
npm install --save-dev @types/frida-gum@latest
अनपैकिंग करते समय, एप्लिकेशन पहले से भिन्न मेमोरी ब्लॉकों की ओर इंगित DexCode को एक DexFile में लोड कर सकते हैं, जो निष्पादित किए जा रहे कोड का प्रतिनिधित्व करता है। उदाहरण के लिए, कुछ एप्लिकेशन निष्पादन से ठीक पहले निर्देशों को पुनर्स्थापित कर सकते हैं। ऐसे मामलों में, Sandroid निर्देशों को वापस DexFile में परिवर्तित करने में असमर्थ है। इस समस्या को हल करने के लिए और शोध आवश्यक है
Dexray Intercept Android सुरक्षा और डायनामिक विश्लेषण समुदाय में विभिन्न ओपन-सोर्स प्रोजेक्ट्स और शोधकर्ताओं के उत्कृष्ट कार्य पर आधारित है। हम उन निम्नलिखित प्रोजेक्ट्स को स्वीकार करना चाहते हैं जिन्होंने हमारे कार्यान्वयन को प्रेरित किया या योगदान दिया:
हम इन प्रोजेक्ट्स और उनके अनुरक्षकों के प्रति अपना आभार व्यक्त करते हैं जिन्होंने Android सुरक्षा विश्लेषण की स्थिति को आगे बढ़ाया और अपना काम समुदाय के लिए उपलब्ध कराया।