iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php源代码保护——PHP加密方案分析&解密还原
  • 949
分享到

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

phpide开发语言 2023-08-31 22:08:32 949人浏览 薄情痞子
摘要

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

前言

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

成功还原源代码

自动化通用解密

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

 #include "php.h"#include "ext/standard/info.h"static zend_op_array * ( * old_compile_string )( zval * source_string , char * filename TSRMLS_DC );static zend_op_array *evalhook_compile_string ( zval* source_string ,char* filename TSRMLS_DC )  {if ( strstr ( filename , "eval()'d code" )) {printf ( "\n------eval-------\n%s\n------eval-------\n" , Z_STRVAL_P ( source_string ));}return old_compile_string ( source_string , filename TSRMLS_CC );}PHP_MINIT_FUNCTioN ( evalhook ){return SUCCESS ;}PHP_MSHUTDOWN_FUNCTION ( evalhook ){return SUCCESS ;}PHP_RINIT_FUNCTION ( evalhook ){old_compile_string = zend_compile_string ;zend_compile_string = evalhook_compile_string ;return SUCCESS ;}PHP_RSHUTDOWN_FUNCTION ( evalhook ){zend_compile_string = old_compile_string ;return SUCCESS ;}PHP_MINFO_FUNCTION ( evalhook ){php_info_print_table_start ();php_info_print_table_row ( 2 , "eval hooking" , "enabled" );php_info_print_table_end ();}zend_function_entry evalhook_functions [] = {ZEND_FE_END};zend_module_entry evalhook_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扩展。同样是使用aes des 异或等加密方法直接加密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文件长度 int 4字节 | expire 到期时间 int 4字节| entype 加密方式 int 4字节| 加密后文件|

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

跟入beast_get_encrypt_alGo

2对应的是 aes_handler_ops

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

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

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

自动化通用解密

编写php扩展 HOOK zend_compile_file函数

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

opcode

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

还原代码

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

附录

PHP扩展编译

Docker run -it --rm -v /mnt/hgfs/tmpssd/php-eval-hook/:/ext/ php:5.6 /bin/bashapt-get update apt install libtool 
phpize 

phpize 生成Makefile

./configure --enable-evalhook 

配置编译选项 启用扩展

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

php -d extension=扩展位置 -f 文件 

可以重复使用-d extension 加载多个扩展

总结

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

来源地址:https://blog.csdn.net/text2204/article/details/128321649

--结束END--

本文标题: php源代码保护——PHP加密方案分析&解密还原

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

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

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

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

