
Flutter engine libraries को पैच करता है जिससे Android और iOS ऐप्स में बिना रूट या प्रमाणपत्र इंस्टॉल किए runtime reverse engineering, traffic interception और SSL pinning bypass सक्षम होता है।

ब्लॉग पर और पढ़ें: https://swarm.ptsecurity.com/fork-bomb-for-flutter/
यह फ्रेमवर्क Flutter ऐप्स के रिवर्स इंजीनियरिंग में मदद करता है, जिसमें Flutter लाइब्रेरी के पैच किए गए संस्करण का उपयोग किया जाता है जो पहले से संकलित है और ऐप रीपैकिंग के लिए तैयार है। इस लाइब्रेरी में स्नैपशॉट डिसेरिएलाइज़ेशन प्रक्रिया को संशोधित किया गया है ताकि आप सुविधाजनक तरीके से डायनेमिक विश्लेषण कर सकें।
मुख्य विशेषताएं:
socket.cc को ट्रैफ़िक निगरानी और अवरोधन के लिए पैच किया गया है;dart.cc को कक्षाओं, फ़ंक्शंस और कुछ फ़ील्ड्स को प्रिंट करने के लिए संशोधित किया गया है;Dockerfile का उपयोग करके मैन्युअल Flutter कोड परिवर्तन समर्थित हैं।# Linux, Windows, MacOS
pip3 install reflutter==0.8.6
impact@f:~$ reflutter main.apk
कृपया अपना Burp Suite IP दर्ज करें: <input_ip>
SnapshotHash: 8ee4ef7a67df9845fba331734198a953
परिणामी apk फ़ाइल: ./release.RE.apk
कृपया apk फ़ाइल पर हस्ताक्षर करें
impact@f:~$ reflutter main.ipa
आपको अपने Burp Suite प्रॉक्सी सर्वर का IP निर्दिष्ट करना होगा जो उसी नेटवर्क में स्थित है जहाँ Flutter एप्लिकेशन वाला उपकरण है। फिर BurpSuite -> Listener Proxy -> Options tab में प्रॉक्सी कॉन्फ़िगर करें:
8083All interfacesTrue
Android के लिए कोई प्रमाणपत्र स्थापना या रूट एक्सेस की आवश्यकता नहीं है। reFlutter कुछ Flutter प्रमाणपत्र पिनिंग कार्यान्वयन को भी बायपास करने की अनुमति देता है।
⚠️ नोट: Flutter संस्करण 3.24.0 (स्नैपशॉट हैश:
80a49c7111088100a233b2ae788e1f48) से शुरू करते हुए, हार्डकोडेड प्रॉक्सी IP और पोर्ट हटा दिए गए हैं। अब आपको अपने डिवाइस पर सीधे प्रॉक्सी कॉन्फ़िगर करने की आवश्यकता है।
डिवाइस का प्रॉक्सी कॉन्फ़िगर करने के लिए ADB का उपयोग करें:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
APK पर हस्ताक्षर करें, संरेखित करें और इंस्टॉल करें। वैकल्पिक रूप से ट्रैफ़िक को Burp Suite के माध्यम से रूट करने के लिए TunProxy कॉन्फ़िगर करें।
IPA पर हस्ताक्षर करें और इंस्टॉल करें। अपने Burp Suite प्रॉक्सी सर्वर का उपयोग करने के लिए Potatso कॉन्फ़िगर करें।
परिणामी apk को संरेखित और हस्ताक्षरित किया जाना चाहिए। अनुशंसित टूल uber-apk-signer है:
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
ऐप को डिवाइस पर चलाएं। बाइनरी खोज के माध्यम से _kDartIsolateSnapshotInstructions निर्धारित करें। reFlutter डंप फ़ाइल को ऐप के रूट फ़ोल्डर में लिखता है और 777 अनुमतियाँ सेट करता है। इसे प्राप्त करने के लिए उपयोग करें:
adb -d shell "cat /data/data/<PACKAGE_NAME>/dump.dart" > dump.dart
Library:'package:anyapp/navigation/DeepLinkImpl.dart' Class: Navigation extends Object {
String* DeepUrl = anyapp://evil.com/ ;
...
reflutter main.ipa चलाने के बाद, ऐप को डिवाइस पर निष्पादित करें। डंप फ़ाइल पथ Xcode कंसोल लॉग में मुद्रित होता है:
Current working dir: /private/var/mobile/Containers/Data/Application/<UUID>/dump.dart
डिवाइस से फ़ाइल प्राप्त करें।

frida-tools==13.7.1
frida==16.7.19
Frida स्क्रिप्ट में डंप ऑफ़सेट का उपयोग करें:
frida -U -f <package> -l frida.js
_kDartIsolateSnapshotInstructions खोजने के लिए:
readelf -Ws libapp.so
Value फ़ील्ड देखें।
App.framework और libapp.so का पता लगाने में सुधार करेंइंजन GitHub Actions का उपयोग करके enginehash.csv में डेटा के आधार पर बनाए जाते हैं। स्नैपशॉट हैश यहाँ से प्राप्त किया जाता है:
https://storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip
Docker का उपयोग करके मैन्युअल Flutter कोड पैचिंग समर्थित है:
git clone https://github.com/Impact-I/reFlutter && cd reFlutter
docker build -t reflutter -f Dockerfile .
इसके साथ चलाएं:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> reflutter
उदाहरण:
docker run -it -v "$(pwd):/t" -e HASH_PATCH=aa64af18e7d086041ac127cc4bc50c5e -e COMMIT=d44b5a94c976fbb65815374f61ab5392a220b084 reflutter
docker run -e WAIT=300 -e x64=0 -e arm=0 -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> --rm -iv${PWD}:/t reflutter
फ़्लैग:
-e x64=0: x64 बिल्ड को अक्षम करता है-e arm64=0: arm64 बिल्ड को अक्षम करता है-e arm=0: arm32 बिल्ड को अक्षम करता है-e WAIT=300: बिल्ड से पहले स्रोत को संशोधित करने का समय (सेकंड में)-e HASH_PATCH: enginehash.csv से स्नैपशॉट हैश-e COMMIT: इंजन कमिट हैश