通用加密php文件还原方法
前面一篇文章 实战还原PHP加密文件 说到我发现了PHP加密文件方式的不足,所以才有了这篇文章。
背景分析
众所周知 PHP 是一种脚本语言,脚本语言主要是使用解释运行而非编译运行。所以相对于编译型语言(C、C#、C++),它没有直接生成exedll的能力。所以传统型的加密方式加壳它使用不上。
所以PHP的加密方式一般有两种:混淆和加密。
混淆这种严格意义上不算加密,这种代码就像用拼音缩写命名变量的代码,只是你看起来费劲了点。这种不在我们讨论范围。
加密分为两种方式执行:一种是有扩展(Loader)。 另外一种是无扩展。
首先讲讲无扩展的加密方式。这种加密方式非常的无脑,因为他的解密过程是公开的,而且得利用已知的PHP函数。加密之后的代码一般类似下面:
<?phpeval(base64_decode("cGhwaW5mbygpOw=="));
即使看起来非常复杂的:
也不过是上面的变式而已。像这种解密形式公开的非常好破解,只要找到 eval 改成 echo 就行。
另外一种有扩展方式就比较复杂了。扩展在这里的作用主要是解密跟执行代码,相比无扩展的形式他将解密跟执行的代码隐藏在扩展里,所以破解较为复杂。
这里的扩展一般分为两种类型的:1、提供解密执行函数的。2、直接覆盖 zend_compile_file 实现解析自定义的php文件功能。
第一种最典型的例子就是我上篇文章提到的 zoeeyguard,主要使用了 zend_eval_string 这个函数来执行php代码。
第二种代表的有:Zend Guard 和 松哥的 php-beast 。
可以说两种破解思路都差不多。可以优先尝试我上一篇文章里面的思路。
当然如果我上一篇没有解决的情况下怎么办呢?
这个时候就需要奉上大杀器了。
你会发现我在前文一直说到两个的函数 zend_compile_file 和 zend_eval_string,有些聪明的phper已经想到了,对!思路还是 只要找到 eval 改成 echo 就行。
实战例子
咱们不能光打嘴炮,光说不做。来个例子:
这次咱们拿松哥的 php-beast 来下手。松哥的代码写得非常漂亮,知道 AES DES 解密耗费时间还写了个 Cache 。
1.下载 linux 的 php 源码包(版本最好在5.6跟5.5之间选择一个,7不支持,BTW:7的改动还是挺大的,很多东西都没兼容,Zend Guard 也不支持7。这里我走了弯路。)
2.找到文件 Zendzend_language_scanner.c 中的函数:zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) 大概在500多行的样子,将如下的代码加在前面(代码写得烂,切勿吐槽):
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) { zend_lex_state original_lex_state; zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); zend_op_array *original_active_op_array = CG(active_op_array); zend_op_array *retval=NULL; int compiler_result; zend_bool compilation_successful=0; znode retval_znode; zend_bool original_in_compilation = CG(in_compilation); /** BEGIN **/ //加在这里的含义就是每次php编译php源码的时候都把这份源码打印一份 char *buf; size_t size; zend_stream_fixup(file_handle, &buf, &size); printf("\n#######\nFILE TYPE: %d FILE NAME: %s CONTENT: %s\n#######\n", (*file_handle).type, (*file_handle).filename, buf); /** END **/
在php文件夹下执行:
//节省点时间 ./configure --disable-ipv6 --disable-all make make install
4.如果顺利的话PHP已经安装成功了。
5.我们写两个测试文件:作用是: test.php 执行它去加密 before.php 生成 after.php。
//test.php <?php $path = __DIR__ . '/before.php'; $newPath = __DIR__ . '/after.php'; $result = beast_encode_file($path, $newPath, 0, BEAST_ENCRYPT_TYPE_DES); var_dump($result);
//before.php <?php print 'http://wx-app.com.cn/' . PHP_EOL;
7.执行以下 php test.php 接着在执行 php after.php。
下面就看截图吧:
总结
1、没有破不了的密码。我们能做的只是增加破解时间。如果这个破解时间大于一个人的寿命,那么这个加密方式肯定是成功的。
2、对于加密的程序,就像破解者需要了解、猜测编写者的思路一样,编写者也需要去了解破解者的方法、手段。这样才能写出破解难度更高的程序。
3、相比加密我觉得混淆更适合php源代码的“加密”。
4、如果你的php代码想要加密发布出去,最好的方式还是提高收费然后直接源码提供。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。
