#error-string #business #utility #public #binaries #encryption #protect

slip

一个轻松的实用程序,用于加密公共二进制文件中的错误处理字符串,以保护您的业务逻辑

1 个不稳定版本

0.1.0 2020 年 4 月 30 日

#1986Rust 模式

MIT 许可证

9KB

slip

Crates.io docs page MIT

一个轻松的实用程序,用于加密公共二进制文件中的错误处理字符串,以保护您的业务逻辑。

此软件包不提供字符串的一般运行时混淆。请考虑使用类似 obfstr 的工具。

slip 做什么?

有时,人们希望确保某些业务逻辑难以逆向工程。但他们也希望它在生产环境中易于调试。然而,高质量的错误处理可能会通过错误字符串泄露程序的工作方式,给攻击者提供深入了解。slip 帮助解决这个特定问题。

slip 是一个 Rust 宏,它在编译时将错误字符串转换为加密令牌。攻击者只能接触到那些无法解密的令牌。然后,当错误返回到软件维护者时,他们将能够使用他们的密钥对其进行解密。unslip 实用程序是一个易于使用、易于自动化且透明的工具,用于解密令牌,即使在复杂的错误报告中也是如此。

slip 与自动化错误报告系统配合使用效果最佳,因此用户永远不会看到任何 slip 令牌,并可以享受具有自动化错误修复的优质产品。如果您有任何依赖项使用 slip,您也可以利用它,因为密钥是在全局范围内定义的(即使依赖项是第三方)。

安装

slip 是一个常规的 crates.io 软件包,可以使用 cargo 获取。

unslip 是一个二进制文件。您可以从 Linux 和 Windows(x64)的 GitHub 发布 下载它,或者克隆此仓库并使用 cargo 在您的系统上安装它。

cargo install --path unslip

使用

您首先需要生成一个密钥。您可以使用 unslip 做这件事,但任何随机的 16 字节十六进制字符串都可以。

$ unslip key

然后,您需要将此密钥设置为构建环境中的 SLIP_KEY 环境变量(请参阅下面的 重要注意事项)。
在 Linux 上,可以这样临时完成(变量将在您离开终端后消失)

$ export SLIP_KEY=<your key, without quotations>

在 Windows 上,可以这样临时完成(变量将在您离开终端后消失)

$ set SLIP_KEY=<your key, without quotations>

完成此操作后,slip 即可使用!请参阅示例了解如何使用宏,以及示例部分了解如何使用 unslip。

重要注意事项

  • 更改您的 SLIP_KEY 值需要重建整个依赖树,以确保更改在所有地方都得到反映。这是因为增量编译,因为宏不会在冷代码上再次运行。因此,建议避免更改密钥。您可以在再次构建之前执行 cargo clean 来完全重建。
  • 在发布模式下,如果未提供 SLIP_KEY,宏将无法构建。在未加密密钥的情况下继续操作是预期行为(例如在公共依赖项中),应将 allow-no-encryption 功能传递给 slip 依赖项。
  • 不建议依赖于加密形式的令牌来识别它,因为其值是易变的(它可以在每次构建之间显著变化)。
  • 当然,slip 不是防止逆向工程的神器。但希望它确实使这变得更困难。

寻求帮助

  • 欢迎任何功能想法或改进!请随时提出改进的问题和拉取请求。
  • 基准测试。虽然宏对构建时间的影响不应该很大(特别是在没有提供密钥的开发设置中,它什么也做不了),但我真的很想了解是否有必要找到比目前设置更高效的解决方案。实际上,最好的方式是分析它对较大代码库的影响。如果您恰好有一个,如果您能分享您的结果,那将非常感激!
  • 这是我第一个过程宏,也许我并没有完全做对。特别是,我真的很希望返回的表达式被其他宏(如 concat!)解释为字符串字面量,或者使宏能够接受不仅仅是字符串字面量,这是否可能?

示例

您可以在网络协议示例中找到如何在您的代码中使用宏(只需用宏包装您的字符串即可)。

slip!("this string will be encrypted!");

unslip 工具将您的密钥作为参数,从 stdin 读取要处理的数据,并将结果输出到 stdout。

例如,如果您将以下错误存储在 input.txt...

thread 'main' panicked at '$slip:1:WA5mKhwP74N+g8KjAT6hEA==:J1IxgRDKGxAWyM+uwF4y3ZyRKvysUw==$: $slip:1:p6NIauAikdOUN1Iw5OCc9Q==:ZIqdMcLD4q2dsOKaWw==$[3, 1, 2]'

...然后运行...

$ unslip decrypt 15478569587452125874565845212565 < input.txt > output.txt

...output.txt 将包含以下友好的消息!

thread 'main' panicked at 'failed to parse packet: packet data: [3, 1, 2]'

许可证

根据 MIT 许可证授权(许可证http://opensource.org/licenses/MIT)。

依赖关系

~1MB
~18K SLoC