Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
reFlutter — Flutter リバースエンジニアリングフレームワーク | Kitploit
ツール/GitHubGitHub/ptswarm/reflutter
Androidセキュリティパケットスニッフィングと分析動的分析 (サンドボックス)iOSセキュリティリバースエンジニアリングモバイルセキュリティバイナリ解析Archived
GitHubptswarm/reflutter

reFlutter

Flutter リバースエンジニアリングフレームワーク

リポジトリを見る
1.5k18884年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Twitter

stars workflow

このフレームワークは、Flutterアプリのリバースエンジニアリングを支援します。パッチが適用されたFlutterライブラリのバージョン(すでにコンパイル済みでアプリの再パッケージ化に利用可能)を使用します。このライブラリはスナップショットのデシリアライズプロセスが変更されており、動的解析を便利に行うことができます。

主な機能:

  • socket.cc はトラフィックの監視と傍受のためにパッチが適用されています。
  • dart.cc はクラス、関数、一部のフィールドを出力するように変更されています。
  • 正常なコンパイルのための軽微な変更を含みます。
  • 独自のパッチを実装したい場合は、特別に作成された Dockerfile を使用して手動でFlutterコードを変更することもサポートされています。

サポートされているエンジン

  • Android: arm64, arm32;
  • iOS: arm64;
  • Release: Stable, Beta

インストール

root@kitploit:~
# Linux, Windows, MacOS
pip3 install reflutter

使用方法

root@kitploit:~
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

トラフィックの傍受

Flutterアプリケーションが動作するデバイスと同じネットワークにあるBurp SuiteプロキシサーバーのIPを指定する必要があります。次に、BurpSuite -> Listener Proxy -> Options tab でプロキシを設定します。

  • ポートを追加: 8083
  • バインド先アドレス: All interfaces
  • リクエスト処理: Support invisible proxying = True

証明書をインストールする必要はありません。Androidデバイスではルートアクセスも不要です。reFlutterはまた、一部のFlutter証明書ピン留め実装をバイパスすることも可能にします。

Androidでの使用方法

生成されたapkはアライメントと署名が必要です。uber-apk-signer を使用しています。 java -jar uber-apk-signer.jar --allowResign -a release.RE.apk

DartVMを介してロードされるコードを確認するには、デバイス上でアプリケーションを実行する必要があります。_kDartIsolateSnapshotInstructions(例: 0xB000)の値をバイナリ検索で手動で見つけなければならないことに注意してください。reFlutterはダンプをアプリケーションのルートフォルダに書き込み、ファイルとフォルダに 777 のパーミッションを設定します。adbコマンドでファイルをプルできます。

root@kitploit:~
impact@f:~$ adb -d shell "cat /data/data/<PACKAGE_NAME>/dump.dart" > dump.dart
ファイル内容
root@kitploit:~
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
  
                   }
       }

iOSでの使用方法

reflutter main.ipa コマンドの実行後に作成されたIPAファイルを使用します。DartVMを介してロードされるコードを確認するには、デバイス上でアプリケーションを実行する必要があります。reFlutterはXCodeのコンソールログに reflutter タグで出力を表示します。

今後の予定

  • 関数の絶対コードオフセットを表示
  • より多くの文字列とフィールドを抽出
  • ソケットパッチを追加
  • ForkとGithub Actionsを使用したDebugエンジンサポートの拡張
  • zipアーカイブ内の App.framework と libapp.so の検出を改善

エンジンのビルド

エンジンは Github Actions で reFlutter を使用してビルドされ、目的のバージョン、コミット、スナップショットハッシュはこの テーブル から使用されます。スナップショットのハッシュは storage.googleapis.com/flutter_infra_release/flutter/<hash>/android-arm64-release/linux-x64.zip から抽出されます。

リリース

gif

カスタムビルド

独自のパッチを実装したい場合は、特別に作成された Docker を使用して手動でFlutterコードを変更することもサポートされています。

sudo docker pull ptswarm/reflutter

root@kitploit:~
# 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                         <disables building for x64 archiitechture, use to reduce building time>
    -e arm=0                         <disables building for arm archiitechture, use to reduce building time>
    -e WAIT=300                      <the amount of time in seconds you need to edit source code>
    -e HASH_PATCH=[Snapshot_Hash]    <here you need to specify snapshot hash which matches the engine_commit line of enginehash.csv table best. It is used for proper patch search in reFlutter and for successfull compilation>
    -e COMMIT=[Engine_commit]        <here you specify commit for your engine version, take it from enginehash.csv table or from flutter/engine repo>
ツールをダウンロード