当前位置: 首页 新闻详细

如何把自己写的php源代码变成程序,就像windows下的计算器那样_百度知 ...php源代码保护——PHP加密方案分析&解密还原

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V:159999-78052 ,欢迎咨询php源代码编译成二进制,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、如何把自己写的php源代码变成程序,就像windows下的计算器那样_百度知...

PHP是编程语言和应用程序服务器的结合。PHP和其它的编程语言类似,使用变量存储临时数值,使用操作符处理变量。PHP的真正价值在于它是一个应用程序服务器。

当谈到应用程序服务器的时候,我是指一个把几个不同的技术组合为一个完整的套件的程序。这些技术包括:

*一个强壮的编程语言。

*存取数据库中存储的数据。

*支持Internet协议,尤其是电子邮件和HTTP协议。

注意:应用程序服务器有许多其它的特性,这里只列出了最基本的特性。

由于提供了这些多种不同技术的前端接口,PHP可以使工作变的很容易。

本章的其它部分讲述了有关PHP的许多繁杂资料,以及它在应用软件开发中起到的作用。

1.1起源

PHP是由RasumsLerdorf创建的,它开始是一个简单的用Perl语言编写的程序,用来记录RasumsLerdorf自己在线简历的访问者。以后它又被用C语言重新写过,范围扩大到访问数据库。在这期间,有许多人向RasumsLerdorf要此程序的拷贝,以便自己使用。RasumsLerdorf为此写了一些介绍此程序的文档,并发布PHPv1.0。以后,越来越多的人开始使用PHP,并强烈要求增加一些其他的特性,如循环语句和数组变量等。到这时,其他的一些程序员也开始参与PHP源码的编写(主要有ZeevSuraki和AndiGutmans),很明显,此时的PHP为了以后的发展,必须重新编写。因此,PHPv3.0就出现了。

1.2特性

PHP的特性包括:

*开放源码--所有的PHP源码都可以得到。事实上,所有的源码都包含在随书附带的光盘中。

*没有运行费用--PHP是免费的。

*基于服务器端--由于PHP是在Web服务器端运行的,PHP程序可以很大、很复杂而不会降低客户端的运行速度。

*跨平台--虽然本书是以Linux为重点介绍的,但PHP程序可以运行在UNIX,Linux,或者Windows操作系统下。

*嵌入HTML--因为PHP语言可以嵌入到HTML内部,所以PHP很容易学习。

*简单的语言--和Java和C++不同,PHP语言坚持以基本语言为基础,然而它的功能也强大到足以支持任何类型的Web站点。

*效率高--和其它的解释性语言相比,PHP系统消耗较少的系统资源。当PHP作为ApacheWeb服务器的一部分时,运行代码不需要调外部二进制程序,服务器解释脚本不需要承担任何额外负担。

*分析XML--用户可以组建一个可以读取XML信息的PHP版本。

*数据库模块--用户可以使用PHP存取Oracle、Sybase、MSSQL、AdabaseD、MySQL、mSQL、PostgreSQL、dBase、FilePro、Unixdbm、Informix/Illustra等类型的数据库,以及任何支持ODBC标准的数据库。

*文件存取--PHP有许多支持文件存取函数。

*文本处理--PHP有许多函数处理字符串,其中包括模式匹配的能力。

*复杂的变量--PHP支持标量、数组、关联数组等变量,这给用户提供了以支持其它的高级数据结构的坚实基础。

*图象处理--用户可以使用PHP动态的创建图象。

*更多的其它功能!

1.3PHP需要花费多少钱?

PHP是免费的。所有的源码、文档都可以免费的复制、编译、打印和分发。用户的任何一个用PHP编写的程序都属于用户自己,可以按照自己的意愿进行处理,而不需要付任何版税。就PHP本身而言,用户可以无限制地发布自己编写的程序。

然而,有着很充分的理由,PHP并不是彻底的“公共领域”代码。如果PHP源码是完全的公共领域代码,很可能就有人对PHP的源码做很小的修改,然后编译并出售--换一句话说,从它的创作者中脱离出来。但从另一方面说,如果不公布源码,很难使想使用它的用户感到放心。

