刚刚在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)
{
old_compile_file = zend_compile_file; //保存现场
old_execute = zend_execute;
zend_compile_file = my_compile_file; //截获
zend_execute = my_execute;
return SUCCESS;
}
在我们的my_compile_file中,判断我们的文件是否是编译过的文件,假设后缀名是*.ze。
static zend_op_array *my_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
{
if(strstr(file_handle->filename, ".ze") != NULL){
//是编译过的文件。直接返回文件内容.
}
zend_op_array *op_array;
op_array = old_compile_file (file_handle, type TSRMLS_CC); //调用默认的compile,截获输出
if(op_array){
//保存op_array;
}
return op_array;
}
这样,我们就实现了,对已经编译文件的支持,和对文件编译的支持。
然后,需要编写我们的执行函数:
static void my_execute(zend_op_array *op_array TSRMLS_DC)
{
old_execute(op_array TSRMLS_DC); //简单交由默认执行函数执行。
}
也许你要问为什么要包装以后的执行函数,呵呵,我只是为了说明,一种方式,就是可以截获这个东东而已。有什么用?就看读者你有什么要求能通过这个方式实现了: )。
写到这里,你也许就明白了,如果想要对文件加密,那么就定义个加密文件类型,比如*.zec,然后在my_compile_file中,判断文件类型,如果是加密文件,那么就执行解密,嘿嘿,简单吧?
至于怎么加密,那就要问你自己了,你想用什么方式,但是,记住,要可逆的哦~~^_^。
原文地址: http://www.wangchao.net.cn/bbsdetail_1887829.html
分享到:
相关推荐
首先,我们需要了解等边三角形的基本性质以及分离轴定理(Separating Axis Theorem,SAT)这一碰撞检测算法。 等边三角形是具有三条相等边和三个相等内角的三角形。在MATLAB中生成等边三角形,可以采用以下步骤: 1...
在本篇论文“用带限制签名的描述逻辑概念分离数据示例_Separating Data Examples by Description Logic Concepts with Restricted Signatures”中,研究者探讨了如何在存在本体的情况下,使用描述逻辑(Description ...
分离轴定理(Separating Axis Theorem,SAT)是计算机图形学中的一种几何算法,主要用于检测二维或三维空间中的多边形是否相交。在MATLAB中实现该定理,可以用于各种应用,如游戏开发中的碰撞检测、图像处理中的模式...
### ASP.NET - Module 4: Separating Code from Content #### 概述 在ASP.NET开发过程中,将代码与内容分离是一种常见的做法,它能够提高代码的可维护性、可读性和可重用性。本模块将详细介绍如何有效地实现这一...
在探究玉米秸秆皮穰分离...设备设计的创新点主要集中在提高玉米秸秆的利用率和降低环境污染风险上,通过实现秸秆的高效分离,进一步促进了生物质能源的开发和应用,对于农业机械化领域来说,这是一项重要的技术进步。
分离轴定理(Separating Axis Theorem, SAT)是该算法的核心理论。其基本思想是,如果两个多边形不相交,那么一定存在一个轴(线),沿这个轴看,两个多边形的投影不会重叠。换句话说,如果对于所有可能的轴,多边形...
To study the mechanism of separating pyrite and dolomite by flotation, the acting mechanisms of WHL depressor and the both minerals were studied by means of the measurements of thermogravimetric and ...
为了实现这一目标,论文开发了一种预处理的内点法来最小化正则化函数。内点法是一种优化算法,常用于求解大规模的凸优化问题,具有良好的数值稳定性。实施数字模拟测试表明,新算法在正确识别材料像素方面优于基础...
"Separating Axis Theorem"(分离轴定理)是一种广泛应用于2D刚体碰撞检测的理论。本教程将深入探讨如何扩展这一方法以实现更复杂的碰撞响应。 分离轴定理的基本思想是,如果两个对象不相交,那么存在至少一条直线...
"神经网络技术在ASTER影像中的土地表面发射率和温度分离" 基于ASTER影像,提出了一个神经网络技术来分离土地表面发射率和温度。该技术通过建立四个辐射传输方程式,涉及六个未知数(平均大气温度、土地表面温度和四...
By taking a simple, easy-to-follow approach to the high-level language of this topic and separating itself from 3D API's "Shaders for Game Programmers and Artists" brings the world of real-time ...
**分离轴定理(Separating Axis Theorem, SAT)** 分离轴定理是计算机图形学中用于检测3D和2D对象之间是否发生碰撞的一种重要算法。在2D环境中,这个理论尤其适用于处理多边形碰撞。SAT的核心思想是:如果两个对象...
Separating model and view, and avoiding common mistakes Mastering strategies and patterns for efficient, flexible design Ensuring predictable object collaboration via responsibility-driven design ...
标题《论文研究-特征分离变换与图像多分辨分析》涉及到了图像处理中的两个关键技术:特征分离变换(Feature-Separating Transform,简称FST)以及图像多分辨分析。描述中提到的研究是基于提升框架的第二代小波变换,...
leveraging both the sequential and random performance characteristics of the device. We demonstrate the advantages of WiscKey with both microbenchmarks and YCSB workloads. Microbenchmark results show ...
在数据库环境中,特别是大型数据库系统中,最小特权原则的应用通常是通过创建一个或一系列数据库管理员(DBA)角色来实现的,这些角色可以执行特定功能。然而,这些角色通常包含了对表的权限授予,当管理员被赋予...
1 Algorithms and Inference 3 1.1 A Regression Example 4 1.2 Hypothesis Testing 8 1.3 Notes 11 2 Frequentist Inference 12 2.1 Frequentism in Practice 14 2.2 Frequentist Optimality 18 2.3 Notes and ...
总结来说,阿里巴巴的藏经阁方案通过热冷数据分离和分层压缩技术,实现了在异构存储环境中对大数据的高效管理。这种方案不仅降低了运维成本,提升了查询性能,还充分考虑了业务的实时性和成本效益,为大规模数据存储...