Rails Rails 编译成二进制,理论上存在破译的风险么,谢谢大家不吝赐教~~~

111ccc · 2021年07月17日 · 最后由 zouyu 回复于 2021年07月21日 · 971 次阅读

本人独立开发者,自己研发产品,有客户希望产品能部署到客户的服务器 ,产品是 rails 开发的,编译成二进制,理论上存在破译的风险么,如果有的话,还有啥办法能增加破译难度 @huacnlee @763914974 @xuwupeng2000wework @Sylor-huang @jasl

之前好像听说能混淆,但是不能编译成二进制吧(

理论上可以只分发 yarv 字节码

可以编译到 YARV 字节码。但实际上还是可以反编译的,虽然现在还没有完整的工具链来做反编译。对于大型项目的字节码打包现在 @darkkowalski 有一个在进行的 proposal。

编译到字节码就差不多了。。。

dsh0416 回复

我在维护 @dsh0416 以前在 RubyConf China 2019 提出来的字节码编译工具https://github.com/coderemixer/rien

另外去年写了一个作为 PoC 的把 Ruby 目录打包成包含 AES 加密过的字节码的归档文件的项目 https://github.com/darkkowalski/ruar

已经在 redmine 和 discourse 上测试过正确性了,但是目前 PoC 实现的性能和原生比还是差不少,有很多明显可以改进的地方,我其实在考虑要不要继续做下去。根据我和 Ruby 虚拟机核心开发者 ko1 的交流,未来很长时间 Ruby core 应该都不打算支持这个方向的功能。

理由大概是:

  1. 很多核心开发者不喜欢闭源
  2. bootsnap 已经很大程度加快了 rails 启动,相当于一个成熟的技术验证,做类似思路的产品没有太大技术困难,但是没有更多人力做了
  3. 字节码反编译难度不大

我现在的一个工作是给 MRI 的冷启动做性能分析和优化,可能优化方向主要是 Gem path cache 相关的,关于预编译字节码的部分基本没什么推进。

以及我个人是不太建议把保护源码这件事情押在编译字节码上,最好是多套机制一起用,毕竟在 CTF 里见识过各路破解方法,编译字节码太弱鸡了。

https://github.com/coderemixer/rien 够用了

增加监控的话, 可以打个 docker 将钩子检测放到某个 gem 文件中, 之后不符合自己的项目, 踢下线即可......

之后项目本身代码就把所有 models 或者 controllers rien 跑一遍就好

一般来说, 中小型项目这么一折腾, 除非就是咱 ruby 圈自己的人, 否则其他人有这个时间, 不如自己重新开发一套了

至于大型项目, 其实源码就没啥了, 关键一条: 得加钱 别的都好谈

把核心服务抽离,做成在线的,开源个壳子。。。😂

一直用 rubyencoder,加上自己设计的 license 机制。

streamsets 就是开源一部分,闭源一部分。

huacnlee 回复

用这个能提升运行速度吗?

对于做逆向的人来说 代码防护永远都有办法解决 所以你的思路肯定也不是保护代码 应该从业务上解决问题 例如:服务部署需要每天向你的在线服务申请一个秘钥 所有数据根据日期和秘钥做加密解密 服务到期以后就没有秘钥不能用了等等等等 对于业务增加不了多少处理时间

破译之后的风险是什么

需要 登录 后方可回复, 如果你还没有账号请 注册新账号