所以我看了一个被入侵的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“是一个空字符串A for循环被初始化,并且将从0到字符串的长度,"res”变量一次一个字符将被填充:
a) "string“的每个字符将被转换为一个字符b)以密钥的完整长度(10个字符)表示i%(模数)的位置。
然后是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
发布于 2019-08-13 04:00:39
你应该是带有key
元素的XORing。letter % len(key)
是该元素的索引(它只是使用wraparound对键进行循环)。
b64decode()
返回一个bytes
对象而不是字符串,因此您可以只访问整数形式的元素,而不需要调用ord()
。
import base64
def b64_xor(b64,key):
dec = base64.b64decode(b64)
newstring = ''
for i, letter in enumerate(dec):
newstring += chr(letter ^ ord(key[i % len(key)]))
print(newstring)
https://stackoverflow.com/questions/57467436
复制相似问题