广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP代码加密和扩展解密实战
  • 522
分享到

PHP代码加密和扩展解密实战

2024-04-02 19:04:59 522人浏览 安东尼
摘要

目录实战开始1.下载源码2.解压3.进入源码目录4.修改自定义文件头header.c5.修改默认的加密key6.为了安全机制,开启绑定网卡选项加密代码注意事项部署安装方式优缺点安全性

这种方案是通过对代码进行加密,然后利用C语音写解密的PHP扩展。破解难度会有提升,但依然是会被破解的。
从网上找过各种代码加密的开源方案。
一旦开源,就不可能保证安全性。毕竟加密和解密的东西都是公开的。
目前我们没有能力自己去写扩展。还是需要采用开源的方案。
我找到的比较好用的是php-beast。
https://GitHub.com/liexusong/php-beast

实战开始

1.下载源码

wget Https://github.com/liexusong/php-beast/arcHive/master.zip

2.解压

unzip master.zip

3.进入源码目录

cd php-beast-master

4.修改自定义文件头header.c


char encrypt_file_header_sign[] = {
    0xe8, 0x16, 0xa4, 0x0c,
    0xf2, 0xb2, 0x60, 0xee
};

5.修改默认的加密key

这里选用的是AES加密。因此修改aes_alGo_handler.c文件,可以随机生成字符串替换。建议不要使用我测试时随便写的key。部署人员记得修改该key并保存。


static uint8_t key[] = {
    0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
    0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c,
};

6.为了安全机制,开启绑定网卡选项

修改networkcards.c文件,将Mac地址加进来。


char *allow_networkcards[] = {   "替换成网卡的MAC地址", NULL,};

开启绑定网卡以后,beast默认的网卡名字是eth0,如果你的网卡名字不是这个,后边需要将你的网卡名字加入到php.ini里。如:beast.networkcard = “eth0,eth1,eth2”。

使用phpize添加扩展
phpize
./configure
make install
如果有一步报找不到php-config错误的话,手动加上php-config的路径编译。

安装完成后,修改php.ini
extension=beast.so
重启php-fpm

到此为止,扩展安装完成。

加密代码

安装完 php-beast 扩展后,可以使用 tools 目录下的 encode_files.php 来加密你的项目。使用 encode_files.php 之前先修改 tools 目录下的 configure.ini 文件,如下:


; source path
src_path = ""

; destination path
dst_path = ""

; expire time
expire = ""

; encrypt type (selection: DES, AES, BASE64)
encrypt_type = "AES"

src_path 是要加密项目的路径,dst_path 是保存加密后项目的路径,expire 是设置项目可使用的时间 (expire 的格式是:YYYY-mm-dd HH:ii:ss)。encrypt_type是加密的方式,选择项有:DES、AES、BASE64。 修改完 configure.ini 文件后就可以使用命令 php encode_files.php 开始加密项目。

注意事项

步骤很多,但都是命令行。敲完命令就行了。
4,5,6是为了安全要做的。
绑定MAC地址以后,如果非绑定的MAC地址,重启php-fpm会无法启动,报错信息为NOTICE: PHP message: PHP Fatal error: Unable to start beast module in Unknown on line 0
failed
必须在绑定的网卡里才能加载生成的beast.so扩展。

部署安装方式

  1. 在目标机上安装扩展。装完扩展以后把php-beast-master目录的东西全部删除。
  2. 在部署的机子上也就是jenkins服务器上安装的扩展的目录不用删除,删除也行,记得备份第5步自定义的key。
  3. 在构建阶段执行自动化脚本执行php encode_files.php 加密代码。
  4. 在部署阶段将加密后的代码发布到目标机上。

优缺点

安全性

  1. 客户直接从目标机down下来代码,因为客户机上不知道加密的key,所以是无法正常解密和阅读的。
  2. 客户从目标机上down下来代码+beast.so扩展,因为绑定MAC地址的缘故,也是无法正常启动php-fpm的。基本上可以保证基本的安全

