
Android ऐप-क्लोनिंग सैंडबॉक्स, जिसमें Frida-शैली CLI है जो क्लोन किए गए ऐप्स को spawn या attach करता है और Gum Interceptor तथा Stalker hooks का उपयोग करके QuickJS स्क्रिप्ट इंजेक्ट करता है।

Spindle कमांड-लाइन क्लाइंट है। यह एक स्क्रिप्ट को BBA होस्ट में या एक क्लोन किए गए ऐप में भेजता है और लॉग वापस प्रिंट करता है। फ्लैग Frida कमांड लाइन का अनुसरण करते हैं: -f के साथ spawn करें, -n या -p के साथ attach करें, -l के साथ फ़ाइल लोड करें।
BBA स्वयं एक Android ऐप-क्लोनिंग सैंडबॉक्स है। होस्ट पैकेज com.android.bba है। एक क्लोन किया गया ऐप उस पैकेज के अंदर चलता है, सामान्य इंस्टॉल के रूप में नहीं। APK इंस्टॉल करें, BBA UI से क्लोन खोलें, फिर Spindle का उपयोग करें। स्क्रिप्ट केवल arm64 पर चलती हैं, QuickJS में, Frida Gum के Interceptor और Stalker के साथ।

डेव मशीन कभी सीधे क्लोन से कनेक्ट नहीं होती। यह केवल 127.0.0.1:2408 पर com.android.bba:black से बात करती है। होस्ट प्रोसेस और प्रत्येक क्लोन एजेंट हैं: वे Binder पर रजिस्टर करते हैं, स्क्रिप्ट प्राप्त करते हैं, और लॉग वापस भेजते हैं। USB मोड आपके लिए adb forward tcp:0 tcp:2408 चलाता है।
रेपो रूट से, एक डिवाइस प्लग इन के साथ:
# Stop the clone on user 0, start it, inject, then let it continue
python3 tools/spindle -U -f com.example.app -l tools/test_js_api.js
# Attach to a clone that is already running
python3 tools/spindle -U -n com.example.app -l tools/test_native_hook.js
# Attach to a pid, including the host process com.android.bba
python3 tools/spindle -U -p 12345 -l tools/test_js_api.js
# One line of script, no file
python3 tools/spindle -U -n com.example.app -e 'console.log("hi")'
# Registered processes, JSON
python3 tools/spindle -U --list
# Same list, as a table
python3 tools/spindle-ps -U
-f spawn है। क्लाइंट स्क्रिप्ट भेजता है, फिर UNLOCK। क्लोन स्टार्टअप पथ पर उस फ्रेम के आने तक प्रतीक्षा करता है, इसलिए स्क्रिप्ट Application.onCreate से पहले तैयार रहती है। -f हमेशा user 0 का उपयोग करता है।
-n और -p attach करते हैं। प्रोसेस पहले से रजिस्टर होना चाहिए। नाम वह प्रोसेस नाम है जो Spindle ने रिकॉर्ड किया, आमतौर पर क्लोन किया गया पैकेज नाम। होस्ट UI प्रोसेस com.android.bba है।
एक से अधिक फ़ोन:
python3 tools/spindle -D <serial> -n com.example.app -l tools/test_js_api.js
यदि पोर्ट पहले से फ़ॉरवर्ड है, तो adb छोड़ें:
python3 tools/spindle -H 127.0.0.1:2408 -n com.example.app -l tools/test_js_api.js
-H, -U, और -D कनेक्शन चुनते हैं। इनमें से केवल एक पास करें। -f, -n, और -p में से केवल एक पास करें।
क्लाइंट चालू रहता है और console.log प्रिंट करता है जब तक प्रोसेस बाहर नहीं निकलती, सर्वर ड्रॉप नहीं होता, या आप Ctrl-C नहीं दबाते।
एक स्क्रिप्ट सादी JavaScript है। ये नमूने tools/ में हैं:
| फ़ाइल | यह क्या करती है |
|---|---|
test_js_api.js | Memory, pointers, Module, Interceptor |
test_native_hook.js | Interceptor.attach("libz.so!deflate", …) |
test_java_hook.js | Activity.onCreate पर Java.hook |
test_stalker.js | एक हुक के अंदर से Stalker.follow |
test_rpc.js | कमांड लाइन से कॉल किया गया rpc.exports |
console.log एक लॉग लाइन के रूप में वापस आता है। armeabi-v7a पर कोई रनटाइम नहीं है; वहाँ एक RPC js runtime is not in bba के साथ जवाब देता है।
स्क्रिप्ट लोड होने के बाद एक export कॉल करें। --args एक JSON array है और मेल खाते --call के साथ लाइन अप करता है:
python3 tools/spindle -U -n com.example.app -l tools/test_rpc.js --call ping --args '["hi"]'
यह pong hi प्रिंट करता है, फिर लॉग की प्रतीक्षा करता रहता है।
ग्रुप चैट: openbba। कोड 20 अक्टूबर 2026 को समाप्त होगा।
