一、前言
逛论坛看到一个师傅发了个《关于解密之后未进行发放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
开头的插在尖括号外,否则在括号内
不过这样重重复复不知要解多少次
所以还是写个脚本跑的好
思路大致如下
- 改
eval
为echo
- 执行php文件得到输出结果
- 输出插入到php中
- 删除上一次的
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次就出源码了
看来不太难,手动也是能解开的
当然结果也跟师傅解密出的一样
转载请注明来源,欢迎对文章中的引用来源进行考证,文章可能具有时效性,欢迎指出任何有错误、已失效或不够清晰的表达 ,可通过[邮件](mailto:cnlnnn@qq.com)联系垃圾堆主人