缺点

  1. 代码执行过程需要解密,有略微的性能损失。
  2. 自定义加密逻辑,可能有难度。毕竟C语音忘得差不多了。

可破解的方案

这里我只提供思路,因为加密后的代码需要正常被zend引擎解析,所以在最后zend引擎编译代码在过词法分析器和语法分析器时,代码已经是解密以后的代码。也就是在目标机上的zend引擎编译函数zend_compile_file里是可以得到解密以后的代码,可以修改该函数,在函数里将解密后的代码写入文件,即可拿到源码。 而我们并不需要关注加密的逻辑和加密的key。
听起来是不是很扯。如果我有了目标机的权限,也就相当于我可以通过修改zend引擎的编译逻辑来拿到源码。这样安全么?
讲道理,没有绝对的安全。
php-beast确实也是劫持的zend_compile_file方法,在代码到达zend引擎编译函数之前,完成解密的。
对于该类写扩展加密的情况,在拥有服务器权限的情况下。破解的难度可能就在于是否熟悉C语音和zend引擎的工作原理。
想要绝对的安全(绝对的安全应该是不存在的),只能是修改zend_compile_file的编译逻辑,也就是改zend引擎的底层逻辑。也就是swoole complier的思路了。不过swoole complier是对编译以后的opcode作了手脚,也就是zend引擎在执行opcode之前需要完成解密的,或者是在执行过程中动态解密。具体的不太了解swoole complier的思路。不过可以知道的是swoole complier需要技术底蕴深厚的人才能破解。
这样做就看是否值得了。

更安全一点?

在这样的情况下我们可以开启两层加密,第一层用ascii码127到255中间的乱码混淆PHP代码。第二层对乱码混淆的代码做加密。就是说即使他们登录上服务器修改了zend引擎的解析函数,拿到的也是混淆以后的乱码。想要还原成PHP代码还需要一定的时间。只是增大了破解的难度,但是对于有耐心的人,依然是可以破解,只是时间问题。

以上就是PHP代码加密和扩展解密实战的详细内容,更多关于PHP代码加密和扩展解密的资料请关注编程网其它相关文章!

--结束END--

本文标题: PHP代码加密和扩展解密实战

