声明:本篇文章仅用于知识分享,不得用于其他用途
网址:aHR0cHM6Ly93d3cuNTFkbnMuY29tLw==
加密逻辑
- 输入用户名和密码登录,触发的数据包如下,所有的传参都是加密过的。
- 全局搜索email_or_phone,总共13处,不过有一处非常明显,包含了所有要的参数。
- 打断点,触发。$(".formAccount .email_or_phone").val()就是输入的手机号或邮箱,然后对其进行aes函数的处理。
- 看下aes函数的加密逻辑,一目了然。
- 其余的password、type都是同样的加密逻辑。redirectTo是个固定值,_token的值是由_token变量赋值的,看下_token变量是个定值还是变量。在当前文件下搜索。
看下来应该是个定值。
- 代码就非常好写了。
- encrypt.js
- var CryptoJS = require("crypto-js")
- function aes(val) {
- var k = CryptoJS.enc.Utf8.parse('1234567890abcDEF');
- var iv = CryptoJS.enc.Utf8.parse('1234567890abcDEF');
- enc = CryptoJS.AES.encrypt(val, k, {
- iv: iv,
- mode: CryptoJS.mode.CBC,
- padding: CryptoJS.pad.ZeroPadding
- }).toString();
- return enc;
- }
复制代码 - ensi.py
- import requests
- import execjs
- url = "https://www.51dns.com/login"
- headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0",
- "Cookie": "xxxxxxxx",
- }
- username = input("请输入邮箱或手机号:")
- password = input("请输入密码:")
- jscode = open("encrypt.js", "r").read()
- js_compile = execjs.compile(jscode)
- encrypt_username = js_compile.call("aes", username)
- encrypt_password = js_compile.call("aes", password)
- account= js_compile.call("aes", "account")
- data = {
- "email_or_phone": encrypt_username,
- "password": encrypt_password,
- 'redirectTo': '/',
- 'type': account,
- "_token": "U0mptVXAg1Acezzf5SG7RDoGoOBmlwtXQlv2VyGR",
- }
- resp = requests.post(url, headers=headers, data=data)
- resp.encoding = "utf-8"
- print(resp.text)
复制代码 如果输入的是不匹配的手机号和密码,返回的结果如下。
如果输入的是匹配的手机号和密码,返回的结果如下。
这个加密逻辑是最简单的了,刚入门的新手可以拿来练习一下。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |