首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ionCube是如何在内部工作的?

ionCube是如何在内部工作的?
EN

Stack Overflow用户
提问于 2016-10-03 05:46:34
回答 1查看 4.9K关注 0票数 6

ionCube以加密格式存储php文件,并作为php扩展名安装,但我想知道的是,当我从非加密的php文件请求加密的php文件时,php编译器如何执行它。

它是将加密的文件发送到ionCube服务器并获取原始文件并编译该文件,还是存在其他内容。

意味着我们的服务器和ionCube之间的通信是如何进行的。我想是通过卷发但我想知道它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 18:39:41

正如您现在可能已经了解到的,原始代码永远不会被获得,并且处理是基于字节码的。

以下是一些可能有帮助的高级信息。

PHP扩展

PHP有两种类型的扩展:模块扩展(如CURL,通常包装外部API并通过新的PHP函数公开其功能)和PHP引擎扩展。虽然区别不是固定的,但是引擎扩展倾向于与PHP的编译器和执行引擎交互,尽管它们也可能添加新的PHP函数。ionCube是一个引擎扩展,它还为其API添加了PHP函数,并支持ionCube24,但也可以使用dl()作为模块扩展安装。这两种模块都是共享库,使用php.ini文件中的一行来向PHP添加扩展名,PHP利用OS函数将库动态链接到正在运行的进程中。

Hooks

PHP有内部挂钩,允许扩展拦截源文件处理的编译和执行阶段。扩展可以简单地使用这些来执行常规处理之前或之后的附加步骤,或者完全替换通常的处理。PHP使用编译钩子在processing编译文件之前检查文件,如果文件是ionCube文件,则负责处理文件的任务。读取ionCube文件或正常编译的结果最终都是字节码,但是ionCube字节码是不标准的,对于版本9,在对文件进行初始处理后,由于其他原因,它仍然可能被加密或不可用。由于标准执行引擎无法处理ionCube字节码,如果从ionCube编码文件读取编译代码,加载程序还会使用执行钩子来接管编译代码的执行。Loader的另一个任务是允许为某些旧版本的PHP生成的文件在较新的版本上运行,并且在必要时Loader执行编译代码的动态转换,使其在运行的任何PHP版本上都可用。PHP内部的变化时有发生,最近的变化很大,在PHP 5和7之间也是如此,这对于最终用户体验来说是一项具有挑战性但很重要的任务。

处理ionCube文件不需要与外部服务器通信,但是,由于版本9,代码可以使用只有在运行时由PHP应用程序本身创建时才存在的加密密钥来保护,应用程序开发人员可以编写PHP代码,进行外部调用以获得数据,以便在需要时构造解密密钥。

编码文件

就文件本身而言,这种类型的早期PHP编码工具本质上是编译成字节码的,并将此表单直接序列化为文件。开发人员对PHP内部没有什么了解和兴趣,这种方法提供了良好的保护和出色的性能。当中国的一个黑客组织“蓝风”(BlueWind)在2006年前后首次出现对产生字节码反编译的兴趣时,简单地编译字节码显然已经不能接受了。在不同程度上,像ionCube这样的工具在字节码周围增加了更多的保护,从而阻碍了成功的逆向工程任务。尽管可以采取步骤限制反编译的有效性,即使恢复了字节码,但代码保护的成功仍然从根本上取决于隐藏必要的解码密钥的能力,而且这种类型的所有编码工具都将这样的密钥存储在编码的文件本身中。

在改进ionCube版本9的代码保护过程中,一个挑战是解决存储密钥的限制,在不静态存储所需解密密钥的情况下加密代码的能力是显而易见的和必要的下一步。这是作为一个称为“动态键”的特性添加的。

希望这能让我们了解ionCube和一些类似的工具是如何工作的。有关引擎扩展实现的更详细知识,我建议查看PHP的OpCache源代码和Derick。

披露:我与ionCube有关联。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39825228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档