【问题标题】:where does the variables defined using "--dart-define" go and can we reverse engineer them?使用 \"--dart-define\" 定义的变量在哪里,我们可以对它们进行逆向工程吗?
【发布时间】:2022-08-17 01:23:10
【问题描述】:

我正在构建一个颤振应用程序。 我不想通过将secret_key 放入代码中来破坏我的secret_key,因此我尝试制作.env 文件并创建了一个apk。然后我解压缩了apk并在那里找到了我的配置文件。所以现在我不这样做了。

我尝试的下一件事是在构建应用程序时使用--dart-define 变量声明来放置我的secret_key,我正在使用它访问它

const secret = String.fromEnvironment(\"secret_key\");

来到这个问题,这些变量在飞镖代码中的位置,有没有办法通过逆向工程来获取它们。 基本上以这种方式放置我的密钥是否安全?

  • 是的,它是安全的,因为您需要在构建命令中定义 --dart-define 变量,并且在生成这些密钥时,它不会保存在代码中的任何位置。
  • 如果您的代码在运行时需要secret_key,那么它并不是严格安全的。您的代码可以做的任何事情,有足够决心的人也可以通过检查您的代码来做。
  • @jamesdlin 你是什么意思?我没明白。我的用例是使用该密钥调用 API。没有它,我无法调用 API。
  • 我的意思是,严格来说,您要问的是不可能的。如果在客户端上运行的代码需要一个固定的秘密才能运行,则客户端需要访问该秘密,并且有足够决心的人将能够从客户端代码中提取它。见How to store a secret API key in an application\'s binary?
  • 谢谢,@jamesdlin。收到。但是--dart-define 保存除了二进制文件之外在代码中没有任何痕迹的变量呢?

标签: flutter dart secret-key


【解决方案1】:

根据我的发现,您可以在二进制文件为每个 ABI 生成,所以是的,您可以对其进行逆向工程。

如何尝试:

  1. 使用String.fromEnvironment("ANIMAL") 从您的代码中调用该变量。

  2. 运行 flutter build apk --dart-define=ANIMAL=Dog 为 Android 构建

  3. 使用文件存档器(例如 7-Zip)打开生成的 .APK 文件并导航到 /lib/(ABI)/

  4. 使用文本编辑器或十六进制查看器打开/lib/(ABI)/libapp.so 文件并搜索值Dog,您将找到它

    观察:

    • 如果您不在代码中使用该变量,它将不会被添加到二进制文件中
    • --obfuscateflutter build 一起使用不会有帮助,因为它不会混淆环境变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多