78模板网分享cms建站教程,提供网站模板、网站插件、办公模板等模板教程免费学习,找模板教程就上78模板网!

通过hook eval解密混淆的PHP文件

通过hook eval解密混淆的PHP文件

PHP混淆原理

一般来讲,混淆分为两种

利用拓展进行加密

不需要拓展,单文件加密

本文主要针对第二种,而单文件加密的一般都是对源码进行字符串操作,比如对字符串移位、拼接,或者重新定义变量,重新赋值数组,总之就是尽可能减少程序可读性。但是所有加密过的代码都会经过多次eval来重新还原为php代码执行,所以我们可以hook PHP中的eval函数来输出经过eval函数的参数,参数就是源码。

hook eval

PHP中的eval函数在Zend里需要调用zend_compile_string函数,我们写一个拓展直接hook这个函数就行了。不过我不会写c代码,所以参考网上的文章,在GitHub中找到了现成的一个拓展库。

https://github.com/bizonix/evalhook 需要编译,不过我在文末提供了编译好的so文件。

修改 evalhook.c 中这部分代码,否则只能在命令行中使用。

static zend_op_array *evalhook_compile_string(zval *source_string, char *filename TSRMLS_DC)

{

        int c, len, yes;

        char *copy;

        /* Ignore non string eval() */

        if (Z_TYPE_P(source_string) != IS_STRING) {

                return orig_compile_string(source_string, filename TSRMLS_CC);

        }

        len  = Z_STRLEN_P(source_string);

        copy = estrndup(Z_STRVAL_P(source_string), len);

        if (len > strlen(copy)) {

                for (c=0; c<len; c++) if (copy[c] == 0) copy[c] == '?';

        }

        php_printf("n--------- Decrypt start ------------n");

        php_printf(copy);

        php_printf("n--------- Decrypt done ------------n");

        return orig_compile_string(source_string, filename TSRMLS_CC);

}

...

C

centos php5.6+apache 然后运行

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

yum install --enablerepo=remi --enablerepo=remi-php56 php-devel

phpize && ./configure && make

将 evalhook/modules/evalhook.so 拷贝到 php 的拓展目录下,并且向php.ini中添加

extension=evalhook.so

重新启动apache之后,可以通过web访问php文件,会直接打印出源码。

加了拓展之后

本文链接:http://78moban.cn/post/8297.html

版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!

联系技术
文章删除 友链合作 技术交流群
1050177837
公众号
公众号
公众号
返回顶部