笨方法解密php

  1. 一、前言
  2. 二、分析
  3. 三、解密

一、前言

逛论坛看到一个师傅发了个《关于解密之后未进行发放tubi》的帖子

顺着帖子摸过去找到了《xdm,D盾4级,这是后门吗,是的话怎么连接呀》

但是那位师傅只给出了结果并没有给出解密方法

所以试试用echo大法能不能解开

二、分析

原代码为

<?php define('mkIdoE1101',__FILE__);$BZcizz=base64_decode("bjF6Yi9tYTVcdnQwaTI4LXB4dXF5KjZscmtkZzlfZWhjc3dvNCtmMzdqSWFnQkFmcGtpY1N0eEhSaE9GclFHUGpYenNFS051b3dZQ1dNZVp2bUpMVURueXFiVmRsVA==");$WRjFSj=$BZcizz[3].$BZcizz[6].$BZcizz[33].$BZcizz[30];$ONxiUp=$BZcizz[33].$BZcizz[10].$BZcizz[24].$BZcizz[10].$BZcizz[24];$exaiCk=$ONxiUp[0].$BZcizz[18].$BZcizz[3].$ONxiUp[0].$ONxiUp[1].$BZcizz[24];$EILnqC=$BZcizz[7].$BZcizz[13];$WRjFSj.=$BZcizz[22].$BZcizz[36].$BZcizz[29].$BZcizz[26].$BZcizz[30].$BZcizz[32].$BZcizz[35].$BZcizz[26].$BZcizz[30];eval($WRjFSj("一大段东西1"));?>

eval改成echo后输出得到

$SXmxul="一大段东西2";eval('?>'.$WRjFSj($ONxiUp($exaiCk($SXmxul,$EILnqC*2),$exaiCk($SXmxul,$EILnqC,$EILnqC),$exaiCk($SXmxul,0,$EILnqC))));

输出结果插入到?>前,接着将eval改成echo,输出得到

<?php define('jWgaNL1101',mkIdoE1101);$wHUCYk=base64_decode("bjF6Yi9tYTVcdnQwaTI4LXB4dXF5KjZscmtkZzlfZWhjc3dvNCtmMzdqa3F1cEptdmRZb3RQRkVOQmlEaFNzV0dmVkxsQWF5VVp6S093ZXhIbmpjVHJJQ01YZ1JRYg==");$FmAPKg=$wHUCYk[3].$wHUCYk[6].$wHUCYk[33].$wHUCYk[30];$rUaDmC=$wHUCYk[33].$wHUCYk[10].$wHUCYk[24].$wHUCYk[10].$wHUCYk[24];$ZUrAAE=$rUaDmC[0].$wHUCYk[18].$wHUCYk[3].$rUaDmC[0].$rUaDmC[1].$wHUCYk[24];$gjOWFw=$wHUCYk[7].$wHUCYk[13];$FmAPKg.=$wHUCYk[22].$wHUCYk[36].$wHUCYk[29].$wHUCYk[26].$wHUCYk[30].$wHUCYk[32].$wHUCYk[35].$wHUCYk[26].$wHUCYk[30];eval($FmAPKg("一大段东西3"));?><?php define('VyeUmu1101',mkIdoE1101);$wdbLgs=base64_decode("bjF6Yi9tYTVcdnQwaTI4LXB4dXF5KjZscmtkZzlfZWhjc3dvNCtmMzdqQ2NtQnBvTEdqVWxJZG5IWVRTcWhOc2dKTU93S2JWWFplUmZrdnRXUGF6eHVFUXJEQWlGeQ==");$XiTtQO=$wdbLgs[3].$wdbLgs[6].$wdbLgs[33].$wdbLgs[30];$aEpsoc=$wdbLgs[33].$wdbLgs[10].$wdbLgs[24].$wdbLgs[10].$wdbLgs[24];$NEcSzh=$aEpsoc[0].$wdbLgs[18].$wdbLgs[3].$aEpsoc[0].$aEpsoc[1].$wdbLgs[24];$hWZDNi=$wdbLgs[7].$wdbLgs[13];$XiTtQO.=$wdbLgs[22].$wdbLgs[36].$wdbLgs[29].$wdbLgs[26].$wdbLgs[30].$wdbLgs[32].$wdbLgs[35].$wdbLgs[26].$wdbLgs[30];eval($XiTtQO("一大段东西4"));?>

输出结果插入到?>后,再将eval改成echo,又得到

$VaVtvB="TyrpUzciYRvjPsGbtkHOxSLJuleXCKMVEaQoAwdNgDfFmqZBnIhWaFqgOcPIrfLQDetikxjmzBnVbhTvuMJGdYEosZUCHlNXWpRwSAKyDl9ZYjsHDc4=";eval('?>'.$FmAPKg($rUaDmC($ZUrAAE($VaVtvB,$gjOWFw*2),$ZUrAAE($VaVtvB,$gjOWFw,$gjOWFw),$ZUrAAE($VaVtvB,0,$gjOWFw))));$vBTsiY="一大段东西5";eval('?>'.$XiTtQO($aEpsoc($NEcSzh($vBTsiY,$hWZDNi*2),$NEcSzh($vBTsiY,$hWZDNi,$hWZDNi),$NEcSzh($vBTsiY,0,$hWZDNi))));

三、解密

从上面已经可以大致看出规律了

eval改成echo输出结果,输出以<?php开头的插在尖括号外,否则在括号内

不过这样重重复复不知要解多少次

所以还是写个脚本跑的好

思路大致如下

  1. evalecho
  2. 执行php文件得到输出结果
  3. 输出插入到php中
  4. 删除上一次的echo语句(减少)

然后让脚本 1234 -> 1234 -> …. 这样去循环就好

import os
import re


origin_data = ""
new_data = ""
file="unknow.php"

# 删除前一段的echo语句,替换关键字eval为echo
with open(file, "r", encoding="utf-8") as f:
    for line in f:
        if 'echo' in line:
            line = re.sub('echo.*?;', '', line)
        if 'eval' in line:
            line = line.replace('eval','echo')
        origin_data += line
with open(file,"w",encoding="utf-8") as f:
    f.write(origin_data)

# 执行php文件
result = os.popen('php unknow.php').read()

print(result)

# 插入到php文件
with open(file, "r", encoding="utf-8") as f:
    for line in f:
        new_data += line
    
    new_data = re.sub('\?>$', '', new_data)

# <?php开头,删掉
if '<?php' not in result:
    with open(file,"w",encoding="utf-8") as f:
        f.write(new_data+result+'?>')
else:
    with open(file,"w",encoding="utf-8") as f:
        f.write(new_data+result)

发现执行4次就出源码了

看来不太难,手动也是能解开的

当然结果也跟师傅解密出的一样

58fa200444ab477b7f2fc079fc7c4bab.png


转载请注明来源,欢迎对文章中的引用来源进行考证,文章可能具有时效性,欢迎指出任何有错误、已失效或不够清晰的表达 ,可通过[邮件](mailto:cnlnnn@qq.com)联系垃圾堆主人

文章标题:笨方法解密php

字数:819

本文作者:cnlnn

发布时间:2022-07-21, 03:16:04

最后更新:2022-07-21, 03:16:04

原始链接:https://cnlnn.ml/posts/21cf22df/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。