Flutter应用代码混淆优化防护

admin 2023年8月12日18:27:37评论144 views字数 2780阅读9分16秒阅读模式

安全服务

软件定制服务

安全培训服务

Android系统定制服务

Flutter应用代码混淆优化防护


分析flutter应用很依赖反编译工具转储的dart文件中的信息,可以在开发flutter的过程中开启混淆,能有效防止静态分析。

flutter build apk --obfuscate --split-debug-info=./debug_info


一、混淆原理

混淆是一种代码保护技术,通过修改源代码或编译后的代码,使其难以阅读和理解。混淆的主要目的是提高反编译和逆向工程的难度。通常,混淆可以通过以下方法实现:


重命名变量、函数和类名。

删除不必要的空白字符、注释和换行符。

优化代码结构,例如内联函数、删除未使用的代码和资源等。

对控制流进行混淆,例如添加冗余代码、修改循环结构等。


二、实现混淆

2.1.混淆Dart代码

要对Dart代码进行混淆,请使用以下命令构建Release版本:

flutter build apk --obfuscate --split-debug-info=<output_directory>

其中<output_directory>是用于存储混淆映射文件的目录。这些文件可用于还原混淆后的堆栈跟踪。

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=/<project-name>/<directory>

混淆成功后,需要保存符号映射表,以便以后需要去混淆跟踪代码堆栈。
相关命令的其他信息,可以运行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-size

2.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.压缩图片资源
压缩项目中的图片资源,以降低它们的文件大小。可以使用像TinyPNG或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应用程序的代码和数据安全是移动应用程序开发中的一个重要方面。通过混淆、优化和保护应用程序,您可以提高应用程序的安全性和隐私。请记住,在实施这些技术时始终关注可能遇到的问题,并及时寻找解决方案。

原文链接:https://juejin.cn/post/7211081639620378661

推荐阅读
Java反编译反混淆
Android混淆规则
JS逆向常见混淆总结
Flutter应用逆向抓包
App代码混淆(自定义字典)
so隐藏符号表(代码混淆加密)
通用Android反编译反混淆工具
APP混淆实战(Java/so代码混淆)
最全Android及资源混淆方法汇总
Android APP防作弊SDK解决方案
利用de4dot解密被混淆的.NET代码
JavaScript逆向基础之手工还原混淆代码
MacOS/iOS Mach-O应用程序代码混淆
AntiOllvm去混淆视频(即将发布正式版产品)
AntiOllvm去除二进制代码Ollvm混淆并回编译
Android App Bundle混淆加密加壳加固保护的解决方案

Flutter应用代码混淆优化防护

Flutter应用代码混淆优化防护

原文始发于微信公众号(哆啦安全):Flutter应用代码混淆优化防护

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月12日18:27:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Flutter应用代码混淆优化防护http://cn-sec.com/archives/1952649.html

发表评论

匿名网友 填写信息