
phantom-frida v17.16.4-20260816-run36.1
स्रोत से एंटी-डिटेक्शन Frida सर्वर बनाएं। 16 डिटेक्शन वेक्टर को कवर करने वाले ~90 पैच, यादृच्छिक नामों के साथ साप्ताहिक स्वचालित बिल्ड।
phantom-frida
phantom-frida स्रोत से Android Frida Server और Gadget का निर्माण करता है, साथ ही अवलोकन योग्य रनटाइम पहचानकर्ताओं के एक लक्षित सेट को बदलता है। यह एक बिल्डर और सत्यापन हार्नेस है, न कि यह वादा कि हर एप्लिकेशन-विशिष्ट पहचान विधि पराजित हो जाती है।
वर्तमान संगतता लक्ष्य Android पर Frida 17.16.4 है। अन्य Frida संस्करणों को जानबूझकर अप्रमाणित माना जाता है जब तक कि उनके स्रोत अनुबंध, पूर्ण निर्माण, और रूटेड-डिवाइस स्वीकृति को दोहराया न जाए।
इस प्रोजेक्ट का उपयोग केवल उन अनुप्रयोगों और उपकरणों पर करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आप अधिकृत हैं।
क्या सत्यापित है
यह रिपॉजिटरी तीन प्रकार के साक्ष्य को अलग करती है:
- यूनिट और फिक्स्चर परीक्षण इनपुट हैंडलिंग, सटीक Frida 17.16.4 स्रोत पैच अनुबंध, DEX पुनर्निर्माण, आर्टिफैक्ट प्रमोशन, मेटाडेटा, वर्कफ़्लो और विफलता व्यवहार को मान्य करते हैं।
build.py --verifyको Server और Gadget दोनों की आवश्यकता होती है, स्टेज किए गए Gadget को स्ट्रिप करता है, फिर किसी भी आर्टिफैक्ट को प्रकाशित करने से पहले ज्ञात निषिद्ध रनटाइम मार्कर को अस्वीकार करता है।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 निर्माण है:
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/ एक वेरिफायर विफलता है और इसे स्वतंत्र रूप से नाम बदला जाता है।
रूटेड Android स्वीकृति
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, पुन: प्रयोज्य निर्माण, और रिलीज़ अलगाव
ज्ञात सीमाएँ
- केवल Frida 17.16.4 वर्तमान सत्यापन लक्ष्य है; सभी 17.x या 16.x रिलीज़ के लिए समर्थन निहित नहीं है।
--temp-fixesरनटाइम व्यवहार बदलता है और ऑप्ट-इन रहता है।- मार्कर की अनुपस्थिति व्यवहारिक, अखंडता, समय, या एप्लिकेशन-विशिष्ट पहचान के प्रतिरोध को सिद्ध नहीं करती।
- स्टॉक-क्लाइंट संगतता सार्वजनिक ABI/प्रोटोकॉल व्यवहार को संरक्षित रखती है। सक्रिय प्रोटोकॉल प्रोबिंग और कोड-अखंडता जाँच अभी भी इंस्ट्रूमेंटेशन की पहचान कर सकती हैं।
- यह बिल्डर रूट, स्वचालित ऐप लॉन्च, Interceptor कोड परिवर्तन, उपयोगकर्ता-स्क्रिप्ट स्ट्रिंग, या दूरस्थ प्रमाणन द्वारा रिपोर्ट की गई विफलताओं को नहीं छिपाता।
--strict-wxAndroid इंजेक्टर के निष्पादन योग्य कोड को लिखने योग्य डेटा और स्टैक पेजों से अलग करता है, Gum के स्थायी RWX कोड पूल को अक्षम करता है, GumJSNativeCallbackक्लोजर कोड को समर्पित RX पेजों पर रखता है जबकि libffi स्टोरेज को RW रखता है, और नव उत्पन्न कोड को RX के रूप में अंतिम रूप देता है। यदि कोई मेल खाने वाला दूरस्थ libc उपलब्ध नहीं है, तो Android इंजेक्टर अपने अपस्ट्रीम RWX फ़ॉलबैक का उपयोग करने के बजाय विफल-बंद (fail closed) हो जाता है। यह उन पेजों को संरक्षित रखता है जो पहले से RWX थे और RWX मेमोरी के लिए स्पष्ट उपयोगकर्ता-स्क्रिप्ट अनुरोध को अस्वीकार नहीं करता। एक रनटाइम/proc/mapsनमूना यह सिद्ध नहीं करता कि निष्पादन योग्य कोड पैच किए जाने के दौरान कोई क्षणिक RWX अनुमति परिवर्तन नहीं होता।- बाह्य मेमोरी गेट मैप किए गए एजेंट/Gadget इमेज को उसके स्पष्ट मार्कर सेट के लिए स्कैन करता है; यह हर अनाम हीप पेज का सामान्य-उद्देश्य स्कैन नहीं है।
- Frida 17 रॉ एजेंटों को स्पष्ट ब्रिज आयात या बंडलिंग की आवश्यकता होती है। हार्नेस
frida.Compilerका उपयोग करता है; Frida REPL और ट्रेसर अपने स्वयं के बंडल किए गए ब्रिज प्रदान करते हैं।
श्रेय और लाइसेंसिंग
बिल्डर कोड MIT लाइसेंस प्राप्त है। उत्पन्न बाइनरी अपस्ट्रीम लाइसेंसिंग को बनाए रखती हैं; THIRD_PARTY_NOTICES.md देखें।