GNU通用公共许可是一种发布免费软件的方法,它可以避免其他人占有你的劳动成果。在符合GNU许可的条件下,源码可以自由地发布,并且任何一个人都可以使用,但是任何来源于此代码的程序必须以同样种类的许可方式发布。换句话说,如果用户从任何GNU许可下的源码中得到代码而编写自己的程序,用户必须给任何想得到源码的人共布自己的源码。

1.4PHP语言可以嵌入HTML中

当使用者使用经典程序设计语言(如C或Pascal)编程时,所有的代码必须编译成一个可执行的文件,然后该可执行文件在运行时,为远程的Web浏览器而产生可显示的HTML标记。但另一方面,PHP并不需要编译(至少不编译成可执行文件)。使用者可以把自己的代码混合到HTML中。例如,下面的代码将显示“Hello,world!”,PHP代码在下面以黑体字显示。

<HTML>

<HEAD><TITLE>Test</TITLE></HEAD>

<BODY>

<?PHP$string='world!';?>

<H1>Hello,<?phpecho$string?></H1>

</BODY>

</HTML>

PHP应用程序服务器(本书的主要写作目的)是紧密集成到ApacheWeb服务器中的,可以在一个程序内同时调用它们两个。当Web浏览器请求PHPWeb页面的时候,Web服务器的PHP部分将被调用进行解释。Web服务器在请求的Web页中寻找<?PHP...?>标记,并按要求执行这些PHP代码。

由PHP代码生成的输出将替代<?PHP...?>标记。例如,当PHP代码运行后,以前的Web页面将变成如下所示的内容:

<HTML>

<HEAD><TITLE>Test</TITLE></HEAD>

<BODY>

<H1>Hello,world!</H1>

</BODY>

</HTML>

注意,所有的PHP代码都消失了,仅仅留下了HTML语句。而由PHP代码生成的HTML语句在上例中以黑体的形式显示。

1.5PHP语言是在Web服务器端运行

当开发互联网应用程序时,很重要的一点是要清楚应用程序是在哪一端运行的。PHP总是运行在服务器端。不要嘲笑对这一点的强调。在以后考虑对应用程序某些特性进行规划时,有的人可能就会在应用程序在哪里运行的这个问题上搞错,不要让自己也成为这些人中的一个。

由于Javaapplets,ActiveX,或javascript都是运行在客户端的Web浏览器中的,因此PHP不能直接和它们进行比较。然而可以很容易的将这些语言与PHP相结合在一起,使用PHP可以很方便地生成所需要的任何HTML代码,当然也就能激活Javaapplets和ActiveX控件,还可以动态生成javascript语句。当对互联网应用程序开发还很陌生的时候,这也许没有什么意义,但是在读完这本书后,这一切就会变得十分清晰的了。

1.6PHP无处不在

无处不在是常使用的充满激情的词语,到1999年7月,将有60万左右的Web站点使用PHP,1999年夏天有关Linux和开放代码运动的大发展很可能使PHP团体有突破性发展。可以在站点上看到它的发展趋势图表。

此外,PHP邮件列表每天能收到大约80个电子邮件,每个月能收到大约2500个电子邮件,这说明PHP是一个非常活跃的开发团体。使用PHP的商业公司有以下几个,MitsubishiMotors、Volvo、RedHatSoftware、E*Trade、FirstUSABank、theSanFranciscoGiants和SanDiegoZoo等等。

1.7PHP和C或Java相似吗?

PHP程序和C程序有略微相似的地方,这是由于PHP来源于C、Perl和Java。一些对C语言来讲比较麻烦的方面(如处理字符串的技术),由于采用了和Perl相近的技术,在PHP中就不再是麻烦了。PHP中也不包括Java中的一些面向对象特性。

PHP能很好地处理某些低级的任务,如果代码需要运行的特别快,可以很方便的使用C为PHP程序编写模块。

1.8PHP比ColdFusion、ActiveServerPage或JavaServerPage更好吗?

以流行的商议方式,我总是回答,“可以是,也可以不是”。

回答是,是由于它的费用(免费)以及可以通过邮件列表、IRC而在世界范围内有广泛的支持网络。同时PHP还在不断地发展着,如果想要一个PHP现在没有的特性时,请等待几个月,就有人很快为PHP编程而加上此种特性。

回答不是,是由于商业软件有比PHP更多的特性。例如,Allaire'sColdFusion有一个已证实可靠的搜索引擎组件。微软的ActiveServerPage技术提供了与Outlook、电子邮件和工作组程序相结合的能力。JavaServerPage让使用者可以使用互联网上的大量开放源码模块。

