混淆是爬虫中经常遇到的,在这里记录一种遇到混淆可以用的方法。
混淆的开头一般都是一个列表,一个函数,把经过混淆的名称带入这个函数可以得到原来的名称。利用这一点可以反混淆。
import re
import subprocess
def exec_value(hex_string):
res = subprocess.check_output(f"node part.js {hex_string}")
char_string = res.decode('utf-8').strip()
return char_string
print(exec_value(0x306))
def run():
with open("./f2.js", mode='r', encoding='utf-8') as f1, open("./d.js", mode='w', encoding='utf-8') as f2:
for line in f1:
if not line:
f2.write(line)
continue
match_list = re.findall(r"(D9\((.*?)\))", line)
for total, arg in match_list:
real_value = exec_value(arg)
line = line.replace(total, f'"{real_value}"')
f2.write(line)
if __name__ == '__main__':
run()
在这段代码中使用时需要修改的
1js文件f2是读取的需要反混淆的js文件
2.正则表达式
3.js文件part.js是那个混淆的列表和可以还原的函数。