如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

苏南大叔挑选wordpress皮肤的时候,发现了个挺精致小巧的皮肤。不过里面有一些不太和谐的地方,想给它修改掉,这个时候,按着既往经验,居然搜索关键词语时全部失败没找到。苏南大叔才忽然意识到:这是个加密的wordpress皮肤。

虽然对于php程序来说,加密的代码并不多见。90%以上的php都不是加密的,但是并不排除存在加密的php的可能性。

本文讲述的内容是:enphp2算法加密的php代码的解密思路。

基本文件描述

究竟是那些文件是加密过的呢?NetBeans非常“智能”的出卖了那些加密的PHP文件。

enphp2算法加密的php代码的解密思路 - netbeans_spy

enphp2算法加密的php代码的解密思路(图6-1)

经验上来说,只要这个php不是必须在某个dll或者so扩展下面才能运行的话,那么这个php就存在着手工解开的可能性。按理说,php解密和js解密一样,都不外乎eval的那些思路。不过,今天看到的这个加密,却非常特别,猛一看上去,和仔细看上去,都觉得这段代码绝无解密的可能性。但是确实正确执行了,这个就让人十分不解了。这代码加密的原理究竟是什么呢?

enphp2算法加密的php代码的解密思路 - notepadpp_enphp2

enphp2算法加密的php代码的解密思路(图6-2)

折腾了好半天,得出了一些结论。不过我要事先声明一下:

首先,我并没有解开这个加密(请该算法作者和该皮肤作者放心)。其次,仅仅为学习的目的,分析了该代码的加密方式。这些加密算法都会有一些奇淫异巧的技能点的。苏南大叔在这里,就get到了好几个罕见的php技能。关键技能点如下:

解压缩

据说gzinflatesubstr在一定组合下就相当于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++来完成这个转化过程。

enphp2算法加密的php代码的解密思路 - enphp2-compare

enphp2算法加密的php代码的解密思路(图6-3)

enphp2算法加密的php代码的解密思路 - notepadcpp

enphp2算法加密的php代码的解密思路(图6-4)

经过notepad++的“照妖镜”功能后,我们看出了符合php语法的雏形。但是在最后一个箭头处,似乎还是不符合php中的语法。这里是如何理解呢?那么就引出下面一下个技能点。

error_reporting(E_ALL^E_NOTICE);

没错,你没有看错。就是这句每天你都会看到的函数。写在每个php文件顶部的函数,就是它,给加密的代码提供了温床。如何理解?这段代码的意思是提示所有的错误,但是不提示notice类型错误。每天都这么写,从来没有深究过,这句话到底是什么意思。不提示notice类型,而上图中最后一个箭头位置,触发的就是个notice类型的错误。为什么这么写,就明白了吧?

关于函数error_reporting的说明见这里: https://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++的安装及插件安装的教程,请点击这里:

enphp2算法加密的php代码的解密思路 - notepad

enphp2算法加密的php代码的解密思路(图6-5)

上述这些技能点get到之后,这段看似不可能完成的任务,也就变得可以完成了。不过,我没有破解掉它。大家都是程序员,程序员何苦要为难程序员呢?对吧?

题外话:

去这个enphp2加密算法的作者的开源代码git上面,仔细翻了翻。以为里面会有它加密的算法在里面,结果...... 果然,他的思路是saas。赞,苏南大叔在这里只能给他狂点赞了,一万个赞奉上。

enphp2算法加密的php代码的解密思路 - enphp2

enphp2算法加密的php代码的解密思路(图6-6)

  【php】秘籍文章入口,仅传授于有缘之人  php

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

打赏领取小礼物

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/enphp2-decode-01.html
上一篇好文:一个php版本的分页算法
下一篇好文:PHP网页异步执行后台进程

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~