
Flutter रिवर्स इंजीनियरिंग फ्रेमवर्क

यह फ्रेमवर्क फ्लटर ऐप्स के रिवर्स इंजीनियरिंग में मदद करता है, जिसमें फ्लटर लाइब्रेरी के पैच किए गए संस्करण का उपयोग किया जाता है जो पहले से संकलित है और ऐप रीपैकिंग के लिए तैयार है। इस लाइब्रेरी में स्नैपशॉट डिसेरिएलाइज़ेशन प्रक्रिया को संशोधित किया गया है ताकि आप सुविधाजनक तरीके से डायनेमिक विश्लेषण कर सकें।
मुख्य विशेषताएँ:
socket.cc को ट्रैफिक मॉनिटरिंग और इंटरसेप्शन के लिए पैच किया गया है;dart.cc को क्लासेस, फंक्शन्स और कुछ फील्ड्स प्रिंट करने के लिए संशोधित किया गया है;Dockerfile का उपयोग करके मैनुअल फ्लटर कोड परिवर्तन समर्थित है# Linux, Windows, MacOS
pip3 install reflutter
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
Configure Burp Suite proxy server to listen on *:8083
Proxy Tab -> Options -> Proxy Listeners -> Edit -> Binding Tab
Then enable invisible proxying in Request Handling Tab
Support Invisible Proxying -> true
impact@f:~$ reflutter main.ipa
आपको अपने Burp Suite Proxy Server का IP निर्दिष्ट करना होगा जो उसी नेटवर्क में स्थित है जहां फ्लटर एप्लिकेशन वाला डिवाइस है। इसके बाद, आपको BurpSuite -> Listener Proxy -> Options tab में प्रॉक्सी कॉन्फ़िगर करनी चाहिए।
8083All interfacesTrue
आपको कोई प्रमाणपत्र स्थापित करने की आवश्यकता नहीं है। Android डिवाइस पर, आपको रूट एक्सेस की भी आवश्यकता नहीं है। reFlutter कुछ फ्लटर सर्टिफिकेट पिनिंग इम्प्लीमेंटेशन को बायपास करने की भी अनुमति देता है।
परिणामी apk को संरेखित और हस्ताक्षरित किया जाना चाहिए। मैं uber-apk-signer का उपयोग करता हूँ
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk.
यह देखने के लिए कि DartVM के माध्यम से कौन सा कोड लोड किया गया है, आपको डिवाइस पर एप्लिकेशन चलाना होगा। ध्यान दें कि आपको बाइनरी सर्च का उपयोग करके मैन्युअल रूप से यह पता लगाना होगा कि _kDartIsolateSnapshotInstructions (जैसे 0xB000) किसके बराबर है। reFlutter डंप को एप्लिकेशन के रूट फोल्डर में लिखता है और फ़ाइल और फ़ोल्डर को 777 अनुमतियाँ सेट करता है। आप adb कमांड से फ़ाइल प्राप्त कर सकते हैं
impact@f:~$ 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/ ;
Function 'Navigation.': constructor. (dynamic, dynamic, dynamic, dynamic) => NavigationInteractor {
Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000009270
}
Function 'initDeepLinkHandle':. (dynamic) => Future<void>* {
Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000412fe8
}
Function '_navigateDeepLink@547106886':. (dynamic, dynamic, {dynamic navigator}) => void {
Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000002638
}
}
Library:'package:anyapp/auth/navigation/AuthAccount.dart' Class: AuthAccount extends Account {
PlainNotificationToken* _instance = sentinel;
Function 'getAuthToken':. (dynamic, dynamic, dynamic, dynamic) => Future<AccessToken*>* {
Code Offset: _kDartIsolateSnapshotInstructions + 0x00000000003ee548
}
Function 'checkEmail':. (dynamic, dynamic) => Future<bool*>* {
Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000448a08
}
Function 'validateRestoreCode':. (dynamic, dynamic, dynamic) => Future<bool*>* {
Code Offset: _kDartIsolateSnapshotInstructions + 0x0000000000412c34
}
Function 'sendSmsRestorePassword':. (dynamic, dynamic) => Future<bool*>* {
Code Offset: _kDartIsolateSnapshotInstructions + 0x00000000003efb88
}
}
reflutter main.ipa कमांड के निष्पादन के बाद बनाई गई IPA फ़ाइल का उपयोग करें। यह देखने के लिए कि DartVM के माध्यम से कौन सा कोड लोड किया गया है, आपको डिवाइस पर एप्लिकेशन चलाना होगा। reFlutter XCode में कंसोल लॉग में reflutter टैग के साथ अपना आउटपुट प्रिंट करता है।

App.framework और libapp.so का पता लगाने में सुधार करेंइंजन reFlutter का उपयोग करके Github Actions में बनाए जाते हैं। वांछित संस्करण बनाने के लिए, इस तालिका से कमिट और स्नैपशॉट हैश का उपयोग किया जाता है।
स्नैपशॉट का हैश storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip से निकाला जाता है।
यदि आप अपने स्वयं के पैच लागू करना चाहते हैं, तो विशेष रूप से तैयार Docker का उपयोग करके मैनुअल फ्लटर कोड परिवर्तन समर्थित है।
sudo docker pull ptswarm/reflutter
# Linux, Windows
EXAMPLE BUILD ANDROID ARM64:
sudo docker run -e WAIT=300 -e x64=0 -e arm=0 -e HASH_PATCH=<Snapshot_Hash> -e COMMIT=<Engine_commit> --rm -iv${PWD}:/t ptswarm/reflutter
FLAGS:
-e x64=0 <x64 आर्किटेक्चर के लिए बिल्ड अक्षम करता है, बिल्ड समय कम करने के लिए उपयोग करें>
-e arm=0 <arm आर्किटेक्चर के लिए बिल्ड अक्षम करता है, बिल्ड समय कम करने के लिए उपयोग करें>
-e WAIT=300 <आपको स्रोत कोड संपादित करने के लिए आवश्यक समय सेकंड में>
-e HASH_PATCH=[Snapshot_Hash] <यहां आपको स्नैपशॉट हैश निर्दिष्ट करना होगा जो enginehash.csv तालिका की engine_commit लाइन से सबसे अच्छा मेल खाता हो। इसका उपयोग reFlutter में उचित पैच खोजने और सफल संकलन के लिए किया जाता है>
-e COMMIT=[Engine_commit] <यहां आप अपने इंजन संस्करण के लिए कमिट निर्दिष्ट करते हैं, इसे enginehash.csv तालिका या flutter/engine रिपॉजिटरी से लें>