Flutter 程式碼混淆 混淆Dart程式碼

__white發表於2021-08-19

這是我參與8月更文挑戰的第19天,活動詳情檢視:8月更文挑戰

程式碼混淆

Flutter的程式碼混淆

flutter的程式碼混淆就是混淆dart程式碼。 程式碼混淆是修改應用程式二進位制檔案的過程,以使人們更難以理解。混淆將函式名和類名隱藏在已編譯的Dart程式碼中,從而使攻擊者很難對您的專有應用程式進行反向工程。

Flutter程式碼混淆的做法

Flutter版本小於1.16

Android

將以下行新增到<ProjectRoot> /android/gradle.properties

extra-gen-snapshot-options=--obfuscate
複製程式碼

有關混淆Android主機的資訊,請參閱“準備釋出Android應用”中的啟用Proguard

iOS

  1. 修改build aot呼叫

將以下標誌新增到 /packages/flutter_tools/bin/xcode_backend.sh檔案中的build aot呼叫中:

${extra_gen_snapshot_options_or_none}
複製程式碼

如下定義此標誌:

local extra_gen_snapshot_options_or_none=""
if [[ -n "$EXTRA_GEN_SNAPSHOT_OPTIONS" ]]; then
  extra_gen_snapshot_options_or_none="--extra-gen-snapshot-options=$EXTRA_GEN_SNAPSHOT_OPTIONS"
fi
複製程式碼

在這裡插入圖片描述 修改xcode_backend.sh,要記得在build aot裡的前一行加“\".

2.修改釋出配置 在<ProjectRoot> /ios/Flutter/Release.xcconfig中,新增以下行:

EXTRA_GEN_SNAPSHOT_OPTIONS=--obfuscate
複製程式碼

Flutter 1.16.2或更高版本

要混淆應用程式,請使用--obfuscate標誌和--split-debug-info標誌相結合來構建發行版本。

--split-debug-info標誌指定Flutter可以在其中輸出除錯檔案的目錄。該命令生成符號圖。目前支援apk,appbundle,ios和ios框架目標。 (master和dev通道支援macos和aar。)例如:

flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory>
複製程式碼

混淆二進位制檔案後,請儲存符號檔案。如果以後要取消混淆堆疊跟蹤,則需要這個檔案。

請注意,--split-debug-info標誌也可以單獨使用。實際上,它可以大大減少程式碼大小。有關應用程式大小的更多資訊,請參閱測量應用程式的大小

讀取混淆的堆疊跟蹤

要除錯由模糊處理的應用程式建立的堆疊跟蹤,請使用以下步驟使其易於閱讀:

  1. 找到匹配的符號檔案。例如,從Android arm64裝置崩潰將需要app.android-arm64.symbols
  2. flutter symbolize命令提供堆疊跟蹤(儲存在檔案中)和符號檔案。例如:
flutter symbolize -i <stack trace file> -d /out/android/app.android-arm64.symbols
複製程式碼

⚠️警告

在編寫最終將成為混淆的二進位制程式碼的應用程式時,請注意以下幾點。

  • 依賴於匹配特定類,函式或庫名稱的程式碼將失敗。例如,以下對Expect()的呼叫在混淆的二進位制檔案中將不起作用:
expect(foo.runtimeType.toString(), equals('Foo'))
複製程式碼

參考連結:

Obfuscating Dart code

flutter wiki

相關文章