enphp2算法加密的php代码的解密思路,enphp2算法解密
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔挑选wordpress
皮肤的时候,发现了个挺精致小巧的皮肤。不过里面有一些不太和谐的地方,想给它修改掉,这个时候,按着既往经验,居然搜索关键词语时全部失败没找到。苏南大叔才忽然意识到:这是个加密的wordpress
皮肤。
虽然对于php
程序来说,加密的代码并不多见。90%以上的php
都不是加密的,但是并不排除存在加密的php
的可能性。
本文讲述的内容是:enphp2
算法加密的php
代码的解密思路。
基本文件描述
究竟是那些文件是加密过的呢?NetBeans
非常“智能”的出卖了那些加密的PHP
文件。
经验上来说,只要这个php不是必须在某个dll
或者so
扩展下面才能运行的话,那么这个php
就存在着手工解开的可能性。按理说,php
解密和js
解密一样,都不外乎eval
的那些思路。不过,本次看到的这个加密,却非常特别,猛一看上去,和仔细看上去,都觉得这段代码绝无解密的可能性。但是确实正确执行了,这个就让人十分不解了。这代码加密的原理究竟是什么呢?
折腾了好半天,得出了一些结论。不过我要事先声明一下:
首先,我并没有解开这个加密(请该算法作者和该皮肤作者放心)。其次,仅仅为学习的目的,分析了该代码的加密方式。这些加密算法都会有一些奇淫异巧的技能点的。苏南大叔在这里,就get到了好几个罕见的php
技能。关键技能点如下:
解压缩
gzinflate
函数:http://doc.php.sh/zh/function.gzinflate.html 。gzdecode
函数: http://doc.php.sh/zh/function.gzdecode.html 。gzencode
函数:http://doc.php.sh/zh/function.gzencode.html 。
据说gzinflate
和substr
在一定组合下就相当于gzdecode
函数。 。
if (!function_exists('gzdecode')) {
function gzdecode($data)
{
return gzinflate(substr($data,10,-8));
}
}
这2个函数的功用就是解压缩专用的函数,用函数gzencode
压缩的数据,使用gzdecode
或者gzinflate
进行反向操作。说白了,就是大家常用的gzip
功能。
十六进制
十六进制是这个加密程序的最大掩护之一。绝大多数编辑器打开这个php
文件后,都是不能正确理解的。连php
的语法都不能符合。但是请注意,php
正确执行了这段php
代码,那么就说明,它肯定是符合php
语法逻辑的。所以,苏南大叔利用世界上最厉害的notepad++
来完成这个转化过程。
经过notepad++
的“照妖镜”功能后,我们看出了符合php
语法的雏形。但是在最后一个箭头处,似乎还是不符合php中的语法。这里是如何理解呢?那么就引出下面一下个技能点。
error_reporting(E_ALL^E_NOTICE);
没错,你没有看错。就是这句每天你都会看到的函数。写在每个php文件顶部的函数,就是它,给加密的代码提供了温床。如何理解?这段代码的意思是提示所有的错误,但是不提示notice类型错误。每天都这么写,从来没有深究过,这句话到底是什么意思。不提示notice
类型,而上图中最后一个箭头位置,触发的就是个notice
类型的错误。为什么这么写,就明白了吧?
关于函数error_reporting
的说明见这里: http://doc.php.sh/zh/function.error-reporting.html 。
那段百思不得解的不符合php
语法的乱码,确实是不符合语法,确实是个错误。但是,php
并没有提示这个“notice”。这段乱码就成功的成为了这个加密功能里面的盐(障眼法)。如果不信,你可以去掉“^E_NOTICE”试试看,你就能明白我说的是什么了。
{0x001}
这个如何理解?很好理解,调试过js加密解密的话,你就会明白。很多我们常写的语句,是有特殊的写法的。{0x001}
其实就是“[1]”,就是数组的1号元素的另外一个写法。是不是够“奇淫异巧”的吧?你绝对想不到吧?没有天马行空的想象力,这些乱码是无法理解的。
notepad++
在所有现有的编辑器全部沦陷的情况下,notepad++
胜利完成了任务。通过“编码=>以utf8 noboom编码”实现了“照妖镜”的功效。然后,这种情况下,任何复制粘贴功能也全部失效。复制粘贴得到的东西,已经物似人非。这个时候,notepad++的hex editor插件,十六进制编辑器,完美的完成了任务。(听上去非常像软件破解了吧?软件破解找到爆破点之后,就是编辑十六进制,用同等数量的字符进行填充。)
notepad++
的安装及插件安装的教程,请点击这里:
上述这些技能点get到之后,这段看似不可能完成的任务,也就变得可以完成了。不过,我没有破解掉它。大家都是程序员,程序员何苦要为难程序员呢?对吧?
题外话:
去这个enphp2
加密算法的作者的开源代码git
上面,仔细翻了翻。以为里面会有它加密的算法在里面,结果...... 果然,他的思路是saas
。赞,苏南大叔在这里只能给他狂点赞了,一万个赞奉上。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
免费php解密、zend解密 http://dezend.******.org/free/