windows环境下,如何源码编译php-beast插件?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔编译php
内核的主要目的就是研究php
自动还原加密代码的可能性,所以,这里就测试了另外一款知名的开源加密扩展:php-beast
。当然了,正常来说,这款扩展是在非win
环境下编译使用的。但是,本文中,苏南大叔是在windows
环境下编译的,配合最新的phpsrc@7.4.28
进行的php-beast
编译。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述如何在windows
环境下编译php-beast
。
测试环境:win10
,vs2017
,vc15
,phpsrc@7.4.28
,php-beast@2.7
。
对于windows
环境下的php
扩展文件,苏南大叔建议您:能下载就下载,能pecl
就pecl
,尽量别自己编译。太痛苦,而且失败的概率极大。根本不像在centos
下编译php
扩展那么容易。
下载源码
本文是基于phpsrc@7.4.28
在win10
下进行编译的过程的,基本操作请参考下面的文章:
下载php-beast
源码:
官方正版的php-beast
在win
环境下编译,会报错。所以,这里参考了下面的这个仓库,做了一些修改:
修改项目文件
添加win95nt.h
文件到扩展源码的根目录,目的是在win
环境下编译顺利通过。文件如下:
修改config.w32
文件,目的就是增加一个选项:
//...
ARG_ENABLE("execute-normal-script", "enable execute normal PHP script mode","yes");
if (PHP_BEAST != "no") {
//...
if (PHP_EXECUTE_NORMAL_SCRIPT != "yes"){
AC_DEFINE('BEAST_EXECUTE_NORMAL_SCRIPT', 0, 'disable execute normal PHP script mode');
}else{
AC_DEFINE('BEAST_EXECUTE_NORMAL_SCRIPT', 1, 'enable execute normal PHP script mode');
}
//...
}
修改header.c
[仅仅是增加解密难度],主要目的是不让别人能够识别出加密手段是beast
:
修改aes_algo_handler.c
[仅仅是增加解密难度],修改key
,目的是不让别人直接可解密:
修改des_algo_handler.c
[仅仅是增加解密难度],修改key
,目的是不让别人直接可解密:
修改networkcards.c
[非必须],目的是生成的扩展只能在指定服务器上使用(待后续讨论):
char *allow_networkcards[] = {
"fa:16:3e:08:88:01",
NULL,
};
自定义加密模块的教程(本文不涉及这部分内容):
编译过程
本文说的编译过程和官方的方式,不是很一致,仅供参考。
在phpsrc
和deps
目录的同级,有个pecl
目录,要编译的扩展文件夹【php-beast-master
】就是放到这个位置的。如下图所示:
然后进入phpsrc
目录,clean
之后再重新设置configure
参数:
nmake clean
buildconf
查看一下--help
:
configure.bat --help
可以看到beast
的相关选项了。
选项 | 说明 |
---|---|
--without-beast | for beast support |
--disable-beast | enable beast support |
--enable-beast-debug | enable beast debug mode |
--disable-execute-normal-script | enable execute normal PHP script mode |
本文这里设置的命令是:
configure --disable-zts --disable-all --enable-cli --without-beast --enable-execute-normal-script=yes --disable-beast=shared
beast
相关参数是:“--without-beast disable-beast=shared --enable-execute-normal-script=yes”。说实话,项目名称略显歧义。
最终在获得php.exe
的同时,在同级目录下获得php-beast.dll
文件一枚。如果是在nmake install
之后的话,这个dll
存在于ext
目录之下。
修改php.ini
即可使用。
extension = php_beast.dll
还可以在php.ini
中增加php-beast
的选项,不过默认的也是挺好的,这里可以参考phpinfo()
里面相关截图。
beast.cache_size = size
beast.log_file = "path_to_log"
beast.log_user = "user"
beast.log_level = "debug"
beast.enable = On
另外,编译的时候,关于选项--enable-execute-normal-script
。是用于设置是否执行普通的php
文件的,如果不允许执行普通的php
文件的话,额...这个服务器都是你的了...恭喜你...连黑客来了都要哭着离开...
加密解密文件
这个仍然是使用tools
目录进行加密和解密,tools
目录可以从php-beast-master
目录移动到任意位置。
批量加密代码的话,需要以下几个参数:
参数 | 说明 | 格式 |
---|---|---|
src_path | 是要加密项目的路径 | |
dst_path | 保存加密后项目的路径 | |
expire | 设置项目可使用的时间 | YYYY-mm-dd HH:ii:ss |
encrypt_type | 加密的方式 | 选项:DES、AES、BASE64 |
修改tools/configure.ini
文件:
; source path
src_path = "c:\php\code\"
; destination path
dst_path = "c:\php\code2\"
; expire time
expire = "2025-10-10 10:10:10"
; encrypt type
encrypt_type = "DES"
执行命令,这个就不支持命令行传递了,看代码里面显示,就是需要在tools/configure.ini
里面配置。
php tools/encode_files.php
单独加密的话,也可以通过命令行进行传递,仅仅加密一个文件[不推荐,命令参数不一样]。例如:
php tools/encode_file.php --oldfile a.php --newfile aa.php --encrypt DES --expire "2025-10-10 10:10:10"
解密命令没有,官方没有出解密命令。所以,请自己保存好加密前的文件。
php-beast
代码破解
php-beast-For-Windows
的readme.md
里面说,可以使用winhex
查看php-beast.dll
文件中的相关参数。这个方式,暂时没有试过,待续。
如果会phpsrc
内核的编译的话,这里破解php-beast
加密过的php
文件,也是非常简单的事情。具体可以参考:
参考文献
综述
对于日常应用来说,改过参数的php-beast
已经完全非常非常够用了,效果已经是非常好了。但是,由于代码流程的走向控制,目前这款php-beast
扩展,即使更改过相关参数,从phpsrc
源码级别上进行破解,也是非常容易的。
更多php
扩展的故事,可以参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
这种编译出来的beast好像在Apache下面不能使用吧?
php8下面生成了dll,但是开启扩展调用加密方法会报错PHP Fatal error: beast_encode_file(): Unable get codes from php file
请教下,知道怎么修改吗?我尝试根据编译报错提示去增加了定义等,编译生成dll了,但是用不了。对c不了解呢
php8下面你生成了dll?php7下面生成了dll的话,就在php.ini里面开启扩展就好了
请教下,能编译php8的php-beast.dll吗?
好像不行,需要改代码。