Flutter 代码混淆 混淆Dart代码

代码混淆

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

猜你喜欢

转载自blog.csdn.net/u011272795/article/details/109238425