准备升级一个开源的 php 加密扩展 跪求破解高手打脸

2016-06-21 10:50:53 +08:00
 rekulas

基于据说日本人写的 php screw
然后进行了些修改,为了区分暂时命名为 screw plus 然后做了以下改进
增加了批量加密
升级了加密算法,更加安全可靠
加密函数是用的网上找的基于 php 的 authcode 算法,然后稍微进行了些小优化
加密的优点:
可防止源码泄露,别以为 vps 就绝对安全了,我有个朋友的 vps 就被工作人员直接破解了,原因是另一个客户记错了 ip ,没核对信息就。。。
商业源码可加密核心功能,只开放接口给客户
部分公司需要团队开发的,可防止源码泄露
其他。。。我编不出来了
下面是演示对比:
PHP 原生代码:

screw 加密:

screw plus 加密:

之所以要用扩展来加密是因为这是最安全的方法,不需要扩展的加密都是可以破解的,唯一不同的就是破解时间的区别(当然,扩展加密也是可以破解的,但是破解时间不是破解者所能承受的毕竟没人能活几万年)

有兴趣的朋友可以关注下,完全完成后我会上传到 github 和 oschina

有破解能力的可以尝试下破解以下 code 来打我脸,加密函数在这里 http://filedoc.s3.sinaapp.com/myfiles/cauthcode.c

code:

f83c0c86454591265c9f772eb499ea4a3+Mrn7H3huTwgitNLGtAZlrixw5BLaHDeoYUJR8xg3NgVz8wlTWYV0x9dgW7q6eRVexLVBWOipqQgK74mdMNe/fyx42uf607MUfpPLNiBNCtHbB8rnrnpxKqVXJVUu/83GVFfwOTrt4Bge3erdYUp38DyHgLXlKGevf4MW7SB1hwd9P1rsyDQHzvzxltBU9+fanOC5Vp+uuz4BhXJsnhJTlM8pRjEwfnH9D+KkxryKNnC0YwmCrGYWDODanCzyDOOjadr5GovnGyzPmhZjlSy6zSWX0OVjESSO+evaN4tB5V5WWqC0cjZTTfHIjFt5i5Gut8qpOM8oWKzCUd5B8NOwFoNsotlM6feRHQajRDOQiXURco1yvHeUGWT07mg9h+65jJxVxF0gx8OFQrxxFxMBXEUdzb9T6V6jwA8jcyjn2U8HESLo+t4YC8P//afy6yXicSeW1LGeLyng7RITLnFSPPxRHeuAMSBqvXhxXSbIv+HCLst/edoWUtBq09Ig0UXuLo1MWce/DuqDg2QHe9NQM4AVUE9VD2p0DTcmgrCDXRjufiSqzh2pPnWkw6yNUqp6SNSAGVSzrMm8OvoLKt6bwTB22FNAsI5ANlVvgRnth+sSeZ1FdTKOt0vQckMBgxLi2emm8V6PD6NQhlJisX0K21uySiQIZRMlNhAHGMgM6s7dYgGwQUNWfmrgTfNvLaA2BL7cRbLmb9BK2n+VI/fP4xY4NbvhtykImOVXTY9g8gyZqykbTo7WHwXleRl7qj6rIh7WZKmrn+IURZbm0lFd8g4YKs5kOcEDAlZequv2sAGMECLLx5qPSTnuUVTrDBGIWG5Uy4IsOnkeRBKMNN4L1UlT3jPygqc5Dd9axGcnvOM5FGZU/Xj7CBFtNwTkcBeUd40t2FiQ0ZgDy+rP7eRV5fCSosd2ol2bpzbbYQjjAASqz7duknPM+y8daSRIuvS83eJUe/5gIYDaJqNPgS1cl6L6feij1xiV4syZ4UD5byaZreMHKGTtdh5iGHjTakdje5Tt5OxoRr/JK74QqVaXDibUFQuZKAsGkrR3S3JgL//cPkvymSlVed355BZHPPMZ0x+0o3MFWkJZL5mSgHxmO6WzW34wMGIY8N/yhSgJflGElSgm61O1E8yYrOBD2UWmXr55WvcnivkemY4pLzAnQRn6tug89yseEELG46w87TIfes9zTtmr1/mogZzbGcjEU3j+kR8pLMSE03LtVp2QSxEHxepc6ngSxXiWugMyfWaOlTK+1X1AyN4IGvZBdkM7HEQx2iHGJ+yT2lEqrwiD0/yuD6T7pWOhTmx6W/UAdopciiUPraoeEJcAw7eSMOn1xZbq7SBgzzSAWcFXYoZZeejsSHZGSXWM+IXKzjJ6pTiuErPykMUvu698z7Cpb235f2vI0tIRE0UOKrnaGGgGVIJCORlpoccLKuzkNuU3HmNEKCfTL1QgsxWMNGgZlWKZsQWbYJNOj0xFUu12CUcwnpjB2faRh3CKXNZtOweKnLTfF/wgLHA7tNs4mZydLxad4dwkvfXl69bn3K+D7NRT22BYbnACbGODFQTZ+dWi033YbXr/bPAwULVnWh56DC/Q2NFKzQYND+gML/8IqSNq4g+rCGzziNtysV0IIpNdptoLcH9GB/fEQkpfHPS1Bh/wTG
14538 次点击
所在节点    程序员
56 条回复
leopku
2016-06-21 11:09:45 +08:00
沙发支持
pyengwoei
2016-06-21 11:26:17 +08:00
楼主给个联系方式吗
rekulas
2016-06-21 11:30:57 +08:00
@pyengwoei cTc4MjYxMzAyOA==
base64
shuax
2016-06-21 11:31:35 +08:00
难道不是应该把扩展丢出来吗。
m3
2016-06-21 11:45:24 +08:00
mark
zhangfan
2016-06-21 11:53:06 +08:00
支持!
fcicq
2016-06-21 12:06:44 +08:00
重点不是加密啊, 而是你能不能实现一个能运行加密 OPCODE 的虚拟机. 否则必然还是有一个时间点在虚拟机里可以复原. 你的加密破不破没有意义.
rekulas
2016-06-21 12:12:30 +08:00
@shuax 还有点小工作 就这几天就丢出来,话说你是 shuax 的作者吗?我之前经常上你 blog ,就羡慕你这种压力小、技术好、有众多产品的程序猿
rekulas
2016-06-21 12:15:58 +08:00
@fcicq 那个难度太高了,目前来看只要 php 代码无法被破解就已经足够安全了

