
स्रोत से एंटी-डिटेक्शन Frida सर्वर बनाएं। 16 डिटेक्शन वेक्टर को कवर करने वाले ~90 पैच, यादृच्छिक नामों के साथ साप्ताहिक स्वचालित बिल्ड।
phantom-frida स्रोत से Android Frida Server और Gadget का निर्माण करता है, साथ ही अवलोकन योग्य रनटाइम पहचानकर्ताओं के एक लक्षित सेट को बदलता है। यह एक बिल्डर और सत्यापन हार्नेस है, न कि यह वादा कि हर एप्लिकेशन-विशिष्ट पहचान विधि पराजित हो जाती है।
वर्तमान संगतता लक्ष्य Android पर Frida 17.16.4 है। अन्य Frida संस्करणों को जानबूझकर अप्रमाणित माना जाता है जब तक कि उनके स्रोत अनुबंध, पूर्ण निर्माण, और रूटेड-डिवाइस स्वीकृति को दोहराया न जाए।
इस प्रोजेक्ट का उपयोग केवल उन अनुप्रयोगों और उपकरणों पर करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आप अधिकृत हैं।
यह रिपॉजिटरी तीन प्रकार के साक्ष्य को अलग करती है:
build.py --verify को Server और Gadget दोनों की आवश्यकता होती है, स्टेज किए गए Gadget को स्ट्रिप करता है, फिर किसी भी आर्टिफैक्ट को प्रकाशित करने से पहले ज्ञात निषिद्ध रनटाइम मार्कर को अस्वीकार करता है।scripts/android_smoke.py एक रूटेड डिवाइस पर निर्मित आर्टिफैक्ट का परीक्षण करता है: प्रमाणित अमूर्त-UNIX परिवहन, स्टॉक-क्लाइंट RPC, स्पॉन, अटैच, Java ब्रिज अभिकथन, /proc जाँच, एक बाह्य रूट मेमोरी स्कैन, और एक अलग से लोड किया गया Gadget।पास होने वाला स्रोत परीक्षण या बाइट स्कैन रनटाइम छुपाव के बराबर नहीं है। Android व्यवहार के बारे में दावों में उत्पन्न, रिडैक्टेड स्मोक-टेस्ट रिपोर्ट शामिल होनी चाहिए।
Actions टैब से Build Custom Frida चलाएँ। पुन: प्रयोज्य निर्माण वर्कफ़्लो:
build-info.json और SHA256SUMS शामिल करता है।साप्ताहिक वर्कफ़्लो प्रमाणित GitHub API के माध्यम से नवीनतम रिलीज़ को हल करता है, उसी केवल-पढ़ने वाले निर्माण वर्कफ़्लो को कॉल करता है, डाउनलोड किए गए आर्टिफैक्ट को सत्यापित करता है, उसे प्रमाणित करता है, और रिलीज़ लिखने की अनुमति केवल अंतिम जॉब को देता है।
आवश्यकताएँ:
android.jar और D8 शामिल हों;यदि --ndk-path छोड़ दिया जाता है, तो बिल्डर build/ के अंतर्गत Android NDK r29 डाउनलोड करता है। एक सत्यापित पिन-इनपुट arm64 निर्माण है:
export ANDROID_SDK_ROOT=/path/to/Android/Sdk
python3 build.py \
--version 17.16.4 \
--name oemcodec \
--arch android-arm64 \
--port 27142 \
--extended \
--strict-wx \
--verify
उपयोगी विकल्प:
--version, -v सटीक Frida सिमेंटिक संस्करण (आवश्यक)
--name, -n लोअरकेस प्रतिस्थापन नाम, 3-20 वर्ण
--arch, -a एक या अधिक समर्थित Android आर्किटेक्चर
--port, -p सुनने का पोर्ट; छोड़ने पर 27042 रहता है
--extended, -e वैकल्पिक विस्तारित पहचानकर्ता परिवर्तन लागू करें
--strict-wx Android पर Frida-स्वामित्व वाले स्थायी अनाम RWX मैपिंग को कठोर करें
--temp-fixes ऑप्ट-इन, डिवाइस-विशिष्ट स्थिरता परिवर्तन लागू करें
--verify अंतिम आर्टिफैक्ट में ज्ञात निषिद्ध मार्कर अस्वीकार करें
--skip-build संकलन किए बिना स्रोत पैच करें
--skip-clone कार्य निर्देशिका में मौजूदा स्रोत ट्री का उपयोग करें
--ndk-path मौजूदा Android NDK r29 निर्देशिका का उपयोग करें
उपरोक्त उदाहरण के लिए, output/ में शामिल हैं:
oemcodec-server-17.16.4-android-arm64
oemcodec-server-17.16.4-android-arm64.gz
oemcodec-gadget-17.16.4-android-arm64.so
oemcodec-gadget-17.16.4-android-arm64.so.gz
build-info.json
SHA256SUMS
build-info.json सटीक बिल्डर, Frida, और frida-core कमिट, NDK संस्करण, UTC निर्माण समय, आर्किटेक्चर, नाम, पोर्ट, सख्त W^X कोड-पूल मोड, और Actions में निर्मित होने पर वर्कफ़्लो URL रिकॉर्ड करता है। उपयोग से पहले डाउनलोड की गई बाइनरी फ़ाइलों को सत्यापित करें:
cd output
sha256sum --check SHA256SUMS
python3 -m json.tool build-info.json >/dev/null
सार्वजनिक साप्ताहिक रिलीज़ को भी GitHub बिल्ड-प्रोवेनेंस एटेस्टेशन प्राप्त होता है। SHA256SUMS एक आउटपुट सेट की पहचान करता है; विभिन्न निर्माण होस्टों पर बाइनरी हैश के मेल खाने की उम्मीद नहीं की जाती।
बिल्डर re.frida.* के अंतर्गत D-Bus प्रोटोकॉल इंटरफेस, /re/frida/GadgetSession पथ, सार्वजनिक कैपिटल Frida JavaScript API स्ट्रिंग, और स्टॉक क्लाइंट्स के लिए आवश्यक उत्पन्न C ABI प्रतीकों को संरक्षित रखता है। उन मानों का नाम बदलना सामान्य Frida क्लाइंट/सर्वर अनुबंध को तोड़ देगा।
D-Bus सेवा पहचानकर्ता, सहायक JNI पैकेज, zymbiote सॉकेट उपसर्ग, चयनित प्रक्रिया/लाइब्रेरी/पथ पहचानकर्ता, चयनित थ्रेड नाम, और एक वैकल्पिक कस्टम पोर्ट अलग कार्यान्वयन विवरण हैं जिन्हें बिल्डर परिवर्तित कर सकता है। आउटपुट वेरिफायर इस स्पष्ट मार्कर सेट को अस्वीकार करता है:
frida\0
frida-zymbiote
re/frida/HelperBackend
frida-server
frida-helper
frida-agent
frida-gadget
frida-eternal-agent
frida-generate-certificate
frida-main-loop
frida:rpc
FridaScriptEngine
GLib-GIO
GDBusProxy
GumScript
Frida/
gum-js-loop
gmain\0
gdbus\0
pool-frida
pool-spawner
jit-cache\0
सटीक सार्वजनिक API स्ट्रिंग Frida\0 और अनुमत re.frida.* प्रोटोकॉल पहचानकर्ता जानबूझकर संरक्षित रहते हैं। HTTP/Inspector उपसर्ग Frida/ एक वेरिफायर विफलता है और इसे स्वतंत्र रूप से नाम बदला जाता है।
build-info.json में दर्ज सटीक Python बाइंडिंग स्थापित करें, पिन किया गया Java ब्रिज निर्भरता स्थापित करें, और ठीक एक रूटेड Android डिवाइस कनेक्ट करें:
python3 -m pip install "frida==17.16.4" frida-tools
npm ci --ignore-scripts
python3 scripts/android_smoke.py \
--server output/oemcodec-server-17.16.4-android-arm64 \
--gadget output/oemcodec-gadget-17.16.4-android-arm64.so \
--name oemcodec \
--port 27142 \
--package com.example.app \
--ndk build/android-ndk-r29 \
--report android-smoke-report.json
पैकेज एक स्थापित Java एप्लिकेशन होना चाहिए जिसका परीक्षण करने के लिए आप अधिकृत हैं। हार्नेस Frida 17 द्वारा आवश्यक स्पष्ट frida-java-bridge के साथ test_comprehensive.js संकलित करता है। Server और Gadget प्रत्येक एक यादृच्छिक प्रमाणित अमूर्त-UNIX सॉकेट पर सुनते हैं; उनके होस्ट TCP पोर्ट केवल ADB फ़ॉरवर्ड के रूप में मौजूद होते हैं और कोई डिवाइस TCP लिसनर उजागर नहीं होता। हार्नेस एक ABI-मिलान रूट प्रोब भी संकलित करता है जो Frida के अपने प्रक्रिया दृश्य के बाहर, /proc/<pid>/mem के माध्यम से मैप किए गए एजेंट और Gadget इमेज को स्कैन करता है। यह बाहर निकलने पर अपनी प्रक्रियाओं, फ़ॉरवर्ड और दूरस्थ परीक्षण निर्देशिका को साफ करता है। /proc गेट पुरातन linjector फ़ाइल-डिस्क्रिप्टर नामों और एक गैर-शून्य TracerPid को भी अस्वीकार करता है।
Frida Gadget कॉन्फ़िगरेशन का नाम लाइब्रेरी के बगल में lib<name>-gadget.config.so रखा जाना चाहिए; हार्नेस इस फ़ाइल को उत्पन्न और तैनात करता है।
python -m pip install --requirement requirements-dev.txt
npm ci --ignore-scripts
python -m pytest
ruff check .
ruff format --check .
mypy build.py patches.py namegen.py scripts
node --check test_comprehensive.js
bash -n build-wsl.sh
go run github.com/rhysd/actionlint/cmd/[email protected]
पूर्ण साक्ष्य आवश्यकताओं के लिए CONTRIBUTING.md देखें।
build.py क्लोन, पैच, संकलन, सत्यापन, और आर्टिफैक्ट एकत्र करना
patches.py स्रोत और समान-लंबाई बाइनरी परिवर्तन
namegen.py बीजित (seeded) निर्माण-नाम और पोर्ट जनरेशन
scripts/android_smoke.py रूटेड Android Server/Gadget स्वीकृति हार्नेस
test_comprehensive.js संरचित Frida 17 Java ब्रिज अभिकथन
tests/ यूनिट, अनुबंध, फिक्स्चर, और वर्कफ़्लो परीक्षण
.github/workflows/ CI, CodeQL, पुन: प्रयोज्य निर्माण, और रिलीज़ अलगाव
--temp-fixes रनटाइम व्यवहार बदलता है और ऑप्ट-इन रहता है।--strict-wx Android इंजेक्टर के निष्पादन योग्य कोड को लिखने योग्य डेटा और स्टैक पेजों से अलग करता है, Gum के स्थायी RWX कोड पूल को अक्षम करता है, GumJS NativeCallback क्लोजर कोड को समर्पित RX पेजों पर रखता है जबकि libffi स्टोरेज को RW रखता है, और नव उत्पन्न कोड को RX के रूप में अंतिम रूप देता है। यदि कोई मेल खाने वाला दूरस्थ libc उपलब्ध नहीं है, तो Android इंजेक्टर अपने अपस्ट्रीम RWX फ़ॉलबैक का उपयोग करने के बजाय विफल-बंद (fail closed) हो जाता है। यह उन पेजों को संरक्षित रखता है जो पहले से RWX थे और RWX मेमोरी के लिए स्पष्ट उपयोगकर्ता-स्क्रिप्ट अनुरोध को अस्वीकार नहीं करता। एक रनटाइम /proc/maps नमूना यह सिद्ध नहीं करता कि निष्पादन योग्य कोड पैच किए जाने के दौरान कोई क्षणिक RWX अनुमति परिवर्तन नहीं होता।frida.Compiler का उपयोग करता है; Frida REPL और ट्रेसर अपने स्वयं के बंडल किए गए ब्रिज प्रदान करते हैं।बिल्डर कोड MIT लाइसेंस प्राप्त है। उत्पन्न बाइनरी अपस्ट्रीम लाइसेंसिंग को बनाए रखती हैं; THIRD_PARTY_NOTICES.md देखें।