這是我參與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
- 修改
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
標誌也可以單獨使用。實際上,它可以大大減少程式碼大小。有關應用程式大小的更多資訊,請參閱測量應用程式的大小。
讀取混淆的堆疊跟蹤
要除錯由模糊處理的應用程式建立的堆疊跟蹤,請使用以下步驟使其易於閱讀:
- 找到匹配的符號檔案。例如,從Android arm64裝置崩潰將需要
app.android-arm64.symbols
。 - 向
flutter symbolize
命令提供堆疊跟蹤(儲存在檔案中)和符號檔案。例如:
flutter symbolize -i <stack trace file> -d /out/android/app.android-arm64.symbols
複製程式碼
⚠️警告
在編寫最終將成為混淆的二進位制程式碼的應用程式時,請注意以下幾點。
- 依賴於匹配特定類,函式或庫名稱的程式碼將失敗。例如,以下對
Expect()
的呼叫在混淆的二進位制檔案中將不起作用:
expect(foo.runtimeType.toString(), equals('Foo'))
複製程式碼
參考連結: