
Flutter 엔진 라이브러리를 패치하여, 루트나 인증서 설치 없이 Android 및 iOS 앱에서 런타임 리버스 엔지니어링, 트래픽 가로채기, SSL 고정 우회를 가능하게 합니다.

블로그에서 더 읽기: 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
Flutter 애플리케이션이 있는 장치와 동일한 네트워크에 있는 Burp Suite 프록시 서버의 IP를 지정해야 합니다. 그런 다음 BurpSuite -> Listener Proxy -> Options 탭에서 프록시를 구성하십시오:
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에 서명하고 정렬한 후 설치합니다. 선택적으로 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의 데이터를 기반으로 GitHub Actions를 사용하여 빌드됩니다. 스냅샷 해시는 다음에서 가져옵니다:
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: 엔진 커밋 해시