
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
Please enter your Burp Suite IP: <input_ip>
SnapshotHash: 8ee4ef7a67df9845fba331734198a953
The resulting apk file: ./release.RE.apk
Please sign the apk file
impact@f:~$ reflutter main.ipa
विकल्प:
-p, --patch-dump — डंप मोड: इंजन को पैच करें ताकि शुरू होने पर dump.dart (क्लासेस/मेथड्स/ऑफ़सेट्स) एमिट हो, और प्रॉक्सी निर्देशों के बजाय एक frida.js संकेत प्रिंट करें।-n, --no-interact — कभी भी Burp IP के लिए प्रॉम्प्ट न करें (इसका अर्थ 127.0.0.1 है); CI में पुराने इंजनों के लिए उपयोगी।-b <Snapshot_Hash>, --build-engine — इंजन बिल्ड मोड: स्नैपशॉट हैश के लिए इंजन कमिट प्रिंट करें और (जब flutter/flutter चेकआउट के अंदर चलाया जाए) reFlutter सोर्स पैच लागू करें। देखें scripts/local-release।आपको अपने Burp Suite प्रॉक्सी सर्वर का IP निर्दिष्ट करना होगा जो उसी नेटवर्क में स्थित है जहाँ Flutter एप्लिकेशन वाला डिवाइस है। फिर BurpSuite -> Listener Proxy -> Options tab में प्रॉक्सी कॉन्फ़िगर करें:
8083All interfacesTrue
Android के लिए किसी सर्टिफिकेट इंस्टॉलेशन या रूट एक्सेस की आवश्यकता नहीं है। reFlutter Flutter सर्टिफिकेट पिनिंग के कुछ कार्यान्वयनों को बायपास करने की भी अनुमति देता है।
⚠️ नोट: Flutter 3.24.x (स्नैपशॉट हैश
80a49c7111088100a233b2ae788e1f48) तक के इंजन अभी भी हार्डकोडेड प्रॉक्सी IP रखते हैं और इन्हें इन-प्लेस पैच किया जाता है। 3.27.x से हार्डकोडेड IP हट गया है — इसके बजाय सीधे डिवाइस पर प्रॉक्सी कॉन्फ़िगर करें।
डिवाइस का प्रॉक्सी कॉन्फ़िगर करने के लिए ADB का उपयोग करें:
adb -s <device> shell "settings put global http_proxy <proxy_ip:port>"
APK को साइन, अलाइन और इंस्टॉल करें। वैकल्पिक रूप से TunProxy को Burp Suite के माध्यम से ट्रैफ़िक रूट करने के लिए कॉन्फ़िगर करें।
IPA को साइन और इंस्टॉल करें। Potatso को अपने Burp Suite प्रॉक्सी सर्वर का उपयोग करने के लिए कॉन्फ़िगर करें।
परिणामी 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 की पहचान में सुधार करेंइंजन enginehash.csv में डेटा के आधार पर scripts/local-release (macOS; iOS और Android arm64/arm/x64 के लिए v2 + v3 बनाता है, प्रत्येक पैच के लागू होने की पुष्टि करता है, और रिलीज़ एसेट्स अपलोड करता है) के साथ बनाए जाते हैं। स्नैपशॉट हैश के लिए इंजन कमिट reflutter -b <Snapshot_Hash> के माध्यम से हल किया जाता है। स्नैपशॉट हैश यहाँ से प्राप्त किया जाता है:
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: इंजन कमिट हैश