1.9总结

二、uduntu系统里面的PHP程序如何加密

PHP源代码加密目前一般有以下几种方式:

1、去掉一切空格、换行和注释,这样就降低了程序的可读性了。甚至还可以将程序中的变量都简化了,例如:$title变成$i11iii1i1i1i或者$o000o0o0等,基本上这样的程序就无法读了。

2、使用第三方扩展,例如C语言等通过使用ECB或者DES模式把代码编译成二进制字节码进行混淆,DeZend就是采用这种方式。

3、可以使用PHP本身的base64_enecode()进行编码,采用反复多次混淆代码、多次使用base64等算法混淆代码,最后使用EVAL函数输出的方式。

php源代码保护——PHP加密方案分析解密还原

2022-01-0619:08·IT野涵

前言php是一种解释型脚本语言.与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE),再由解释器(ZEND引擎)对中间代码进行解释运行.

在php源代码的保护在原理可以分为3大类.

源代码混淆(编码)OPCODE混淆(编码)修改解释引擎(虚拟机)在部署上可以分为2大类.

无扩展有扩展下面分析下各种加密方案的实现方法

PHP加密方案分析无扩展方案源代码混淆

无限扩展的加密在一些小开发者比较常见。这种源代码保护方式侵入性小,无需对服务器做额外的配置,兼容性较强。

