有了phpsrc内核的源码之后,可以做什么事情?phpsrc内核的源码,其实是基于zend框架的c语言。这东西的编程和php其实是没有啥关系了。所以,以为php写的好?就一定能够搞定phpsrc内核么?显然是不成立的。因为这个已经是另外一门语言(c语言)的范畴了。

苏南大叔:php内核编译,用于php内核编译的zend函数有哪些? - zend-compile
php内核编译,用于php内核编译的zend函数有哪些?(图2-1)

大家好,这里是苏南大叔的"程序如此灵动"博客,这里讲述苏南大叔和计算机代码的故事。本文中,将要讲述在phpsrc中两个可以用于拦截的函数,分别是:zend_compile_stringzend_compile_file。测试环境:win10phpsrc@7.2。主要被操作的文件是:zend/zend_language_scanner.c文件。虽然被测试的phpsrc代码很古老,但是原理是一致的。

写在前面

zend_compile开头的函数,理论上都可以用于拦截挂载。但是,由于学艺不精,目前苏南大叔仅仅尝试了上述两个函数,分别是:zend_compile_stringzend_compile_file。(具体的代码里面可能会省略zend字样,具体问题请具体分析)

苏南大叔:php内核编译,用于php内核编译的zend函数有哪些? - zend-language-scanner
php内核编译,用于php内核编译的zend函数有哪些?(图2-2)

通过对phpsrc源码的更多理解,可能会有更合适的拦截点位置,这个可以保持持续关注。

拦截点一,zend_compile_string

zend内置的函数zend_compile_string,可以用于拦截evalphp函数。这类php函数都具有的特点是:可以从字符串里面解析出php逻辑。这类函数有:evalassertcall_user_funccall_user_func_arraycreate_function等。

要拦截的关键函数是*compile_string,变量是:*source_string

newsn.net:这里是【作者】可见内容

拦截点二,zend_compile_file

zend内置的函数zend_compile_file,可以用于拦截其它扩展加工处理过的代码。在所有源码被还原,进而需要进入opcode环节的时候,进行拦截。
要拦截的关键函数:*compile_file,变量是:*file_handle

newsn.net:这里是【作者】可见内容

相关文献

总结

当然了,本文破解方式也不是万能的,目前有一款收费的扩展xload,并没有被解开。但是从单独调试php走向上可以得到一些线索,暂留坑。

phpsrc源码是基于c语言的,编译过程是比较痛苦的。为了修改其中的某些函数,不断调试的话,也是需要很多的编程经验的。有关这方面的文章,苏南大叔决定设置个标签,叫phpsrc

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。