不清楚 BPC 是什么的参看这里:
开发了一年多的 PHP 编译器 BPC 初见成效,发一些测试程序给大家看看
在完成了更多的扩展开发后,BPC 终于成功编译出了它的第一个成规模的应用,来自云招 OurATS 的简历解析工具: bob-parser.
先上链接
https://www.ourats.com/bpc/bob-parser.trial 可直接下载,但速度有限
https://caiyun.139.com/m/i?155CGfDdVPP2m 提取码:zvQ3 和彩云网盘,需要注册才能下载,速度快
此程序仅在 Ubuntu 18.04 amd64 上测试通过,其它平台不保证.
下载回来后当然要 chmod a+x bob-parser.trial
才能执行.
此程序是 bob-parser 的试用版,有诸多限制,正式版是要收费的,先说明一下.
bob-parser 是一个简历解析工具,就是从简历中提取出来姓名,电话,邮箱,工作经历,教育经历等字段的一个程序.
bob-parser 是一个通用型的解析工具,不是按渠道和模板进行 preg_match 的那种.
bob-parser 原本是云招 OurATS 招聘管理系统的一个基础组件,后独立出来提供在线 API 调用.
bob-parser 使用 PHP 语言开发,现经由 BPC,将所有 PHP 文件编译成一个可执行文件发布出来了.
官网地址是: https://www.bob-parser.com
100%源码保护
PHP 的源码保护目前最强的应该就是基于 opcode 的了,但据我所知,现在至少有两个可用的 opcode 反编译器,所以 opcode 没有想像的那么安全.
对比 java 和 C#就能知道,类似字节码的这种机制,被反编译就是市场需求的问题.
BPC 完全脱离 Zend,将 PHP 最终编译成 C,要想从可执行文件反汇编出 PHP 是不可能的.
和 PHP 高度兼容
说一行代码不用动那是夸张,对于 bob-parser 来说,需要将其从 web 方式运行改由 cli 运行,其实也就是新写一个入口文件,并且这个入口文件本身也还能用 php 执行,这样方便对比解析结果是否完全一致,如果不一致,那说明编译器有问题.
得益于前期开发 BPC 时 phpt 测试做的扎实,bob-parser 的测试用例全过,也就是说一个简历文件,用 php 执行得到的结果和用 BPC 编译出来的可执行文件运行得到的结果是完全一致的,一个字符不差.
扩展开发极其容易
bob-parser 除了 PHP 代码之外,还依赖一些外部程序,这些外部程序是因为之前搞不定 PHP 扩展开发,所以才独立出去的,现在扩展开发容易了,这些外部程序能开发成扩展的都开发成扩展了,这也使得 bob-parser 能够最终只生成一个可执行文件.
在源码保护和高度兼容的前提下,才会考虑性能和内存占用
编译器本身内置软件授权机制
对于能够本地部署的程序来说,做到源码保护只是第一步,尤其是像 bob-parser 这样的工具类程序来说,只有一个可执行文件,方便了部署方便了调用,如果没有可靠的授权机制,出去了一份,就等于全都出去了.
不管什么样的授权,最终在代码里肯定有一处 if 判断,如果满足条件,继续执行,否则报错退出.
因此,只要定位到这个 if 判断,让它恒为 true,授权限制就绕过了.
曾看到过一篇文章,讲的是如何去除试用版 ioncube_encoder_xxx_64 的 14 天限制,对二进制可执行文件做处理的工具都是现成的.
一个简单的思路就是在 PHP 代码里添加多处授权判断以增加安全性,但这样做一是影响正常逻辑,二是需要手动维护.
BPC 在编译过程中支持随机插入授权判断,大大提高了安全性.
1
hefish 2022-02-25 13:27:31 +08:00
这个 感觉好高级。。。
|
2
watcher 2022-02-25 14:14:48 +08:00
国内有能落地的商业环境么?
|
3
heguangyu5 OP |
4
0o0O0o0O0o 2022-02-25 14:44:23 +08:00
650MB ,虽说现在不怎么看软件体积了,但考虑到描述中这个试用软件的功能不是特别复杂,这方面还是有待优化的。
太大了下不动就不试着破解了... |
5
heguangyu5 OP @0o0O0o0O0o 简历解析是个很成熟的软件了,有好几家在做.你可以了解一下他们的部署下来是多大,650M 已经很小了,我见过好几个 G 的呢.
|
6
mrgeneral 2022-02-25 15:43:07 +08:00
> BPC 当前不支持 namespace,closure,generators,traits 等现代 PHP 特性,近期也不打算支持.
这个决策是因为实现成本还是 OP 自身接触到的环境就不需要这些功能? |
7
heguangyu5 OP @mrgeneral
1. namespace 个人不喜欢,用的也不多,真的用到的地方可以调整成不用 namespace 的,个人更偏好 A_B_C 这种全名的. 2. 匿名函数是支持的,但是不支持 use 语法.这个是因为没花时间去看到底该怎么支持. 3. generators,traits 我们自己的项目没有用到. 这个项目当前还处在很早期,看实际需求,也许后边会支持这些特性. |
8
xumng123 2022-02-25 18:30:19 +08:00 via iPhone
没人用原生的 php 吧,不支持 tp 和 laravel ,将会丢失大量商用用户。
不支持 namespace 和 trait ,不适合 tp 和 laravel |
9
heguangyu5 OP @xumng123 万里长城第一步,你看微软做的 peachpie strlen 返回值还不对呢,俄罗斯做的 kphp 还不支持 calling by name 呢.
|
10
littleylv 2022-02-26 10:06:01 +08:00
如果说因为一些时间、能力等方面的原因不支持 namespace traits 等特性,后续有计划会添加支持。可能大伙还有点兴趣了解一下。
“BPC 当前不支持 namespace,closure,generators,traits 等现代 PHP 特性,近期也不打算支持.” “namespace 个人不喜欢,用的也不多,真的用到的地方可以调整成不用 namespace 的,个人更偏好 A_B_C 这种全名的.” 看到这里我就直接懒得看你的项目了,管你有多牛多厉害。 2022 年了…… |
11
heguangyu5 OP |