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知识库 -> PHP混淆加密+递归加密文件 -> 正文阅读

[PHP知识库]PHP混淆加密+递归加密文件

背景:因为我们要做saas私有化部署,所以考虑将部署在第三方机器上的代码进行加密

途径:网上找了一个PHP混淆加密sdk(enphp),此加密脚本也是用PHP写的

漏洞:有加密就有解密,漏洞肯定是存在的,比如我一眼就看出来一个:

? ? ?这个加密方式会将int类型的数字转换为16进制,那么同理,解密也是将16进制转换为10进制。

官方sdk地址:enphp_opensource: 一个开源加密混淆 PHP 代码项目

使用方式:可以点进链接看使用说明。其实很简单,传个参数就行。

更改sdk:因为sdk代码只能加密某个目录下的所有PHP文件,所以我要将sdk代码改为递归加密。话不多说,直接更改sdk里的code_test.php文件。

<?php
error_reporting(E_ERROR);
include './func_v2.php';
$_SERVER['starttime'] = microtime(1);
$starttime            = explode(' ', $_SERVER['starttime']);
$_SERVER['time']      = $starttime[1];

ob_implicit_flush(1);
$dir = __DIR__ . '/code_test/';

list_file($dir);

/**
 * 这个函数是我加的
 * 
 * 递归遍历文件夹加密
 *
 * @param $date
 */
function list_file($date){
    //加密目录下的文件
    en_php($date);

    //读取文件夹
    $temp = scandir($date);
    //遍历文件夹
    foreach($temp as $v){
        $a = $date . $v . '/';

        //如果是文件夹则执行
        if(is_dir($a)){
            //判断是否为系统隐藏的文件.和..  如果是则跳过否则就继续往下走,防止无限循环再这里。
            if($v=='.' || $v=='..'){
                continue;
            }
            //因为是文件夹所以再次调用自己这个函数,把这个文件夹下的文件遍历出来
            list_file($a);
        }
    }
}

/**
 * 将sdk的代码封装为函数 方便使用
 * 
 * 对某个目录下的PHP文件进行加密
 *
 * @param $dir
 */
function en_php($dir)
{

    $files     = glob($dir . '*.php');
    $gen_count = 0;
    chdir($dir);
    foreach ($files as $file) {
        echo "\r\n", str_repeat("===", 5), "\r\n\r\n";
        $target_file = $file;
        $target_file = str_replace('/code_test/', '/encoded/', $target_file);
        if (!is_dir($target_file)) {
            mkdir(substr($target_file, 0, strripos($target_file, '/')), 0777, true);
        }

        $options = array(
            //混淆方法名 1=字母混淆 2=乱码混淆
            'ob_function'        => 2,
            //混淆函数产生变量最大长度
            'ob_function_length' => 3,
            //混淆函数调用 1=混淆 0=不混淆 或者 array('eval', 'strpos') 为混淆指定方法
            'ob_call'            => 1,
            //随机插入乱码
            'insert_mess'        => 0,
            //混淆函数调用变量产生模式  1=字母混淆 2=乱码混淆
            'encode_call'        => 2,
            //混淆class
            'ob_class'           => 0,
            //混淆变量 方法参数  1=字母混淆 2=乱码混淆
            'encode_var'         => 2,
            //混淆变量最大长度
            'encode_var_length'  => 5,
            //混淆字符串常量  1=字母混淆 2=乱码混淆
            'encode_str'         => 2,
            //混淆字符串常量变量最大长度
            'encode_str_length'  => 3,
            // 混淆html 1=混淆 0=不混淆
            'encode_html'        => 2,
            // 混淆数字 1=混淆为0x00a 0=不混淆
            'encode_number'      => 1,
            // 混淆的字符串 以 gzencode 形式压缩 1=压缩 0=不压缩
            'encode_gz'          => 1,
            // 加换行(增加可阅读性)
            'new_line'           => 0,
            // 移除注释 1=移除 0=保留
            'remove_comment'     => 1,
            // debug
            'debug'              => 1,
            // 重复加密次数,加密次数越多反编译可能性越小,但性能会成倍降低
            'deep'               => 1,
            // PHP 版本
            'php'                => 7,
        );
        // encode target
        enphp_file($file, $target_file, $options);
        log::info('encoded', $target_file);

        $old_output = $output = array();
        // run encoded & old script
        exec('php -d error_reporting=0 "' . $target_file . '"', $output);

        exec('php -d error_reporting=0 "' . $file . '"', $old_output);

        $output     = implode("\n", $output);
        $old_output = implode("\n", $old_output);
        $old_output = strtr($old_output, [realpath($file) => realpath($target_file)]);
        // compare result
        if ($old_output == $output) {
            log::info('SUCCESS_TEST');
        } else {
            log::info('FAILURE_TEST');
            echo str_repeat('===', 5);
            echo "\r\nold=", trim($old_output), "\r\n";
            echo str_repeat('===', 5);
            echo "\r\nnew=", trim($output), "\r\n";
            break;
        }
        //
        /*
        // php 5
        log::info('exec5', $target_file, $file);
        $options['php'] = 5;
        enphp_file($file, $target_file, $options);
        exec('php5_path "' . $target_file . '"', $output);
        exec('php5_path "' . $file . '"', $old_output);
        if ($old_output == $output) {
            log::info('SUCCESS_PHP5');
        } else {
            log::info('FAILURE_PHP5');
            echo "\r\n", trim(implode("\r\n", $output)), "\r\n";
            break;
        }
        */

    }
}
?>

  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:22 
 
开发: 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年5日历 -2024/5/18 18:54:44-

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