这种情况混淆后的源代码还原非常简单,可完全还原出源代码。有时连注释都会保留(x我觉得这种混淆都不能称之为加密基本流程压缩代码->混淆变量函数类名->使用简单函数和方法进行编码加密例:base64异或

【点击查看资料】或私信回复“资料”获取

手工解密

看到这种的php不要慌这种处理后的文件解密流程的变量和函数名使用了大量的非打印字符按照正常的流程就可以ctrl+alt+l快捷键格式化代码(这里使用的PhpStorm其他IDE格式化遇到特殊符号可能出问题这里提前调整好了文件编码)

这里有一个php的特性php中的base64遇到非base64表中字符会直接忽略不会影响解码注:PHP7遇到空字符可能会抛出error可以使用php5.6执行(这里有一个兼容性问题)遇到这种加密最简单的方法就是找文件中最后一步执行的函数直接把内容打印出来

这种编码方法最后一步肯定要使用eval执行还原后的php代码所以打印最后一个函数基本上php代码就会全部出来(x前面操作一大顿毫无卵用注:有保护方案也使用了call_user_func或call_user_func_array间接调用eval

成功还原源代码<?phpphpinfo();?>

自动化通用解密

PHP提供了强大的扩展功能可以直接通过编写php扩展hookeval相关函数获取执行的源代码HOOKphpzend引擎的zend_compile_stringzend_include_or_eval函数达到目的这里演示的是hookzend_compile_string函数

/*$Id$*/#include"php.h"#include"ext/standard/info.h"staticzend_op_array*(*old_compile_string)(zval*source_string,char*filenameTSRMLS_DC);staticzend_op_array*evalhook_compile_string(zval*source_string,char*filenameTSRMLS_DC){if(strstr(filename,"eval()'dcode")){printf("------eval-------\%s------eval-------",Z_STRVAL_P(source_string));}returnold_compile_string(source_string,filenameTSRMLS_CC);}PHP_MINIT_FUNCTION(evalhook){returnSUCCESS;}PHP_MSHUTDOWN_FUNCTION(evalhook){returnSUCCESS;}PHP_RINIT_FUNCTION(evalhook){old_compile_string=zend_compile_string;zend_compile_string=evalhook_compile_string;returnSUCCESS;}PHP_RSHUTDOWN_FUNCTION(evalhook){zend_compile_string=old_compile_string;returnSUCCESS;}PHP_MINFO_FUNCTION(evalhook){php_info_print_table_start();php_info_print_table_row(2,"evalhooking","enabled");php_info_print_table_end();}zend_function_entryevalhook_functions[]={ZEND_FE_END};zend_module_entryevalhook_module_entry={STANDARD_MODULE_HEADER,"evalhook",evalhook_functions,PHP_MINIT(evalhook),PHP_MSHUTDOWN(evalhook),PHP_RINIT(evalhook),PHP_RSHUTDOWN(evalhook),PHP_MINFO(evalhook),"0.0.1-dev",STANDARD_MODULE_PROPERTIES};ZEND_GET_MODULE(evalhook)

成功还原源代码

PHP扩展方案源代码混淆

使用php扩展的代码混淆和无扩展代码混淆比较相似,只不过是把代码还原过程从php代码转到了php扩展。同样是使用aesdes异或等加密方法直接加密php代码,HOOK翻译php的函数在翻译PHP文件前对文件进行解密操作。这种方案也可以完全还原出源代码。在无其他混淆和压缩时甚至还会保留注释。

手工解密

这里以beast为例.首先在php的扩展目录下找到beast.sobeast的加密方案会把加密key编译进扩展中.我们只需要寻找key就可以完成解密beast由于是开源项目.有现成的符号表和源码这使得反编译寻找key变得非常简单.但这样有点太简单了.所以这里演示的是在没有源码的情况下使用IDA分析解密流程.

首先在导入表找到zend_compile_file这个函数会将php文件翻译成opcode因此大部分php加密扩展都需要hook这个函数达到拦截php文件载入和替换php文件的功能

继续跟入发现有两个函数一般在这种php加密扩展设计时会对这个函数有两次操作:一个是在启动时hook这个函数,一个是在停止时恢复这个函数。继续跟入启动hook

显然文件处理逻辑在cgi_compile_file内

跟踪文件句柄decrypt_file函数的参数存在文件句柄所以这个函数应该就是文件解密函数

根据代码可以看出beast加密文件的结构|encrypt_file_header_sign文件头标记(不固定可修改)|reallen文件长度int4字节|expire到期时间int4字节|entype加密方式int4字节|加密后文件|

分析文件头发现该文件加密方式为02

跟入beast_get_encrypt_algo

2对应的是aes_handler_ops

使用了AES128ECB加密模式直接提取key参数内容长度刚好16位

到这一步就成功拿到了加密秘钥

使用拿到的KEY就可以解密PHP文件

自动化通用解密

编写php扩展HOOKzend_compile_file函数

beast的加密不会对php文件做额外的操作解密文件与加密前原文件完全一致php注释和原格式都会保留注意:这里扩展加载顺序问题建议直接修改php源码
Zendzend_language_scanner.cZEND_APIzend_op_array*compile_file

opcodephp会将源代码翻译成类似汇编的二进制中间操作码再交给zend引擎执行。之前的介绍的都是编译之前对php源代码的直接操作。这里是对opcode的操作,跳过翻译过程,直接把现成的opcode交给zend引擎执行(不同版本PHP引擎编译出的opcode可能会有兼容性问题)。这种php代码防护方法只能hookzend_execute拿到opcode。不可能直接得到原本的源码,只能通过反编译尽可能的还原源代码。大部分商业php保护方案都使用这种可靠的方案为基础_ZendGuard(zend)_SourceGuardian(SG)IonCube(IC)SwooleCompiler上面的方案有的还对zend引擎进行了魔改,使翻译出的opcode只能在修改后的引擎执行,进一步增强了安全性。

还原代码

hookzend_execute拿到opcode使用对应版本的php操作码反推php代码太菜了不会反编译)

私信回复“资料”获取以下:

1、200多本网络安全系列电子书
2、全套工具包
3、100份src源码技术文档
4、网络安全基础入门、Linux、web安全、攻防方面的视频
6、网络安全学习路线
7、ctf夺旗赛解析

附录PHP扩展编译?

dockerrun-it--rm-v/mnt/hgfs/tmpssd/php-eval-hook/:/ext/php:5.6/bin/bashapt-getupdateaptinstalllibtoolphpizephpize生成Makefile

./configure--enable-evalhook配置编译选项启用扩展

最后执行make编译扩展编译好的扩展会放在./modules/目录下使用扩展

php-dextension=扩展位置-f文件可以重复使用-dextension加载多个扩展

总结在选用PHP源码保护方案时尽量选择opcode或虚拟机方案源代码混淆类只能对源代码获取和阅读增加一点困难在加密扩展可被攻击者获取到时并不能起到保护作用

【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板

电话+V:159999-78052

机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

php源代码编译成二进制
发布人:lrs9283780 发布时间:2024-09-13