从 php 内核挂载钩子解密源码
来源:互联网 发布:江歌案始末知乎 编辑:程序博客网 时间:2024/06/13 13:45
大多数的php代码加密(不需要额外扩展就能运行的)原理上都是使用eval进行代码的执行,理论上,只要我们在php内核执行eval函数的时候,将其dump出来,就可以得到源代码。需要注意的是:
用户上传的代码是不可信的,因此需要一个沙盒
此法虽然方便,看似是一个万能解密的办法,但是 dump 数据的时候会有很多中间值,还是需要人工的做一个特征库,去识别过滤出需要的代码段
实现
在 php 扩展中, module init 的时候替换掉 zend_compile_string
,主要代码如下
static zend_op_array *edump_compile_string(zval *source_string, char *filename TSRMLS_DC){ int c, len; char *copy; 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("----- [tool.lu start] -----\n"); php_printf("%s\n", copy); php_printf("----- [tool.lu end] -----\n"); yes = 1; return orig_compile_string(source_string, filename TSRMLS_CC);}PHP_MINIT_FUNCTION(edump){ if (edump_hooked == 0) { edump_hooked = 1; orig_compile_string = zend_compile_string; zend_compile_string = edump_compile_string; } return SUCCESS;}
使用docker作为沙盒
0 0
- 从 php 内核挂载钩子解密源码
- 从JDK源码看关闭钩子
- 从JDK源码看关闭钩子
- PHP内核探索:Apache运行与钩子函数
- 10.PHP内核探索:Apache运行与钩子函数
- PHP内核探索:Apache运行与钩子函数
- CI框架源码阅读---------钩子类hooks.php
- CI框架源码阅读笔记6 扩展钩子 Hook.php
- CI框架源码阅读笔记6 扩展钩子 Hook.php
- CI框架源码阅读笔记6 扩展钩子 Hook.php
- CI框架源码阅读笔记6 扩展钩子 Hook.php
- 内核---从Linux内核源码结构纵览内核
- PHP内核研究: PHP源码目录分析
- 内核钩子模板
- 内核钩子实例(稳定)
- 内核钩子实例
- PHP内核解密系列:zend_execute的执行过程
- Android 从内核源码关掉Android SELinux
- 一个基于Win32的文本编辑器源码
- 基于毕业季的规划(提纲)
- 16: Rotate Image
- 类的构造函数
- IOS的app运行时上下有黑边,非全屏
- 从 php 内核挂载钩子解密源码
- 二维有序数组的查找 python解决
- 17:Plus One
- [201702w3]如何变得会聊天
- 11g 如何添加,替换,移除,迁移 OCR ?
- 利用Python搭建的简易排序搜索引擎
- python安装requests库
- 初识Hadoop
- Android 生命周期详解【附demo源码】