如果要防 vps 整体被破解的安全,我觉得只能修改 php 内核了,反正我这种小白是无实力的
rekulas
2016-06-21 12:22:14 +08:00
@fcicq 我觉得可以通过一些取巧的办法来预防,比如
解密必须要对应的扩展,把扩展放到仅限 root 和 php 访问的路径,当 vps 有任何用户登录后,需要提供更安全的有效凭证,不然扩展拒绝工作,同时检测 linux root 密码,如果被更改过也拒绝工作,除非重新编译
没有办法 100%防止,但能防绝大部分了
fcicq
2016-06-21 12:25:26 +08:00
@rekulas 你只是把可破解的钩子从语言层移动到了 C 的函数调用层. 所以没什么特别的, 确实如你所说你只有这个实力. 有加密的 OPCODE 也不是彻底方案, 因为重映射有可能仍然可行, 但这应当足以过很多传统杀毒软件了.
fcicq
2016-06-21 12:26:42 +08:00
@rekulas 你的防御方法用一个动态库链接就绕过去了.
breeswish
2016-06-21 15:31:19 +08:00
没理解错的话,这是对源代码的加密混淆?或者说这是加壳?以及使用的是自己设计的一套加密算法?
那么破解方式有几种:
1/ 在 Zend 层拦截解密后的代码
2/ 破解加密密钥
3/ 从密码学上找到加密算法的缺陷进行破解
lz3259
2016-06-21 16:23:58 +08:00
对源码进行字符串加密是没有任何意义的
q397064399
2016-06-21 20:26:07 +08:00
@rekulas 貌似没有意义吧,如果是 VPS 的话 在宿主机上面 dump 你的物理内存,分析出代码段应该压力不大,毕竟你的密文最后还是要被解析成 PHP 代码 copy 到内存里面被 php 解析器解析的
q397064399
2016-06-21 20:33:00 +08:00
你的想法应该是 在 php 里面
通过 php 的 eval(de_crypto("your_crypto_code"))
然后把 de_crypto 写成 php 解密扩展 对吧?
q397064399
2016-06-21 20:35:55 +08:00
如果是这样意义不大, eval 函数应该是在内存里面开辟一道连续的内存区域,这样 VPS 宿主机 dump 然后稍微分析下,你源代码就出来了
rekulas
2016-06-21 20:36:53 +08:00
@fcicq 这个确实容易被绕过,不过还有个办法,把扩展和环境绑定,用环境变量计算出 hash 然后作为 key 进行加密,这样必须拷贝整个 vps 才有可能进行下一步的破解工作,难度就更加大了

@breeswish 确实是源代码的加密,运行时动态解密执行, 2 和 3 比较好解决,都可以通过使用更复杂的算法来解决, 1 从算法无法解决,但可以参考上条回复,极大的加大破解难度
rekulas
2016-06-21 20:39:31 +08:00
@lz3259
@q397064399 请参考 ioncube ,有市场就有需求,有需求说明有意义
假设这样一个场景,某团队开发了一套程序,因为一个 bug 导致被黑客下载了整站,然后源码全部泄露,如果加了密,那么简单的 web 入侵黑客是无法破解源码的。
rekulas
2016-06-21 20:42:07 +08:00
@q397064399 流程有点类似你说的,不过不是 eval 执行, eval 是无法执行所有的 php 代码的,是调用 php 的时候动态解密成源码返回给 zend 引擎,至于防 vps 破解可以看对 fcicq 的回复,只能增加破解难度,无法绝对防御

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/287240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX