BluePage通用分页类助开发者提高开发效率
刚刚在PHP群内和大家聊天,应承了大家要写一个关于如何实现PHP源码加密的文章,借着这会QA在冒烟的机会,就这个问题,我写点思路。 我以前的文章介绍过,ZE(Zend engine)执行一个PHP脚本会经历编译->执行,只不过它每次执行都会去重新编译PHP文件。并没有实现编译和执行分离。 在ZE的编译和执行阶段,有俩个重要的函数: ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC); 和 ZEND_API void (*zend_execute)(zend_op_array *op_array TSRMLS_DC); zend_compile_file负责将要执行的脚本文件编译成由ZE的基本指令序列构成的op codes,然后将op codes交由zend_execute执行,从而得到我们脚本的结果。 所以,我们完全可以通过修改默认的zend_complie_file和zend_execute来实现,PHP的执行和编译分离,进一步,我们还可以再这个基础上实现,对我们脚本的加密和解密。 我们通过一个PHP扩展模块来实现这个功能,首先,我们需要在模块初始化的时候: PHP_MINIT_FUNCTION(sample) 在我们的my_compile_file中,判断我们的文件是否是编译过的文件,假设后缀名是*.ze。 static zend_op_array *my_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) op_array = old_compile_file (file_handle, type TSRMLS_CC); //调用默认的compile,截获输出 这样,我们就实现了,对已经编译文件的支持,和对文件编译的支持。 然后,需要编写我们的执行函数: static void my_execute(zend_op_array *op_array TSRMLS_DC) 也许你要问为什么要包装以后的执行函数,呵呵,我只是为了说明,一种方式,就是可以截获这个东东而已。有什么用?就看读者你有什么要求能通过这个方式实现了: )。 写到这里,你也许就明白了,如果想要对文件加密,那么就定义个加密文件类型,比如*.zec,然后在my_compile_file中,判断文件类型,如果是加密文件,那么就执行解密,嘿嘿,简单吧? 至于怎么加密,那就要问你自己了,你想用什么方式,但是,记住,要可逆的哦~~^_^。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |