用Python反转XOR-Javascript混淆函数

2024-04-29 10:04:23 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在一个有漏洞的WordPress网站上看到了这个。它基本上有一轮混淆(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编写一个deobfouscator来理解混淆技术,而不是仅仅通过运行JS文件来获取明文数据。你知道吗

所以我首先试着理解代码发生了什么:

变量

key=xor键, enced=要解码的文本

功能

xor\u enc似乎接受两个参数,“string”和“key”。 变量“res”是空字符串 一个for循环被初始化,从0到字符串的长度,一次一个字符 “res”变量将由以下内容填充:

a)“字符串”的每个字符都将转换为一个字符 b) i%(模)的位置乘以键的完整长度(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

Tags: keyforstringlenvarres字符length
1条回答
网友
1楼 · 发布于 2024-04-29 10:04:23

您应该使用key的元素进行异或运算。letter % len(key)是该元素的索引(它只是用wrapparound循环遍历键)。你知道吗

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)

DEMO

相关问题 更多 >