使用 obfuscation 代码混淆?;つ愕?Flutter 应用程序

使用 obfuscation 代码混淆?;つ愕?Flutter 应用程序

视频

https://www.bilibili.com/video/BV1ui421i7Pv/

https://youtu.be/dlcuyav3Ta8

前言

原文 https://ducafecat.com/blog/securing-your-flutter-app-with-code-obfuscation

本文将会和大家说下保护代码的重要性,和如何给程序加上混淆编译功能。

尽可能的不要在你的程序中写死各种服务秘钥,比如 oss 容易被盗用。

参考

知识点

在 Flutter 项目中开启代码混淆有以下几个主要的好处:

  1. 提高应用安全性:
    • 代码混淆会对应用程序的源代码进行转换和混淆,使其更难被逆向工程和破解。这有助于?;びτ贸绦虻闹恫ê蜕桃祷?。
    • 混淆后的代码不易被阅读和理解,降低了攻击者分析和篡改代码的风险。
  2. 减小APK文件大小:
    • 代码混淆可以通过缩短变量名、移除未使用的代码等方式来减小应用程序的大小。
    • 更小的APK文件意味着更快的下载速度和更高的用户体验。
  3. 提升应用性能:
    • 代码混淆通?;岫源虢杏呕?消除无用的调用和重复代码,从而提高应用程序的运行效率和性能。
  4. 隐藏程序结构:
    • 混淆后的代码不易阅读和理解,这使得攻击者更难分析应用程序的内部结构和工作原理。
    • 这对于?;す丶惴ê鸵滴衤呒浅S邪镏?。
  5. 降低应用被篡改的风险:
    • 代码混淆会让攻击者更难定位和修改关键代码,从而降低应用被篡改的风险。
    • 这对于需要高安全性的应用程序非常重要,例如金融、支付等领域的应用。

了解逆向

这里我们以 android apk 文件举例,来说明混淆的必要性,如果你了解直接跳过本节。

先编译一个 release apk

flutter build apk --release

# 输出文件
build/app/outputs/flutter-apk/app-release.apk

下载 apktool 工具

https://apktool.org/docs/install

https://bitbucket.org/iBotPeaches/apktool/downloads/

macos 下直接 brew

brew install apktool

ios 下可以试试 class-dump 工具

解包

我们可以建一个 dump 目录,将 app-release.apk 文件放入

cd dump
apktool d app-release.apk -o output_dir

与 zip 解包的区别

  1. 还原编译过的资源文件:
    • APKTool 可以还原 APK 中经过编译的资源文件,如 Drawable、Layout、Values等,使得这些文件可以被直接编辑和修改。
    • 而直接使用 ZIP 解压,得到的只是原始的资源文件,无法进行深入的编辑和修改。
  2. 解码 Smali 代码:
    • APKTool 可以将 APK 中的 Dalvik 字节码文件解码为 Smali 汇编代码,方便逆向分析和修改应用程序的逻辑。
    • 直接解压 ZIP 得到的是原始的 Dex 字节码文件,需要使用其他工具如 dex2jar 才能进一步分析。
  3. 重新打包 APK:
    • APKTool 除了可以解包,还可以将修改后的 Smali 代码和资源文件重新打包成新的 APK 文件。
    • 直接使用 ZIP 解压缩无法直接重新打包,需要额外的步骤。
  4. 保留签名信息:
    • APKTool 在重新打包时会保留原 APK 的签名信息,无需重新签名。
    • 直接使用 ZIP 解压缩后重新打包,需要重新对 APK 进行签名。

apktool 可以重新打包 apk 文件哦!

逆向 lib/arm64-v8a/libapp.so 文件

工具还是很多 IDA Pro , objdump, radare2, Ghidra 。

结论

我们还是混淆下代码提升下应用安全。

混淆步骤

Android

android/app/build.gradle

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig = signingConfigs.debug

            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

minifyEnabled true: 这个选项开启了代码混淆功能,会对应用程序的代码进行优化和缩减,以减小 APK 的大小并提高安全性。

shrinkResources true: 这个选项会删除未使用的资源文件,进一步缩小 APK 的大小。

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro': 这里指定了 Proguard 规则文件的位置。Proguard 是一个代码混淆和优化工具,这些规则文件定义了如何对代码进行处理。

android/app/proguard-rules.pro

# Flutter Obfuscation
-ignorewarnings
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.embedding.** { *; }
-keep class io.flutter.embedding.engine.** { *; }
-keep class io.flutter.embedding.android.** { *; }
-keep class io.flutter.embedding.engine.plugins.** { *; }
-keep class io.flutter.plugin.common.** { *; }
-keep class io.flutter.plugin.platform.** { *; }

ignorewarnings: 忽略 ProGuard 在运行期间可能产生的一些警告信息。

-keep class * : 保留 * 包及其所有子包下的所有类和成员不被混淆。

执行打包

flutter build apk --release --obfuscate --split-debug-info=./build_info
Font asset "MaterialIcons-Regular.otf" was tree-shaken, reducing it from 1645184 to 1384 bytes (99.9% reduction). Tree-shaking can be disabled by providing the --no-tree-shake-icons flag when building your app.
Running Gradle task 'assembleRelease'...                           34.9s
? Built build/app/outputs/flutter-apk/app-release.apk (17.8MB)

IOS

build settings -> other swift flags 在 release 中加入 "-D DART_OBFUSCATION"

[图片上传失败...(image-33954c-1721440019141)]

执行打包

flutter build ios --release --obfuscate --split-debug-info=./build_info

ios 需要配置好发布证书。

小结

在 Flutter 应用程序开发中,开启代码混淆是一个非常重要的步骤。它不仅可以提高应用的安全性,还能优化应用的性能和大小,降低被篡改的风险,最终带来更好的用户体验??⒄哂Ω萌险婵悸窃诜⒉加τ贸绦蚴逼粲么牖煜δ?以全面保护应用程序的安全和完整性。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


flutter 学习路径


? 猫哥
ducafecat.com

end

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容