本人独立开发者,自己研发产品,有客户希望产品能部署到客户的服务器 ,产品是 rails 开发的,编译成二进制,理论上存在破译的风险么,如果有的话,还有啥办法能增加破译难度 @huacnlee @763914974 @xuwupeng2000wework @Sylor-huang @jasl
可以编译到 YARV 字节码。但实际上还是可以反编译的,虽然现在还没有完整的工具链来做反编译。对于大型项目的字节码打包现在 @darkkowalski 有一个在进行的 proposal。
我在维护 @dsh0416 以前在 RubyConf China 2019 提出来的字节码编译工具https://github.com/coderemixer/rien
另外去年写了一个作为 PoC 的把 Ruby 目录打包成包含 AES 加密过的字节码的归档文件的项目 https://github.com/darkkowalski/ruar
已经在 redmine 和 discourse 上测试过正确性了,但是目前 PoC 实现的性能和原生比还是差不少,有很多明显可以改进的地方,我其实在考虑要不要继续做下去。根据我和 Ruby 虚拟机核心开发者 ko1 的交流,未来很长时间 Ruby core 应该都不打算支持这个方向的功能。
理由大概是:
我现在的一个工作是给 MRI 的冷启动做性能分析和优化,可能优化方向主要是 Gem path cache 相关的,关于预编译字节码的部分基本没什么推进。
以及我个人是不太建议把保护源码这件事情押在编译字节码上,最好是多套机制一起用,毕竟在 CTF 里见识过各路破解方法,编译字节码太弱鸡了。
https://github.com/coderemixer/rien 够用了
增加监控的话,可以打个 docker 将钩子检测放到某个 gem 文件中,之后不符合自己的项目,踢下线即可......
之后项目本身代码就把所有 models 或者 controllers rien 跑一遍就好
一般来说,中小型项目这么一折腾,除非就是咱 ruby 圈自己的人,否则其他人有这个时间,不如自己重新开发一套了
至于大型项目,其实源码就没啥了,关键一条:得加钱 别的都好谈
对于做逆向的人来说 代码防护永远都有办法解决 所以你的思路肯定也不是保护代码 应该从业务上解决问题 例如:服务部署需要每天向你的在线服务申请一个秘钥 所有数据根据日期和秘钥做加密解密 服务到期以后就没有秘钥不能用了等等等等 对于业务增加不了多少处理时间