js逆向实战之集思录登录参数加密解析

url:https://www.jisilu.cn/account/login/

分析过程

  1. 输入用户名和密码,抓包。(因为是测试,输入的账号和密码都是123456)
    image
    可以看到用户名和密码都被加密了,且是被同一种加密算法加密的。

  2. 搜索关键词user_name,有很多条记录。
    image
    一个一个看,很快就可以确定加密的位置。
    image

  3. 打断点,重新登录触发断点。
    image

  4. 先输出原始的user_namepassword,都是明文。
    image

  5. 当经过data['user_name'] = jslencode(data['user_name'], key)的执行后,user_name就被加密了,说明加密逻辑就在这行代码中。
    image

  6. 看下key是什么,在该文件中搜索key就可以找到定义的位置。
    image
    image
    两个key的值是一致的,采用的是同一个。

  7. 找到jslencode的定义位置。
    image

  8. 老朋友,AES算法,找到keyivmode即可。打断点,运行进来。
    image

  9. key就是传进来的397151C04723421Fiv是个空值,要加密的字符串是我们传入的用户名和密码,这些都经过utf-8的编码;modeECB
    image

  10. 编写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)

不知道为什么验证码检查那里返回的内容一直不对,导致利用python进行登录不成功,若下次找到问题所在再进行改进

posted @ 2024-04-30 10:19  死不悔改奇男子  阅读(21)  评论(0编辑  收藏  举报