【发布时间】:2019-12-19 09:38:51
【问题描述】:
所以我在查看一个被入侵的 WordPress 网站并看到了这个注入的 js。它基本上进行了一轮混淆(charCodeAt(13-3,9-2等)。然后,它输出以下内容:
var key = 'eooquewZmf';
var enced = '<encoded_base64_blob>';
function xor_enc(string, key) {
var res = '';
for (var i = 0; i < string.length; i++) {
res += String.fromCharCode(string.charCodeAt(i) ^ key.charCodeAt(i % key.length));
}
return res;
}
我真的是想通过在 Python 中编写一个反混淆器来理解混淆技术,而不是仅仅通过运行 JS 文件并获取明文来获取明文数据。
所以我首先尝试了解代码发生了什么:
变量
key = xor key, enced = 要解码的文本
功能
xor_enc 似乎有两个论点,“string”和“key”。 变量“res”是一个空字符串 一个 for 循环被初始化,将从 0 变为字符串的长度,一次一个字符 “res”变量将由以下内容填充:
a) "string" 的每个字符都会被转换成一个字符 b) i % (modulo) 的位置乘以密钥的完整长度(10 个字符)
然后是 XOR b。然后将其返回。
所以我认为我的主要问题是理解 b 并在 Python 中复制它。这是我到目前为止所拥有的:https://repl.it/repls/CluelessUnsungDisc,但它是 fubar 并且返回以下错误:
File "main.py", line 8, in <module>
newstring += chr(ord(dec[letter]) ^ ord(letter % len(key)))
TypeError: ord() expected string of length 1, but int found
我不知道是我的括号还是嵌套,但 ord 没有正确看到字符位置。
原始 JS 在这里:https://pastebin.com/yMz6aP7V((请记住,它的 JS 来自受感染的 WordPress 站点,因此可能是恶意的)
任何帮助将不胜感激!
based ="<base64>"
dec = base64.b64decode(based)
print(dec)
key = 'eooquewZmf'
newstring = ''
for letter in range(len(dec)):
newstring += chr(ord(dec[letter]) ^ ord(letter % len(key)))
print(newstring)
File "main.py", line 8, in <module>
newstring += chr(ord(dec[letter]) ^ ord(letter % len(key)))
TypeError: ord() expected string of length 1, but int found
【问题讨论】:
-
你能不能把
.放在句子的末尾而不是像那样把它们放在一起?
标签: javascript python obfuscation deobfuscation