加密PHP脚本的通用解密方法:修改PHP源代码,让eval()函数自己输出解密后的代码

回复列表(30|隐藏机器人聊天)
  • @Ta / 2021-12-08 / /
    @老虎会游泳,还有一种加密,就是建立虚拟机,把源代码编译成二进制,再根据虚拟机把二进制转成一条条汇编指令,通常这样的加密最后的到的加密成品体积会变得很大,因为他把整个虚拟机算法都打包在一个文件里去了。这里的虚拟机不是日常使用的虚拟机,是一套类似虚拟机的算法,我也不会解释,估计老虎也明白。以前的红盟/魔方就是这种模式,有幸在52看过别人的分析帖,很精彩,但没学会。我还有以前的加密样本,老虎有兴趣的话可以看下
  • @Ta / 2021-12-08 / /
    goto加密其实是这个项目:https://github.com/pk-fr/yakpro-po
    不能说一定是,成品和市面的样本有八成像。配置一下混淆,看起来基本一致。
  • @Ta / 2021-12-09 / /

    @拒绝柳岩99次,“建立虚拟机,把源代码编译成二进制,再根据虚拟机把二进制转成一条条汇编指令”,嗯,这确实很绝,但其实也有攻击方法。因为如果它不靠扩展运行,那必然要调用php系统函数来实现具体功能(比如输出html、打开文件什么的)。这样我们只要在系统函数中广泛打日志,就能知道它做了什么。然后如果我们修改系统函数的返回值,就能在一定程度上改变代码的行为了。

    也就是说,如果你的目的只是改变程序的行为,其实有时候并不需要破解加密。

  • @Ta / 2021-12-09 / /

    至于goto加密,今天罐子给我发了几个样本。我发现其实只要劫持call_user_func_array()eval()函数,就能搞懂它的大部分行为,甚至可以直接用匹配+修改参数来改变程序的行为,不需要真的去分析它的代码解码和goto过程。

    我使用这个扩展来劫持php自带函数:
    https://www.php.net/manual/zh/book.runkit7.php

  • @Ta / 2021-12-09 / /
    @老虎会游泳,goto最难的是在条件控制、循环语句的还原,比如说嵌套了3到5层if,那在goto看来只有一层或两层if。我印象里goto加密好像没有if语句的,而是将if转化成类似指令的写法代替掉了,还有while,foreach这种,都是通过特定指令规则代替掉了,可以看看我发的那个开源项目,他和虚拟机的原理有点类似,都是把源代码拆开做成一个个指令,然后把指令顺序从视觉上打乱。
  • @Ta / 2021-12-09 / /
    换句话说,goto如果能还原,也一定是原来的代码了,甚至会差别很大。比如说,原来的foreach在经过加密后,他的指令特征和for是类似甚至是一样的,那还原过程就有可能会是按foreach还原,从而不去考虑for了。再比如我是两个连贯的if else elseif 那还原过程中就有可能是嵌套的if,同理也有可能是多层变一层。
  • @Ta / 2021-12-09 / /

    @拒绝柳岩99次,改变程序的行为【不需要】对goto进行还原。把程序当成一个本来就是用goto写的程序,然后在恰当的位置插入代码,改变参数的值,就能让程序的执行流程或者输出结果发生改变。

  • @Ta / 2021-12-11 / /
    厉害(ง •̀_•́)ง大佬
    广告位一个草根小破站http://huue.cc乎学技术自制小尾巴
  • @Ta / 2021-12-12 / /

    这个打包成 docker 镜像会不会更方便@老虎会游泳

  • @Ta / 2021-12-13 / /

    @NowTime,我不打,原因你猜。我为什么一直拒绝提供二进制呢

  • @Ta / 2021-12-14 / /

    自己动手丰衣足食。
    一加8Pro

添加新回复
回复需要登录