
स्रोत से एंटी-डिटेक्शन Frida सर्वर बनाएं। 16 डिटेक्शन वेक्टर को कवर करने वाले ~90 पैच, यादृच्छिक नामों के साथ साप्ताहिक स्वचालित बिल्ड।
# phantom-frida `phantom-frida` स्रोत से Android Frida Server और Gadget का निर्माण करता है, साथ ही अवलोकन योग्य रनटाइम पहचानकर्ताओं के एक लक्षित सेट को बदलता है। यह एक बिल्डर और सत्यापन हार्नेस है, न कि यह वादा कि हर एप्लिकेशन-विशिष्ट पहचान विधि पराजित हो जाती है। वर्तमान संगतता लक्ष्य Android पर **Frida 17.16.4** है। अन्य Frida संस्करणों को जानबूझकर अप्रमाणित माना जाता है जब तक कि उनके स्रोत अनुबंध, पूर्ण निर्माण, और रूटेड-डिवाइस स्वीकृति को दोहराया न जाए। इस प्रोजेक्ट का उपयोग केवल उन अनुप्रयोगों और उपकरणों पर करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आप अधिकृत हैं। ## क्या सत्यापित है यह रिपॉजिटरी तीन प्रकार के साक्ष्य को अलग करती है: 1. यूनिट और फिक्स्चर परीक्षण इनपुट हैंडलिंग, सटीक Frida 17.16.4 स्रोत पैच अनुबंध, DEX पुनर्निर्माण, आर्टिफैक्ट प्रमोशन, मेटाडेटा, वर्कफ़्लो और विफलता व्यवहार को मान्य करते हैं। 2. `build.py --verify` को Server और Gadget दोनों की आवश्यकता होती है, स्टेज किए गए Gadget को स्ट्रिप करता है, फिर किसी भी आर्टिफैक्ट को प्रकाशित करने से पहले ज्ञात निषिद्ध रनटाइम मार्कर को अस्वीकार करता है। 3. `scripts/android_smoke.py` एक रूटेड डिवाइस पर निर्मित आर्टिफैक्ट का परीक्षण करता है: प्रमाणित अमूर्त-UNIX परिवहन, स्टॉक-क्लाइंट RPC, स्पॉन, अटैच, Java ब्रिज अभिकथन, `/proc` जाँच, एक बाह्य रूट मेमोरी स्कैन, और एक अलग से लोड किया गया Gadget। पास होने वाला स्रोत परीक्षण या बाइट स्कैन रनटाइम छुपाव के बराबर नहीं है। Android व्यवहार के बारे में दावों में उत्पन्न, रिडैक्टेड स्मोक-टेस्ट रिपोर्ट शामिल होनी चाहिए। ## GitHub Actions के साथ निर्माण Actions टैब से **Build Custom Frida** चलाएँ। पुन: प्रयोज्य निर्माण वर्कफ़्लो: - हर उपयोगकर्ता-नियंत्रित निर्माण इनपुट को मान्य करता है; - Google से Android NDK r29 डाउनलोड करता है और उसके प्रकाशित चेकसम की जाँच करता है; - पैच किए गए स्रोत को कैश करने के बजाय एक नया अपस्ट्रीम स्रोत ट्री क्लोन करता है; - Gadget प्रतीकों को स्ट्रिप करता है और केवल कठोर आर्टिफैक्ट और मार्कर गेट पास होने के बाद अपलोड करता है; - एक निर्माण आर्टिफैक्ट में `build-info.json` और `SHA256SUMS` शामिल करता है। साप्ताहिक वर्कफ़्लो प्रमाणित GitHub API के माध्यम से नवीनतम रिलीज़ को हल करता है, उसी केवल-पढ़ने वाले निर्माण वर्कफ़्लो को कॉल करता है, डाउनलोड किए गए आर्टिफैक्ट को सत्यापित करता है, उसे प्रमाणित करता है, और रिलीज़ लिखने की अनुमति केवल अंतिम जॉब को देता है। ## स्थानीय निर्माण आवश्यकताएँ: - Ubuntu 22.04 या नया (WSL समर्थित है); - Python 3.10 या नया; - Git, curl, unzip, एक C/C++ टूलचेन, JDK 17, और Node.js 18 या नया (CI Node.js 24.13.1 का उपयोग करता है); - Android SDK प्लेटफ़ॉर्म और build-tools जिसमें `android.jar` और D8 शामिल हों; - लगभग 20 GB मुक्त डिस्क स्थान। यदि `--ndk-path` छोड़ दिया जाता है, तो बिल्डर `build/` के अंतर्गत Android NDK r29 डाउनलोड करता है। एक सत्यापित पिन-इनपुट arm64 निर्माण है: ```bash 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 ``` उपयोगी विकल्प: ```text --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/` में शामिल हैं: ```text 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 रिकॉर्ड करता है। उपयोग से पहले डाउनलोड की गई बाइनरी फ़ाइलों को सत्यापित करें: ```bash 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 सॉकेट उपसर्ग, चयनित प्रक्रिया/लाइब्रेरी/पथ पहचानकर्ता, चयनित थ्रेड नाम, और एक वैकल्पिक कस्टम पोर्ट अलग कार्यान्वयन विवरण हैं जिन्हें बिल्डर परिवर्तित कर सकता है। आउटपुट वेरिफायर इस स्पष्ट मार्कर सेट को अस्वीकार करता है: ```text 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/` एक वेरिफायर विफलता है और इसे स्वतंत्र रूप से नाम बदला जाता है। ## रूटेड Android स्वीकृति `build-info.json` में दर्ज सटीक Python बाइंडिंग स्थापित करें, पिन किया गया Java ब्रिज निर्भरता स्थापित करें, और ठीक एक रूटेड Android डिवाइस कनेक्ट करें: ```bash 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` रखा जाना चाहिए; हार्नेस इस फ़ाइल को उत्पन्न और तैनात करता है। ## विकास जाँच ```bash 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](https://github.com/theqmaks/phantom-frida/blob/master/CONTRIBUTING.md) देखें। ## रिपॉजिटरी संरचना ```text 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, पुन: प्रयोज्य निर्माण, और रिलीज़ अलगाव ``` ## ज्ञात सीमाएँ - केवल Frida 17.16.4 वर्तमान सत्यापन लक्ष्य है; सभी 17.x या 16.x रिलीज़ के लिए समर्थन निहित नहीं है। - `--temp-fixes` रनटाइम व्यवहार बदलता है और ऑप्ट-इन रहता है। - मार्कर की अनुपस्थिति व्यवहारिक, अखंडता, समय, या एप्लिकेशन-विशिष्ट पहचान के प्रतिरोध को सिद्ध नहीं करती। - स्टॉक-क्लाइंट संगतता सार्वजनिक ABI/प्रोटोकॉल व्यवहार को संरक्षित रखती है। सक्रिय प्रोटोकॉल प्रोबिंग और कोड-अखंडता जाँच अभी भी इंस्ट्रूमेंटेशन की पहचान कर सकती हैं। - यह बिल्डर रूट, स्वचालित ऐप लॉन्च, Interceptor कोड परिवर्तन, उपयोगकर्ता-स्क्रिप्ट स्ट्रिंग, या दूरस्थ प्रमाणन द्वारा रिपोर्ट की गई विफलताओं को नहीं छिपाता। - `--strict-wx` Android इंजेक्टर के निष्पादन योग्य कोड को लिखने योग्य डेटा और स्टैक पेजों से अलग करता है, Gum के स्थायी RWX कोड पूल को अक्षम करता है, GumJS `NativeCallback` क्लोजर कोड को समर्पित RX पेजों पर रखता है जबकि libffi स्टोरेज को RW रखता है, और नव उत्पन्न कोड को RX के रूप में अंतिम रूप देता है। यदि कोई मेल खाने वाला दूरस्थ libc उपलब्ध नहीं है, तो Android इंजेक्टर अपने अपस्ट्रीम RWX फ़ॉलबैक का उपयोग करने के बजाय विफल-बंद (fail closed) हो जाता है। यह उन पेजों को संरक्षित रखता है जो पहले से RWX थे और RWX मेमोरी के लिए स्पष्ट उपयोगकर्ता-स्क्रिप्ट अनुरोध को अस्वीकार नहीं करता। एक रनटाइम `/proc/maps` नमूना यह सिद्ध नहीं करता कि निष्पादन योग्य कोड पैच किए जाने के दौरान कोई क्षणिक RWX अनुमति परिवर्तन नहीं होता। - बाह्य मेमोरी गेट मैप किए गए एजेंट/Gadget इमेज को उसके स्पष्ट मार्कर सेट के लिए स्कैन करता है; यह हर अनाम हीप पेज का सामान्य-उद्देश्य स्कैन नहीं है। - Frida 17 रॉ एजेंटों को स्पष्ट ब्रिज आयात या बंडलिंग की आवश्यकता होती है। हार्नेस `frida.Compiler` का उपयोग करता है; Frida REPL और ट्रेसर अपने स्वयं के बंडल किए गए ब्रिज प्रदान करते हैं। ## श्रेय और लाइसेंसिंग - [Frida](https://frida.re/) — Ole André Ravnas और योगदानकर्ताओं द्वारा - [ajeossida](https://github.com/hackcatml/ajeossida) — hackcatml द्वारा बिल्डर कोड MIT लाइसेंस प्राप्त है। उत्पन्न बाइनरी अपस्ट्रीम लाइसेंसिंग को बनाए रखती हैं; [THIRD_PARTY_NOTICES.md](https://github.com/theqmaks/phantom-frida/blob/master/THIRD_PARTY_NOTICES.md) देखें।