【问题标题】:Raspberry pi protection against reverse engineering the codesRaspberry pi 防止对代码进行逆向工程
【发布时间】:2018-10-12 10:05:54
【问题描述】:

问题 我想以一种特殊的方式保护我的树莓派。 我想在不输入密码的情况下以 pi 用户身份启动树莓派。 但是,我希望 pi 用户具有零权限。无法读取文件,无法复制文件,根本没有。并且无法访问 root->'sudo su'。另一方面,当树莓派以 pi 用户启动时,我希望后端进程以 root 身份运行。所以简单地说,我想要它就像在动物园里一样——两个世界,但他们都不能进入另一个世界。客户端可以在场,查看正在运行的进程,查看目录中的文件,但无法读取、复制、删除等。同时我希望后端保持不变并运行和写入文件。

原因:

我有 raspberri pi 产品 - 客户把它带回家,插入电源后,RPi 启动并以 root 权限运行后端程序并与我的桌面软件通信。

但我不希望好奇的客户插入 HDMI 并查看我的代码。我也不希望他拿 SD 卡并提取代码。

我听说即使已编译,也可以对代码进行逆向工程。所以我只是希望程序(python 脚本)在那里,但不能以任何方式访问。

有可能做这样的保护吗?

提前致谢

【问题讨论】:

    标签: python raspberry-pi root privileges protection


    【解决方案1】:

    您可以考虑使用以下方法

    1. 至少使用带有 MAC 地址和 ARM 芯片序列号(通过 cat /proc/cpuinfo)的两级散列以及额外的密钥。仅当存储的许可证密钥与双重哈希函数的结果相同时才运行您的程序。

    2. (可选)您可以用 C 重写代码的关键部分,静态编译它,并删除所有调试符号。使用 Python 调用它。

    3. 使用 cython 快速优化您的代码。使用 python 调用者脚本调用其生成的共享对象。仅分发共享对象和 python 调用脚本。

    这将阻止大多数人对您的代码进行逆向工程。

    【讨论】:

      【解决方案2】:

      明确一点,“无法读取文件”的意思是“无法运行程序”,意思是“看不到什么进程正在运行,请查看目录中的文件"。

      从你的问题来看,我不明白你为什么要把pi 用户留在原地......


      ...以root权限运行后端程序

      绝不是一个好主意 - 改用服务帐户。

      但我不希望好奇的客户插入 HDMI 并查看我的代码。

      然后不要启用 HDMI 输出,不要安装图形桌面并禁用登录提示。您可能想查看“minimal”/“lite”图像。

      请记住,UART 可以显示登录提示,因此请确保也将其禁用。

      由于config.txt 和内核需要在引导分区中以明文形式显示,它们可以轻松交换...因此这些步骤不会非常有效。

      我也不想让他拿SD卡解压。

      您可以考虑加密文件系统(例如:LUKS),但是 Raspberry Pi 没有存储数据和识别自身的本机能力......所以您的加密密钥只能是 MAC 地址之类的东西,或者以明文形式存储在 SD 卡上...

      从根本上说,这只是对随意的“这是什么”调查的威慑。

      物理访问是完全访问”...一旦你把它交到客户手中,你就会看到威慑而不是绝对。

      我听说即使已编译,也可以对代码进行逆向工程。所以我只是希望程序(python 脚本)在那里,但不能以任何方式访问。

      Python 直到运行时才会被编译,因此您需要在设备上附带您的源代码...


      如果您真的想保护您的 Intellectual Property,那么也许 Raspberry Pi 不是最佳选择?成本与安全性之间的平衡取决于您。

      【讨论】:

      • 我有精简版 - 我使用树莓派零 W。问题是,我需要树莓派启动。如果没有 pi 用户,则引导到 root 用户。你连接hdmi,或者如你所说,更改config.txt可以再次允许hdmi,我的敌人就在完全控制之下。所以如果我理解得很好,唯一的解决方案就是编译好代码字节码,因为如果这个人有 SD 卡,总有办法访问 root 用户? PS:但是你可以将python代码编译成可执行的机器码,或者使用.pyc,但是很容易编码。
      • 我的敌人处于完全控制之下” - 正确...“物理访问是完全访问”俗话说...
      • 感谢您的意见。我还有一个问题 - 在解决方案中是否有任何潜力,在开始时我将有检查 MAC 地址的程序,如果它不一样,它将删除我所有的源代码(假设我损坏了 HDMI 输入,所以读取数据的唯一方法是通过 ssh 或将 SD 卡放入另一个设备)?
      • 这不是一个功能选项,因为我们不必从 SD 卡“引导”...文件系统可以安装在另一个系统上,您的软件可以在其中安装没有运行,因此你不能“删除你所有的东西”。
      • 还要回答你这个问题:'如果你真的想保护你的知识产权,那么也许 Raspberry Pi 不是最好的选择?',我不知道有任何类似的便宜的微控制器,运行linux,可以存储x GB的数据...主要支持python。当然可以运行多个进程。
      猜你喜欢
      • 2014-05-08
      • 2012-11-03
      • 1970-01-01
      • 2015-05-06
      • 2011-05-26
      • 2011-05-28
      • 1970-01-01
      • 2012-09-05
      • 2011-04-26
      相关资源
      最近更新 更多