url:https://www.jisilu.cn/account/login/
分析过程
-
输入用户名和密码,抓包。(因为是测试,输入的账号和密码都是123456)
可以看到用户名和密码都被加密了,且是被同一种加密算法加密的。 -
搜索关键词
user_name
,有很多条记录。
一个一个看,很快就可以确定加密的位置。
-
打断点,重新登录触发断点。
-
先输出原始的
user_name
和password
,都是明文。
-
当经过
data['user_name'] = jslencode(data['user_name'], key)
的执行后,user_name
就被加密了,说明加密逻辑就在这行代码中。
-
看下
key
是什么,在该文件中搜索key
就可以找到定义的位置。
两个key
的值是一致的,采用的是同一个。 -
找到
jslencode
的定义位置。
-
老朋友,AES算法,找到
key
,iv
和mode
即可。打断点,运行进来。
-
key
就是传进来的397151C04723421F
,iv
是个空值,要加密的字符串是我们传入的用户名和密码,这些都经过utf-8的编码;mode
是ECB
。
-
编写python代码处理,登录还涉及到了验证码的识别。
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import json
import requests
import ddddocr # 导入打码平台库
sess = requests.session()
img_url = "https://www.jisilu.cn/account/captcha/5612" # 图片验证码的地址
resp1 = sess.get(img_url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ("
"KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"})
with open("verify_code.png", mode="wb") as file_object:
file_object.write(resp1.content)
ocr = ddddocr.DdddOcr()
result = ocr.classification(resp1.content) # 识别图片验证码
print(result)
verify_url = "https://www.jisilu.cn/webapi/account/check_code_verify/" # 验证码检查的地址
resp2 = sess.post(verify_url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ("
"KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", "Referer":
"https://www.jisilu.cn/account/login/"},
data={"code_verify": result})
print(resp2.text)
url = "https://www.jisilu.cn/webapi/account/login_process/"
key = "397151C04723421F".encode("utf-8")
iv = ""
username = input("请输入用户名:")
password = input("请输入密码:")
aes = AES.new(key=key, mode=AES.MODE_ECB)
username = pad(username.encode("utf-8"), 16)
user_name = aes.encrypt(username).hex()
password = pad(password.encode("utf-8"), 16)
pass_word = aes.encrypt(password).hex()
print(user_name, pass_word)
json_data = {
"return_url": "https://www.jisilu.cn/",
"user_name": user_name,
"password": pass_word,
"aes": 1,
"auto_login": 0,
"code_verify": result,
}
data = json.dumps(json_data)
resp = sess.post(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, "
"like Gecko) Chrome/123.0.0.0 Safari/537.36"}, data=data)
print(resp.text)
标签:加密,name,url,js,user,key,集思录,data From: https://www.cnblogs.com/sbhglqy/p/18167308不知道为什么验证码检查那里返回的内容一直不对,导致利用python进行登录不成功,若下次找到问题所在再进行改进