代码加密+扩展解密实战

这种方案是通过对代码进行加密,然后利用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
};
  1. 修改默认的加密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,
};
  1. 为了安全机制,我们选择开启绑定网卡选项。修改networkcards.c文件,将MAC地址加进来。
char *allow_networkcards[] = {"替换成网卡的MAC地址", NULL,
};

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

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

  2. 安装完成后,修改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代码加密+扩展解密实战相关推荐

  1. PHP开发-知识积累-tonyenc-一款简洁、高性能、跨平台的 PHP7 代码加密扩展

    GitHub地址: https://github.com/lihancong/tonyenc 介绍 一个简洁.高性能.跨平台的 PHP7 代码加密扩展,当前版本为 0.2.2 特点 简单快速,经实测, ...

  2. 看我如何玩转PHP代码加密与解密

    参考文献: https://xz.aliyun.com/t/2403 前言 两次比赛,两个题目,两种方式,两个程序. 一切PHP的代码终究是要到Zend Engine上走一走的,因此一切PHP的源码加 ...

  3. Matlab P代码加密与解密

    需求 好多之前师兄师姐或其他前辈留下的matlab p代码,但是运行到现有研究中出现各种报错,师兄师姐也联系不上了,但是研究还得继续,但又不想重新来写,导师要求又很急,因此想到matlab简单加密的P ...

  4. PHP代码加密_解密

    <?php /* @名称:PHP加密/解密 @更新:2009年9月22日 20:23:47 */ function phpencode($code) {$code = str_replace(a ...

  5. 【夏曹俊23805】C++加密与解密-实战区块链核心密码学-基于openssl

    本章学习目标 在windows上使用vs2019编译OpenSSL ·使用vs2019编写第一个openssl项目 .ubuntu下编译OpenSSL3.0 ·编写第一个linux下OpenSSL项目 ...

  6. PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)

    一.大体流程图 二.PHP 项目文件加密 下表列出了Zend产品中的PHP版本及其内部API版本和Zend产品版本. 如何加密请往后看 三.如何使用 第一步:确认当前环境 Amai Phalcon 前 ...

  7. 加密扩展库 php,如何利Mcrypt扩展库进行加密和解密_php

    综述:Mcrypt 2.4.7是一个功能强大的加密算法扩展库,它包括有22种算法,其中就包括下面的几种算法: Blowfish RC2 Safer-sk64 xtea Cast-256 RC4 Saf ...

  8. go md5加密解密_PHP 代码加密实践

    在我们开发的项目中,有一部分可能是用于商业用途,会部署在客户提供的机器环境中.因为 PHP 本身是解释型语言,所以未进行处理的代码,就会有泄露或被修改的风险.那么我们可能会想到最简单有效的方法就是进行 ...

  9. 北风网--网络安全系列课程之网络攻防全面实战(涉及加密、解密)

    讲师简单介绍:讲师龙飞为北风网网络安全领域讲师,讲师曾经先后在国内各大网站,如黑鹰.甲壳虫之类的黑客网站从事网络安全教育!本系列课程由龙飞讲师主讲,共60课时,全面讲述网络安全方面各大知识,是一个不错 ...

最新文章

  1. ADC中宽带巴伦的使用
  2. 小型企业Exchange server 2010高可用性方案要注意咯!
  3. Python(3) 进制转换
  4. 有赞统一日志平台初探
  5. 伪元素::before与::after的用法
  6. selenium python文档_selenium+python实现百度文库word文档抓取
  7. M1 Max 暴击,倚天补刀
  8. 图解MySQL的各种 JOIN,看完不懂来找我!
  9. 新版iTunes如何设置手机铃声
  10. 背篼酥课堂第九课--前端知识、APP知识
  11. Windows下如何批量重命名
  12. TSW(Tencent Server Web)源码阅读指南
  13. 国仁网络资讯:微信视频号怎么给自己账号精准定位;账号定位又分为哪些类?
  14. cpp c++ 11/14/17
  15. 都在夸Vue文档简洁易懂?官方文档编写指南了解一下
  16. Tomcat 优化
  17. 你的梦想,是复制别人的么?
  18. Tian Ji -- The Horse Racing(贪心+STL)
  19. 树莓派(4B)之声音传感器
  20. http://blog.sina.com.cn/s/blog_5da93c8f0102w86x.html

热门文章

  1. ①html画桃心两种实现
  2. hashlib模块学习
  3. Java自动化测试(回写与断言 17)
  4. 适用于Android的最佳免费待办事项列表应用程序以及如何使自己成才
  5. Php目录结构解析,深入理解PHP之源码目录结构与功能说明
  6. e3d教程做logo教程_非标自动化设计教程精选:电池侧面logo制作全自动丝印机
  7. php四舍五入向下,向上/向下取整及四舍五入(PHP和javascript)
  8. java大魔王,Java编码规范 - 春哥大魔王的博客的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. linux mnt目录清理,linux下mnt目录作用详解
  10. 马云的新零售时代玩法,你懂多少?