本文链接: https://www.lsjlt.com/news/124063.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP代码加密和扩展解密实战
    目录实战开始1.下载源码2.解压3.进入源码目录4.修改自定义文件头header.c5.修改默认的加密key6.为了安全机制,开启绑定网卡选项加密代码注意事项部署安装方式优缺点安全性...
    99+
    2022-11-12
  • PHP代码加密和扩展解密的示例分析
    这篇文章主要介绍了PHP代码加密和扩展解密的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法...
    99+
    2023-06-14
  • PHP7代码加密扩展详细介绍
    这篇文章主要介绍了PHP7代码加密扩展详细介绍,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。特点简单快速,经实测,几乎不影响性能兼容 OPcache、Xdebug 等其他扩展...
    99+
    2023-06-14
  • 详解PHP的Sodium加密扩展函数
    目录AEAD_AES_256_GCM 加解密信息签名Hash总结参考文档Sodium 扩展在 PHP7.2 后是跟随 PHP 源码一起发布的,只需要在编译的时候加上 --with-s...
    99+
    2022-11-12
  • android md5加密与rsa加解密实现代码
    代码如下: import java.io.UnsupportedEncodingException; import java.security.MessageDigest; ...
    99+
    2022-06-06
    加密 rsa md5加密 Android
  • Golang实现AES加密和解密的示例代码
    目录对称加密 AES 算法加解密文件加密解密说明对称加密 AES 算法 (Advanced Encryption Standard ,AES) 优点 算法公开、计算量小、加密速度快、...
    99+
    2022-11-13
  • python实现凯撒密码加密解密的示例代码
    凯撒加密就是通过将字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移,被替换成密文。例如,当偏移量是2的时候,所有的字母B将被替换...
    99+
    2022-11-11
  • android使用AES加密和解密文件实例代码
    前言最近公司需要对本公司的一些下载文件进行加密解密需求,也就尝试去实现下,其实需要借助第三方的jar包:bcprov-jdk15on-155.jar,下载这个可以到网上搜或者下载本人的demo即可,注意:需要加密和解密的key是一致的才可以...
    99+
    2023-05-31
    android aes 加密
  • shiro编码和加密代码详解
    涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。编码/解码 Shiro提供了base64和16进制字符串编码/...
    99+
    2023-05-31
    shiro 编码 加密
  • 国密sm2公钥加密 私钥解密java代码实现
    目录 一、引入jar包 二、生成秘钥对,加解密工具类 一、引入jar包 org.bouncycastle bcprov-jdk15on ...
    99+
    2023-10-21
    java 开发语言 安全
  • PHP代码被加密,自己无法解密怎么办
    如果您的PHP代码被加密且您无法解密,可以尝试以下几个解决方案:1.联系原开发者:如果您不是代码的原作者,但有合法的使用权,请尝试联...
    99+
    2023-09-08
    PHP
  • php源代码保护——PHP加密方案分析&解密还原
    前言 php是一种解释型脚本语言.与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE) ,再由解释器(ZEND引擎)对中间代码进行解释运行 . 在php源代码的保护...
    99+
    2023-08-31
    php ide 开发语言
  • springboot中request和response的加解密实现代码
    目录1、新建一个springboot工程,pom依赖如下2、自定义加密、解密的注解3、加密算法4、对请求数据进行解密处理5、对响应数据进行加密处理6、加解密的key的配置类,从配置文...
    99+
    2022-11-13
  • 国密SM2: 加解密实现 java代码完整示例
    目录  具体Java代码SM2算法加解密实现Demo: pom依赖引入 :  国家密码管理局于2010年12月17日发布了SM2算法,并要求现有的基于RSA算法的电子认证系统、密钥管理系统、应用系统进升级改造,使用支持国密SM2算法的证...
    99+
    2023-08-31
    java 算法
  • C++实现RSA加密解密算法是示例代码
    目录一、什么是RSA算法1.对称加密2.非对称加密3.非对称加密的应用二、RSA算法的基础操作步骤1.生成公钥和私钥2.用公钥加密信息 3.用私钥解密信息三、AC代码四、R...
    99+
    2022-11-13
  • Java实现Excel文件加密解密的示例代码
    目录概述示例大纲工具Java代码示例示例1加密工作簿示例2解密工作簿示例3加密工作表示例4加密工作表指定数据范围示例5设置工作表公式隐藏示例6解密Excel工作表概述 设置excel...
    99+
    2022-11-13
  • Java加密解密和数字签名完整代码示例
    常见的加密算法基本的单向加密算法:BASE64严格地说,属于编码格式,而非加密算法MD5(MessageDigestalgorithm5,信息摘要算法)SHA(SecureHashAlgorithm,安全散列算法)HMAC(HashMess...
    99+
    2023-05-30
    java 加密解密代码 数字签名
  • SpringBoot实现接口参数加密解密的示例代码
    目录1. 开发加解密 starter1.1 创建项目1.2 加密工具类1.3 响应工具类1.4 定义注解1.5 定义一个 EncryptProperti...
    99+
    2022-11-13
  • Java实现前端jsencrypt.js加密后端解密的示例代码
    目录1.什么是RSA2.RSA算法2.1 生成公钥和私钥2.2 使用公钥加密信息2.3 使用私钥解密信息4.RSA的应用:数字签名5.RSA的安全性6.为什么要写这文章7.前端代码8...
    99+
    2022-11-13
  • PHP中如何进行代码混淆和加密?
    PHP是一种流行的服务器端编程语言,广泛用于Web开发。然而,由于PHP代码易读易学,攻击者很容易对其进行攻击。为了加强PHP代码的安全性,可以使用代码混淆和加密技术。本文将探讨PHP中如何进行代码混淆和加密。什么是代码混淆和加密?代码混淆...
    99+
    2023-05-14
    PHP代码混淆 PHP代码加密 代码保护
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作