下载Word文档
猜你喜欢
  • php源代码保护——PHP加密方案分析&解密还原
    前言 php是一种解释型脚本语言.与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE) ,再由解释器(ZEND引擎)对中间代码进行解释运行 . 在php源代码的保护...
    99+
    2023-08-31
    php ide 开发语言
  • PHP代码加密/代码保护php-beast
    参考网址: GitHub - liexusong/php-beast: PHP source code encrypt module (PHP源码加密扩展) php-beast 加密 和 解密 详解_哈二王的博客-CSDN博客_php-be...
    99+
    2023-09-27
    php 开发语言
  • PHP在线加密SG11-SG14组件加密GoTo、DECK混淆多层加密-保护原创源码
    PHP解密PHP加密sg11加密sg11解密全网最厚道的SG11解密方法 sg11解密 php解密 SourceGuardian解密sg_load解密去除域名IP授权 众所周知,sg11加密的PHP文...
    99+
    2023-09-06
    php 开发语言 同态加密
  • Unity3D加密保护解决方案
    精锐5加密锁支持Unity3D代码及资源保护,并提供授权方案产品简介可使用Virbox Protector加壳工具对Unity3D代码进行加密。Unity3D使用开源mono C#语法,代码会编译到Assembly-CSharp.dll。可...
    99+
    2023-01-31
    解决方案 Unity3D
  • PHP源码的加密方法分享
    关于PHP PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。 PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HT...
    99+
    2023-09-07
    php 开发语言 加密 工具 服务器
  • PHP代码加密和扩展解密的示例分析
    这篇文章主要介绍了PHP代码加密和扩展解密的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法...
    99+
    2023-06-14
  • php源代码怎么加密部署
    要对PHP源代码进行加密部署,可以使用以下方法: 使用Obfuscator:使用PHP Obfuscator工具可以将源代码进行...
    99+
    2023-10-27
    php
  • Swoole Compiler 加密PHP源代码(简版)
    服务器:Linux ubuntu 5.11.0-34-generic #36~20.04.1-Ubuntu SMP Fri Aug 27 08:06:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux PH...
    99+
    2023-10-18
    swoole ubuntu linux swoolec
  • 如何理解Java通过加密技术保护源代码的方法
    这篇文章主要讲解了“如何理解Java通过加密技术保护源代码的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Java通过加密技术保护源代码的方法”吧!一、为什么要加密? ...
    99+
    2023-06-16
  • php源代码加密部署的方法是什么
    有几种方法可以加密和部署PHP源代码:1. 使用编译器或加密工具:可以使用编译器或加密工具,如IonCube、Zend Guard等...
    99+
    2023-09-14
    php
  • PHP代码加密和扩展解密实战
    目录实战开始1.下载源码2.解压3.进入源码目录4.修改自定义文件头header.c5.修改默认的加密key6.为了安全机制,开启绑定网卡选项加密代码注意事项部署安装方式优缺点安全性...
    99+
    2024-04-02
  • 如何描述Python代码加密中源码保护的pyc文件字节码
    如何描述Python代码加密中源码保护的pyc文件字节码,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。pyc文件'字节码'关于Python代码加...
    99+
    2023-06-17
  • PHP代码被加密,自己无法解密怎么办
    如果您的PHP代码被加密且您无法解密,可以尝试以下几个解决方案:1.联系原开发者:如果您不是代码的原作者,但有合法的使用权,请尝试联...
    99+
    2023-09-08
    PHP
  • PHP加密解密函数实现数据传输的安全保护功能
    PHP加密解密函数实现数据传输的安全保护功能随着互联网的快速发展和应用的普及,数据的安全性问题变得尤为重要。很多网站和应用程序需要在客户端和服务器之间传输敏感数据,如用户密码、银行账户信息等,为了保护这些数据的安全,一种可行的方法是使用加密...
    99+
    2023-11-20
    数据传输 安全保护 PHP加密解密函数
  • 总结常见的PHP加密解决方案
    随着互联网的不断发展和深入,网站变得越来越普及。同时,由于信息安全的重要性日益增加,越来越多的网站采用了加密技术来确保数据的安全性。PHP作为一种广泛使用的服务器端脚本语言,也不例外。本文将介绍一些PHP加密解决方案,以帮助您保护网站的信息...
    99+
    2023-05-14
  • PHP代码审计入门-万能密码入门分析
    0x00  写在前面 从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,数据库是navicat,需要有简单的html基础和php基础,跟随流沙前辈视频学习记录。 本章开始,正...
    99+
    2023-10-22
    php 网络安全
  • 深入解析与案例分析:PHP的七项代码规范原则
    PHP代码规范七大原则详解与案例分析 引言PHP是一种广泛使用的开源脚本语言,在互联网应用开发中被广泛应用。而良好的代码规范对于提高代码质量、可读性和可维护性至关重要。本文将介绍PHP代码规范的七大原则,并通过案例分析来进一步理...
    99+
    2024-01-15
    案例分析 PHP代码规范 七大原则
  • PHP gPRC 源码分析:深入了解 gPRC 的底层原理
    gRPC 简介 gRPC 是一种现代 RPC 框架,它建立在 HTTP/2 和 Protocol Buffers 之上。它提供了高性能、低延迟的 RPC 服务,广泛应用于各种系统中。 PHP gPRC 源码分析 PHP gPRC 源码托管...
    99+
    2024-02-19
    PHP gRPC 源码分析 底层原理
  • 揭示 PHP 自动加载的秘密:解锁代码的潜力
    PHP 自动加载的内幕 PHP 自动加载是一种机制,它允许在需要时自动加载类和函数,而无需显式地包含它们。这种方法通过消除非重复、错误处理和命名空间兼容性等各种痛点,极大地简化了代码维护。 spl_autoload_register()...
    99+
    2024-03-01
    PHP 自动加载、spl_autoload_register()、命名空间、PSR-4
  • 阿里云服务器ssh登录密码错误原因分析与解决方案
    本文将探讨阿里云服务器ssh登录密码错误的问题,分析其可能的原因,并提供相应的解决方案。 在使用阿里云服务器的过程中,有时可能会遇到ssh登录密码错误的问题。这个问题可能会导致无法正常连接到服务器,从而影响到服务器的使用。那么,到底是什么原...
    99+
    2023-11-17
    阿里 解决方案 错误
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作