逆向完美世界登录
1.查看密码关键字段 2.Ctrl+shift+f全局搜索:password,找到相关js文件 3.从代码的setpublickey、encrypt关键字可以看出,使用了非对称加密算法 4.此处打断点,再次运行,进入函数构造内部 5.经过分析可知,该文件内所有代码都涉及到非对称加解密,所以直接全部copy出来进行调试 6.下图报错,navigator和window未定义,解决方法:因为这两个都是内置函数,所以只需要在代码最前面加上navigator=this;window=this; 7.再回到一开始打断点的地方,把几个关键的函数调用给抠出来 8.上图中的e.setPublicKey($('#e').val());就是获取主文件,id=e的参数值,所以我们可以在login文件中找到value的值,用该值替换(’#e’).val() 9.最后修改完成的代码:
e.setPublicKey($('#e').val());
import requests from pyquery import PyQuery import execjs from lxml import etree url = 'https://passport.wanmei.com/sso/login?service=passport&isiframe=1&location=2f736166652f' headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.20 Safari/537.36' } response = requests.get(url=url, headers=headers).text # doc=PyQuery(response) # public_key=doc('#e').attr("value") #定位: tree = etree.HTML(response) public_key = tree.xpath('//input[@id="e"]/@value')[0] node = execjs.get()#实例化一个对象 pwd = '123' ctx = node.compile(open('./wanmeishijie.js', encoding='utf-8').read())#编译 funcName = 'getPwd("{0}","{1}")'.format(pwd, public_key) pwd = ctx.eval(funcName) print(pwd)