我怎样才能解码这个 php 代码?

逆向工程 解密 去混淆 php
2021-06-18 07:47:52

我在一个客户的网站上发现了这个后门。

http://pastebin.com/wVs8w44v(原始格式)

http://pastebin.com/acfx49QJ(半可读)

我已经摆脱了它并意识到它是一个经过混淆的脚本,但是我如何对其进行去混淆才能找到问题的根源并更好地理解这次攻击背后的动机?

谢谢!

1个回答

我编写了一个小的 Python 脚本来对大部分字符串混淆进行反混淆:

import urllib
import re

php = urllib.urlopen("http://pastebin.com/raw.php?i=wVs8w44v").read()

# Slight modification below so that we don't escape $
z26 = "jmiO@sxhFnD>J\r/u+RcHz3}g\nd{^8 ?eVwl_T\\\t|N5q)LobU]40!p%,rC-97k<'y=W:P$1BI&S6\"E(K`Y~.Q;f[v2a#X*ZAGtM"

# Decode all $z26[...] strings
for i in range(len(z26)):
    php = php.replace("$z26[" + str(i) + "]", "\"" + z26[i] + "\"")

# Concatenate decoded strings
php = php.replace("\".\"", "")

# Replace all $GLOBALS[...]
globals = {}
for m in re.finditer("\$GLOBALS\['(?P<key>\w+?)'\] = \"(?P<value>.*?)\";", php):
    globals[m.group("key")] = m.group("value")
php = re.sub(" \$GLOBALS\['(?P<key>\w+?)'\] = \"(?P<value>.*?)\";", "", php)
for key in globals.keys():
    php = php.replace("$GLOBALS['" + key + "']", globals[key])

print php

然后我使用http://phpbeautifier.com/格式化输出并将结果存储在http://pastebin.com/p7Tmvq4e

剩下要做的唯一主要事情是重命名函数和参数,但这不容易自动化。不过,我认为http://pastebin.com/p7Tmvq4e 上的内容应该可以满足您的需求!