我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔编译php内核的主要目的就是研究php自动还原加密代码的可能性,所以,这里就测试了另外一款知名的开源加密扩展:php-beast。当然了,正常来说,这款扩展是在非win环境下编译使用的。但是,本文中,苏南大叔是在windows环境下编译的,配合最新的phpsrc@7.4.28进行的php-beast编译。

苏南大叔:windows环境下,如何源码编译php-beast插件? - php-beast-compile
windows环境下,如何源码编译php-beast插件?(图10-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述如何在windows环境下编译php-beast

测试环境:win10vs2017vc15phpsrc@7.4.28php-beast@2.7

对于windows环境下的php扩展文件,苏南大叔建议您:能下载就下载,能peclpecl,尽量别自己编译。太痛苦,而且失败的概率极大。根本不像在centos下编译php扩展那么容易。

下载源码

本文是基于phpsrc@7.4.28win10下进行编译的过程的,基本操作请参考下面的文章:

下载php-beast源码:

官方正版的php-beastwin环境下编译,会报错。所以,这里参考了下面的这个仓库,做了一些修改:

苏南大叔:windows环境下,如何源码编译php-beast插件? - php-beast-github
windows环境下,如何源码编译php-beast插件?(图10-2)

修改项目文件

添加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

苏南大叔:windows环境下,如何源码编译php-beast插件? - header-c
windows环境下,如何源码编译php-beast插件?(图10-3)

修改aes_algo_handler.c[仅仅是增加解密难度],修改key,目的是不让别人直接可解密:

苏南大叔:windows环境下,如何源码编译php-beast插件? - aes-c
windows环境下,如何源码编译php-beast插件?(图10-4)

修改des_algo_handler.c[仅仅是增加解密难度],修改key,目的是不让别人直接可解密:

苏南大叔:windows环境下,如何源码编译php-beast插件? - desc-c
windows环境下,如何源码编译php-beast插件?(图10-5)

修改networkcards.c[非必须],目的是生成的扩展只能在指定服务器上使用(待后续讨论):

char *allow_networkcards[] = {
    "fa:16:3e:08:88:01",
    NULL,
};

苏南大叔:windows环境下,如何源码编译php-beast插件? - network-c
windows环境下,如何源码编译php-beast插件?(图10-6)

自定义加密模块的教程(本文不涉及这部分内容):

编译过程

本文说的编译过程和官方的方式,不是很一致,仅供参考。

phpsrcdeps目录的同级,有个pecl目录,要编译的扩展文件夹【php-beast-master】就是放到这个位置的。如下图所示:

苏南大叔:windows环境下,如何源码编译php-beast插件? - beast-location
windows环境下,如何源码编译php-beast插件?(图10-7)

然后进入phpsrc目录,clean之后再重新设置configure参数:

nmake clean
buildconf

苏南大叔:windows环境下,如何源码编译php-beast插件? - conf-bat
windows环境下,如何源码编译php-beast插件?(图10-8)

查看一下--help

configure.bat --help

可以看到beast的相关选项了。

选项说明
--without-beastfor beast support
--disable-beastenable beast support
--enable-beast-debugenable beast debug mode
--disable-execute-normal-scriptenable 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目录之下。

苏南大叔:windows环境下,如何源码编译php-beast插件? - phpinfo-beast
windows环境下,如何源码编译php-beast插件?(图10-9)

修改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

苏南大叔:windows环境下,如何源码编译php-beast插件? - 加密效果展示
windows环境下,如何源码编译php-beast插件?(图10-10)

单独加密的话,也可以通过命令行进行传递,仅仅加密一个文件[不推荐,命令参数不一样]。例如:

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-Windowsreadme.md里面说,可以使用winhex查看php-beast.dll文件中的相关参数。这个方式,暂时没有试过,待续。

如果会phpsrc内核的编译的话,这里破解php-beast加密过的php文件,也是非常简单的事情。具体可以参考:

参考文献

综述

对于日常应用来说,改过参数的php-beast已经完全非常非常够用了,效果已经是非常好了。但是,由于代码流程的走向控制,目前这款php-beast扩展,即使更改过相关参数,从phpsrc源码级别上进行破解,也是非常容易的。

更多php扩展的故事,可以参考:

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

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   pecl    phpsrc