分析flutter應用很依賴反編譯工具轉儲的dart文件中的信息,可以在開發flutter的過程中開啟混淆,能有效防止靜態分析。
flutter build apk --obfuscate --split-debug-info=./debug_info
一、混淆原理
混淆是一種代碼保護技術,通過修改源代碼或編譯后的代碼,使其難以閱讀和理解?;煜闹饕康氖翘岣叻淳幾g和逆向工程的難度。通常,混淆可以通過以下方法實現:
重命名變量、函數和類名。
刪除不必要的空白字符、注釋和換行符。
優化代碼結構,例如內聯函數、刪除未使用的代碼和資源等。
對控制流進行混淆,例如添加冗余代碼、修改循環結構等。
二、實現混淆
2.1.混淆Dart代碼
要對Dart代碼進行混淆,請使用以下命令構建Release版本:
flutterbuildapk--obfuscate--split-debug-info=其中
Flutter應用混淆
Flutter應用的混淆非常簡單,只需要在構建release版應用時結合使用--obfuscate 和--split-debug-info這兩個參數即可。
–obfuscate --split-debug-info用來指定輸出調試文件的位置,該命令會生成一個符號映射表。目前支持apk,appbundle,ios和ios-framework等目標平臺(macOS和aar在master和dev分支中支持),如下所示:
flutter build apk --obfuscate --split-debug-info=/混淆成功后,需要保存符號映射表,以便以后需要去混淆跟蹤代碼堆棧。/
相關命令的其他信息,可以運行flutter build apk -h查看,如果不支持該命令,核實Flutter版本,執行flutter upgrade更新。
Flutter分析包的大小
flutter build apk --target-platform android-arm --analyze-size flutter build apk --target-platform android-arm64 --analyze-size flutter build apk --target-platform android-x64 --analyze-sizeflutter build appbundle --target-platform android-arm --analyze-size flutter build appbundle --target-platform android-arm64 --analyze-size flutter build appbundle --target-platform android-x64 --analyze-size2.2.混淆Android原生代碼
要對Android原生代碼進行混淆,請在android/app/build.gradle文件中啟用ProGuard或R8。在buildTypes配置中,為release類型添加以下配置:
buildTypes { release{ minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }此外,確保在proguard-rules.pro文件中添加必要的混淆規則,例如保留與MethodChannel相關的原生代碼:
-keep class io.flutter.plugin.** { *; }三、優化應用程序包體積
3.1.移除未使用的資源
移除項目中未使用的資源(如圖片、字體和動畫),以減小應用程序的包體積。在Android項目中,可以使用shrinkResources選項來移除未使用的資源:
android { ... buildTypes { release { ... shrinkResources true } } ... }3.2.壓縮圖片資源
壓縮項目中的圖片資源,以降低它們的文件大小??梢允褂孟馮inyPNG或ImageOptim這樣的工具來壓縮圖片資源。
四、提高反編譯難度
4.1.混淆字符串
為了提高反編譯的難度,可以在編譯階段處理掉明文字符串。一個方法是使用字符串混淆庫,如string_obfuscator。
在編譯階段,此庫會自動混淆字符串,并在運行時解混淆。
要使用string_obfuscator庫,請在pubspec.yaml文件中添加依賴,然后在需要混淆字符串的Dart文件中引入string_obfuscator庫。
使用obfuscate()函數混淆字符串。
以下是一些在混淆和優化Flutter應用程序過程中可能遇到的常見問題及其解決方案:
Flutter與原生平臺通信失效:請確保在proguard-rules.pro文件中添加與MethodChannel相關的原生代碼保留規則。
保留JSON對應的Java Bean對象:在proguard-rules.pro文件中保留與JSON相關的Java Bean對象,使用-keep指令來保留這些類。
隱藏明文字符串:使用字符串混淆庫,如string_obfuscator,在編譯階段對字符串進行混淆,并在運行時解混淆。
六、總結
保護Flutter應用程序的代碼和數據安全是移動應用程序開發中的一個重要方面。通過混淆、優化和保護應用程序,您可以提高應用程序的安全性和隱私。
請記住,在實施這些技術時始終關注可能遇到的問題,并及時尋找解決方案。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
存儲器
+關注
關注
38文章
7212瀏覽量
162393 -
壓縮機
+關注
關注
11文章
640瀏覽量
78736 -
MacOS
+關注
關注
0文章
203瀏覽量
17309 -
JSON
+關注
關注
0文章
112瀏覽量
6843 -
flutter
+關注
關注
0文章
12瀏覽量
404
原文標題:Flutter應用代碼混淆優化防護
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
深入理解flutter的編譯原理與優化
將以一個簡單的hello_flutter為例,介紹下Flutter相關原理及定制與優化。Flutter簡介Flutter的架構主要分成三層:
發表于 07-02 17:47
ESD靜電防范常見問題及解決方案
ESD靜電防范常見問題及解決方案靜電是人們非常熟悉的一種自然現象。靜電的許多功能已經應用到軍工或民用產品中,如靜電除塵、靜電噴涂、靜電分離
發表于 05-19 13:03
?2244次閱讀
電壓開關中常見問題及解決方案
電壓開關中常見問題及解決方案
設計自動化的測試系統開關需要搞清楚要開關信號和要執行測試的特點。例如,在測試應用中承受開關電壓信號的
發表于 05-05 17:32
?1039次閱讀
5G簇優化常見問題及解決方案資料下載
電子發燒友網為你提供5G簇優化常見問題及解決方案資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、
發表于 04-25 08:40
?5次下載
解析會議一體機在使用中出現的常見問題及解決方案
隨著科技的發展,會議一體機的應用出現在我們生活中的頻率越來越高,然而在使用過程中可能還伴隨著多多少少的一些問題,那么接下來中億睿將分享一些會議一體機在使用中出現的常見問題及解決方案。 常見問題
APP混淆實戰(Java/so代碼混淆)
Android App Bundle混淆加密加殼加固保護的解決方案(過Google App上架審核)最全Android及資源混淆方法匯總(無需加固節約成本并將APP上架Google Play成功的最佳
石英諧振器應用中常見問題及解決方案
石英諧振器應用中常見問題及解決方案 石英諧振器是一種廣泛應用于電子設備中的振蕩器。它通過石英晶體的諧振效應來提供穩定的頻率信號。然而,在實際應用中,石英諧振器可能會遇到一些常見問題。本文將探討一些
underfill工藝常見問題及解決方案
underfill工藝常見問題及解決方案Underfill工藝是一種集成電路封裝工藝,用于在倒裝芯片邊緣點涂環氧樹脂膠水,通過“毛細管效應”完成底部填充過程,并在加熱情況下使膠水固化。該工藝在緩解
評論