IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 对Zend5.6加密的php文件进行解密 -> 正文阅读

[PHP知识库]对Zend5.6加密的php文件进行解密

0x01 解密环境搭建

操作系统:Ubuntu-20.04.1 x86_64
先前往github下载以下两个项目文件:

xcache可以用第一个项目编译好的
地址:https://github.com/Tools2/Zend-Decoder/releases/download/0.1.1/xcache_x86-64.so

下载好这两个项目后,将以上两个项目进行解压:

$ unzip Zend-Decoder-master.zip
$ unzip xcache-master.zip

当解压完这两个项目后,在执行如下命令安装php:(php5.6)

$ sudo add-apt-repository ppa:ondrej/php -y
$ sudo apt-get update -y
$ sudo apt-get install php5.6-dev -y

如果下载Zend-Decoder项目中编译好的xcache.so文件,下面的编译可以不用进行
当安装好php后,在前往xcache目录进行xcache的编译:

$ cd xcache-master

当终端位于xcache目录时,执行下面命令:

注意:其中xcache.patch文件是Zend-Decoder-master项目中的

$ patch -p1 < ../Zend-Decoder-master/xcache.patch

在这里插入图片描述然后在执行下面命令:

注意:如果上面php5.6-dev没有安装上,这里的phpize是无法执行的。

$ phpize
$ ./configure --enable-xcache-disassembler

在这里插入图片描述在这里插入图片描述

$ sudo make

在这里插入图片描述
make后如果和上图相似,没有error等信息,即位make完成。
如果xcache编译失败,可以下载Zend-Decoder项目releases下的xcache_x86-64.so
当xcache编译或者下载Zend-Decoder项目中编译好的后,下面还需要前往zend官网下载ZendGuardLoader.so文件,下载方式如下:
zend下载:https://www.zend.com/downloads/zend-guard-loader
FAMILY选择:LInux
PLATFORM选择:Linux 64-bit (这里根据个人ubuntu位数进行选择)
VERSION选择:7.0.0(PHP 5.6)

在下载的时候会让你填写邮件等信息,随便填写即可。

在这里插入图片描述
下载好后,文件名为zend-loader-php5.6-linux-x86_64_update1.tar.gz
然后对其进行解压:

$ tar -zxvf zend-loader-php5.6-linux-x86_64_update1.tar.gz

然后前往其目录:

$ cd zend-loader-php5.6-linux-x86_64/

在这里插入图片描述
然后将其中的ZendGuardLoader.so文件复制到php的lib中:

$ sudo cp ZendGuardLoader.so /usr/lib/php/20131226/

然后在将xcache.so文件也复制到该目录下:

如果是自己编译的xcache,那么这个so文件在xcache-master/modules目录下

$ sudo cp xcache.so /usr/lib/php/20131226/

在这里插入图片描述
确保/usr/lib/php/20131226/目录下存在xcache.soZendGuardLoader.so文件,下面在php.ini中编写如下代码:

最好使用vim打开php.ini文件,因为可以使用G跳到文件末尾处。

$ sudo vim /etc/php/5.6/cli/php.ini

// 添加内容如下:
[Zend]
extension=xcache.so
zend_extension = ZendGuardLoader.so
//:wq 保存退出vim编辑器

在这里插入图片描述
当这一步配置好后,在终端执行php,查看是否存在报错信息:
在这里插入图片描述
如果如上图没有保存信息,说明部署完成。
如果出现如下图信息说明在复制两个so文件的时候没有复制对位置或者复制少了,具体看报错给予的信息:在这里插入图片描述

0x02 文件解密:

然后在前往Zend-Decoder项目目录,然后使用php执行其项目中的index.php文件进行解密:

// 如这里我对上一级目录的Kernel.php进行解密
$ php index.php ../Kernel.php

在这里插入图片描述
Kernel.php原始数据:
在这里插入图片描述
在这里插入图片描述
在线网站识别的加密版本。

0x03 批量解密:

这里是我写的一个批量解密的python脚本,这个脚本会将需要解密文件所在目录进行遍历,对加密的php文件进行解密,非加密或非php文件进行复制,并且会将其目录结构也一并复制过去:
脚本在使用的时候,需要在该脚本目录下创建两个目录,一个是source,另一个是destination,其中source目录是放入你需要解密的文件或者目录,destination目录是解密后文件的存放位置。

# !/usr/bin/python
# -*- coding:utf-8 -*-
# __Author__: VVzv
import os
import shutil


decode_php_file_path1 = "index.php"
decode_php_file_path2 = "index2.php"

def dirExist(des_file):
    file_dir = "".join([i+"/" for i in des_file.split("/")[:-1]]) 
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)

def fileFilter(src_file_dir, des_file_dir):
    src_file_list = []
    for root, dirs, files in os.walk(src_file_dir):
        for file in files:
            filename = os.path.join(root, file)
            if os.path.splitext(file)[1] == '.php':
                src_file_list.append(filename)
            else:
                des_filename = filename.replace(src_file_dir, des_file_dir)
                dirExist(des_filename)
                shutil.copy(filename, des_filename)
    return src_file_list

def decoder(filename):
    # <?php @Zend;
    cmd1 = "php {} {}".format(decode_php_file_path1, filename)
    cmd2 = "php {} {}".format(decode_php_file_path2, filename)
    print("\033[36m[*] 正在进行解密:{}".format(filename))
    save_name = filename.replace("source", "destination")
    info = os.popen(cmd1).read()
    if "<?php @Zend;" not in info and "file not foud!" not in info:
        dirExist(save_name)
        with open(save_name, "w") as f:
            f.write(info)
    else:
        info = os.popen(cmd2).read()
        if "<?php @Zend;" not in info and "file not foud!" not in info:
            dirExist(save_name)
            with open(save_name, "w") as f:
                f.write(info)
        else:
            shutil.copy(filename, save_name)
            print("\033[35m[-] 解密失败[{}]\033[0m".format(filename))


if __name__ == '__main__':

    f_list = fileFilter("source", "destination")
    for f in f_list:
        decoder(f)

如我有一个www目录,其中的php文件采用的是zend5.6加密的,其该目录是一个网站目录,那么这时,只需要将这个www目录复制到source目录中,然后执行脚本即可:
如其结构如下:
在这里插入图片描述
然后运行脚本:
在这里插入图片描述
解密完成后,destination目录结构如下:
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:02:46  更:2022-03-30 18:04:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 7:51:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码