

唯品会密码JS解密与python登录
source link: http://www.happyhong.cn/ni-xiang/python/10036.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇。抠一下某品会的JS代码,接着使用抠取的JS代码加密密码进行登录。友情提示:为避免不必要的纠纷,本文中所有网址都进行了一定隐藏。看完本文觉得有帮助关注一下知识图谱与大数据公众号吧,有大量抠
JS
代码的文章,当然不关注也无所谓,完整代码点击文末阅读原文。如有侵权,联系删除。

标题已经阐明了本文的目的:
- 密码加密解密;
- 利用第一步加密方法加密后进行登录;
- 完整代码中尝试了多账号号批量登录(由于篇幅有限,移动到了阅读原文中);
找到目标网站,进入登录页面(对各位来说都很easy):

url
如下:
继续看FormData
,如下图:

图中的loginName
为你输入的用户名,password
为密码,可以看出被加密了,如果你熟悉了各类JS加密方式,心里应该能大概确定这就是MD5
加密结果。暂时不用管其它的四个参数,接下来无非就是把加密JS代码抠出来,可以通过调用栈进去,也可以全局搜索password
来定位JS文件,具体使用哪种方法就看各位看官的喜好了,我这里是从调用栈进去的(既然我们是在登录,那就点带有login
字样的js文件进去好了):

password
关键字,应该马上就能定位到想要的位置,定位的时候别忘了挂上一个断点,就像下图一样:
MD5
,接下来的操作应该更加熟悉了,激活断点(输入账号密码,点击登录,前提是你挂上了断点)。

function md5(string, key, raw) {
if (!key) {
if (!raw)
return hex_md5(string);
return raw_md5(string)
}
if (!raw)
return hex_hmac_md5(key, string);
return raw_hmac_md5(key, string)
}
可以看出md5方法一共有三个参数,第一个striing
即为密码,key
和raw
是undefined
。接下笨一点的办法就是一步一步运行,把跳转的所有代码都扣下来,如果是刚开始学习抠代码,这个方法能增加很多调试”感觉”,慢慢抠得越来越顺手。取巧一点的无非就是找到大括号:


python
调用,还要进行一点改动。本次要抠的加密代码其实很简单,毕竟只是md5
。经过稍微改写后,我们尝试使用python里execjs
库执行:
FormData
通过上一节,我们已经可以得到加密后的密码,既然要登录,那就要回到FormData
中,看看几个参数的含义与取值,经过一番测试,总结如下,感兴趣的也可以自己去试一下。
Cookies
现在的登录都需要携带cookies
,看一下本站登录时候的Cookies:

cookies = {
' mars_pid': '你的',
' cps': '你的',
' mars_sid': '你的',
'times_XXXXX': '你的',
' VipRUID': '你的',
' VipRNAME': '',
' VipDegree': '你的',
' user_class': '你的',
' VipCI_te': '你的',
'mars_cid': '你的'
}
有兴趣的可以继续试试这里面还有没有可以不用携带的。
Header
不管是登录还是爬取某个网页,请求头是绝对绕不过的,现在一起看看本站的请求头都有哪些:

user-agent
,平时的爬取过程中,有些可能会检查上一个网页是在哪里,即要携带referer
,还有origin
和host
也是可能会携带的。
本次登录的几个要点在前面应该算已经阐述清楚了,现在要做的无非就是把FormData
里的数据post
到login_url
。
flowchat
st=>start: 开始
e=>end: 结束
op0=>operation: 输入账号密码
op1=>operation: 执行js代码加密密码
op=>operation: 组装formdata
op2=>operation: 把formdata post到登录url
op3=>operation: 分析返回
st->op0->op1->op->op2->op3->e
好了,流程知道了开始写代码,友情提示:由于可能引起一些不必要的纷争,代码中的url和cookies值都隐藏了,大家按照自己的添加即可。创建了一个VipLogin
类,下面是部分模块的代码。
执行js代码
@property
def exec_js(self):
"""
你自己的js路径
:return:
"""
with open('..//js//weipinhui.js', encoding='utf-8') as f:
weipinhui = f.read()
js = execjs.compile(weipinhui)
return js
def get_pwd(self,password):
key = ""
raw = ""
pwd = self.js.call('md5', password, key, raw)
logger.info("加密结果为:{}".format(pwd))
return pwd
用户名加密
def encrypt_phone(self,phone):
return phone[:3]+"*"*5+phone[-3:]
def login(self,user,passwd):
if not user.isdigit or len(user) != 11:
logger.error("目前仅支持手机号方式登录:{}".format(user))
return False
session = requests.Session()
vip_name = self.encrypt_phone(user)
times_key = "times_"+user
data = {
"loginName": user,
"password": passwd,
"remUser": "0",
"whereFrom":"",
"captchaId":"" ,
"captchaTicket":"",
}
ck_dict = {
' mars_pid': '你的',
' cps': '你的',
' mars_sid': '你的',
times_key: '你的',
' VipRUID': '你的',
' VipRNAME': vip_name,
' VipDegree': '你的',
' user_class': '你的',
' VipCI_te': '你的',
'mars_cid': '你的'
}
requests.utils.add_dict_to_cookiejar(session.cookies,ck_dict)
resp = session.post(self.login_url,headers=self.headers,data=data,verify=False)
ret = json.loads(resp.text)
logger.info("账号{}返回结果为:{}".format(self._encrypt_phone(user),ret))
if ret.get("result","") == "success":
return True
return False

'result': 'success
‘如下:
{
'result': 'success',
'errorCode': 0,
'data': {
'redirectUrl': 'https://www.xxx.com',
'captchaFlowData': None,
'extend': None,
'bindMobile': True,
'illegalState': False
},
'redirectUrl': 'https://www.xxx.com'
}
完整代码点击文末阅读原文,觉得有帮助关注一下知识图谱与大数据公众号吧,有大量抠JS
代码的文章,当然不关注也无所谓。


Recommend
-
55
oraclewallet使用与维护从Oracle10gR2开始,通过使用OracleWallet达到任意用户不使用密码登录数据库(非操作系统认证方式),这对于用脚本登录数据库进行操作来说是非常有用的;尤其对于企业安全要求很高,不希望用户名和密码明文存在配置文件中,而且对于密码的维护是...
-
66
如果你“一不小心”忘记了Azure虚拟机的登录密码,怎么办呢?没关系,MicrosoftAzure提供了重置密码的功能,而且直接在Azure门户中就可以操作,很方便。见下图在门户中点击虚拟机,然后选择需要设置的虚拟机,在支持+疑难解答中点击“重置密码”,模式选择重置密码,输...
-
12
解密MSSQL链接数据库的密码 wefgod ·
-
54
-
23
Jasypt自定义密码加解密算法 2020-09-19
-
5
在 Linux 上用密码加密和解密文件 | Linux 中国age 是一个简单的、易于使用的工具,允许你用一个密码来加密和解密文件。来源:
-
6
前后端交互,密码加密,RSA 实现前端 js 加密,后端 go 解密 Grassto · 3天之前 · 177 次点击 · 预...
-
5
上一篇暴力破解文章:一个简单的Python暴力破解网站登录密码脚本 测试靶机为Pikachu漏洞练习平台暴力破解模块下的 “token防爆破?” 春节期间歇了一阵子,吃睡玩...
-
14
行为设计学掌门人斯坦福大学教授BJ Fogg提出的行为模型图: ...
-
5
流量解密并挖掘任意密码重置先随便找一处功能点在下断点前我先抓个包给你们看看
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK