Raspberry pi 防止对代码进行逆向工程
Raspberry pi protection against reverse engineering the codes
问题
我想以一种特殊的方式保护我的 Raspberry pi。
我想以 pi 用户身份启动 raspberry pi 而无需输入密码。
但是,我希望 pi 用户拥有零特权。无法读取文件,无法复制文件,什么都没有。并且无法访问 root->'sudo su'。另一方面,当 raspberry pi 以 pi 用户启动自身时,我希望后端进程以 root 身份成为 运行。所以简单地说,我想要它就像在动物园里一样——两个世界,但它们都不能进入另一个世界。客户端可以在场,查看什么进程 运行,查看目录中的文件,但无法读取、复制、删除等。同时我希望后端保持不变,运行 并写入文件。
原因:
我有 raspberri pi 产品 - 客户把它带回家,当插入电源时,RPi 启动并以 root 权限运行后端程序并与我的桌面软件通信。
但我不想让好奇的客户插入 HDMI 并看到我的代码。我也不想让他拿SD卡提取代码。
我听说即使编译了代码也可以对其进行逆向工程。所以我只是希望程序(python 脚本)在那里,但不能以任何方式访问。
是否可以做这样的保护?
提前致谢
明确一点,“无法读取文件”的意思是“不能运行程序”,这意味着“看不到什么进程正在 运行ning,请查看目录 中的文件”。
从你的问题来看,我不明白你为什么还要保留 pi
用户...
... runs backend programs with root privilege
绝不是个好主意 - 请改用服务帐户。
But I dont want curious customer that plugs in HDMI and see my code.
然后不要启用 HDMI 输出,不要安装图形桌面并禁用登录提示。您可能想查看“minimal”/“lite”图像。
请记住,UART 可以显示登录提示,因此请确保它也被禁用。
并且由于 config.txt
和内核需要以明文形式存在于引导分区中,因此它们可以轻松交换...因此这些步骤不会非常有效。
I also dont want him to take the SD card and extract the code.
您可以考虑加密文件系统(例如:LUKS),但是 Raspberry Pi 没有存储数据和自我识别的本机能力...所以您的加密密钥只能是 MAC 地址,或以明文形式存储在 SD 卡上...
从根本上说,这只是对随意的“哦,这是什么”调查的威慑。
"物理访问是完全访问"......一旦你把它交到客户手中,你就会看到威慑而不是绝对。
I heard its possible to reverse engineer the code even if compiled. So I simply want the programs (python script) to be there but cannot be accessed in any way.
Python 直到 运行 时间才会被编译,因此您需要将带有源代码的设备发送给...
如果您真的想保护您的 Intellectual Property,那么也许 Raspberry Pi 不是最佳选择?平衡成本与安全取决于您。
您可以考虑使用以下方法
使用至少两级散列 MAC 地址和 ARM 芯片序列号(通过 cat /proc/cpuinfo
)和额外的密钥。 运行 只有当存储的许可证密钥与双重散列函数的结果相同时,您的程序才可用。
您可以选择用 C 重写代码的关键部分,静态编译它,并删除所有调试符号。使用 Python 调用它。
使用 cython 快速优化您的代码。使用 python 调用程序脚本调用其生成的共享对象。仅分发共享对象和 python 调用程序脚本。
这将防止大多数人对您的代码进行逆向工程。
问题 我想以一种特殊的方式保护我的 Raspberry pi。 我想以 pi 用户身份启动 raspberry pi 而无需输入密码。 但是,我希望 pi 用户拥有零特权。无法读取文件,无法复制文件,什么都没有。并且无法访问 root->'sudo su'。另一方面,当 raspberry pi 以 pi 用户启动自身时,我希望后端进程以 root 身份成为 运行。所以简单地说,我想要它就像在动物园里一样——两个世界,但它们都不能进入另一个世界。客户端可以在场,查看什么进程 运行,查看目录中的文件,但无法读取、复制、删除等。同时我希望后端保持不变,运行 并写入文件。
原因:
我有 raspberri pi 产品 - 客户把它带回家,当插入电源时,RPi 启动并以 root 权限运行后端程序并与我的桌面软件通信。
但我不想让好奇的客户插入 HDMI 并看到我的代码。我也不想让他拿SD卡提取代码。
我听说即使编译了代码也可以对其进行逆向工程。所以我只是希望程序(python 脚本)在那里,但不能以任何方式访问。
是否可以做这样的保护?
提前致谢
明确一点,“无法读取文件”的意思是“不能运行程序”,这意味着“看不到什么进程正在 运行ning,请查看目录 中的文件”。
从你的问题来看,我不明白你为什么还要保留 pi
用户...
... runs backend programs with root privilege
绝不是个好主意 - 请改用服务帐户。
But I dont want curious customer that plugs in HDMI and see my code.
然后不要启用 HDMI 输出,不要安装图形桌面并禁用登录提示。您可能想查看“minimal”/“lite”图像。
请记住,UART 可以显示登录提示,因此请确保它也被禁用。
并且由于 config.txt
和内核需要以明文形式存在于引导分区中,因此它们可以轻松交换...因此这些步骤不会非常有效。
I also dont want him to take the SD card and extract the code.
您可以考虑加密文件系统(例如:LUKS),但是 Raspberry Pi 没有存储数据和自我识别的本机能力...所以您的加密密钥只能是 MAC 地址,或以明文形式存储在 SD 卡上...
从根本上说,这只是对随意的“哦,这是什么”调查的威慑。
"物理访问是完全访问"......一旦你把它交到客户手中,你就会看到威慑而不是绝对。
I heard its possible to reverse engineer the code even if compiled. So I simply want the programs (python script) to be there but cannot be accessed in any way.
Python 直到 运行 时间才会被编译,因此您需要将带有源代码的设备发送给...
如果您真的想保护您的 Intellectual Property,那么也许 Raspberry Pi 不是最佳选择?平衡成本与安全取决于您。
您可以考虑使用以下方法
使用至少两级散列 MAC 地址和 ARM 芯片序列号(通过
cat /proc/cpuinfo
)和额外的密钥。 运行 只有当存储的许可证密钥与双重散列函数的结果相同时,您的程序才可用。您可以选择用 C 重写代码的关键部分,静态编译它,并删除所有调试符号。使用 Python 调用它。
使用 cython 快速优化您的代码。使用 python 调用程序脚本调用其生成的共享对象。仅分发共享对象和 python 调用程序脚本。
这将防止大多数人对您的代码进行逆向工程。