【JS逆向中等实战】5173登录

地址

aHR0cHM6Ly9wYXNzcG9ydC41MTczLmNvbS9Tc28vTG9naW4/

在这里插入图片描述

发包分析

两个可以参数,一个是密码,另一个未知,看特征像是md5加密
在这里插入图片描述

测试参数

下面测试一下重发请求需要哪些参数。
先完全重写请求的信息

import requests


headers = {
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Origin": "https://passport.5173.com",
    "Referer": "https://passport.5173.com/Sso/Login?",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    "sec-ch-ua": "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"122\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\""
}
cookies = {
    ".5173auth": "",
    "__utma": "12194411.1048386069.1718180174.1718180174.1718180174.1",
    "__utmb": "12194411",
    "__utmc": "12194411",
    "__utmz": "12194411.1718180174.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)",
    "Hm_lvt_6054b5813cf740e14dd8df8f5d0cb24b": "1718180174",
    "Hm_lpvt_6054b5813cf740e14dd8df8f5d0cb24b": "1718180174",
    "trace_5173": "202406121616c74a9e73ffbcf6de5db3",
    "gr_user_id": "c3e0f896-7485-454d-b1c0-8b89862d1a1e",
    "ae7d9d7e698ddc2f_gr_session_id": "234a0d7d-1d33-48e7-b292-801fb27f64c2",
    "ae7d9d7e698ddc2f_gr_session_id_sent_vst": "234a0d7d-1d33-48e7-b292-801fb27f64c2",
    "fp": "2d111e52caf1d2bd6dab42c11490dae4"
}
url = "https://passport.5173.com/Sso/Login"

data = {
    "smsLogin": "0",
    "userName": "1111111111",
    "password": "f87f4674e58b8d51780864505f0eb445",
    "mobileNo": "",
    "smsCaptcha": "",
    "category": "",
    "passpod": "",
    "__validationToken__": "79f9227b25e148b691852632b54ceefe",
    "__validationDna__": ""
}
response = requests.post(url, headers=headers, cookies=cookies, data=data)

print(response.text)
print(response.status_code)
print(len(response.text))

通过删减部分信息,对比最后打印的数据包长度来确定是否影响数据返回。

经过测试

  • 密码加密
  • 剩余参数写死
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
}
url = "https://passport.5173.com/Sso/Login"
data = {
    "smsLogin": "0",
    "userName": "1111115611",
    "password": "f87f4674e58b8d51780864505f0eb445",
    "mobileNo": "",
    "smsCaptcha": "",
    "category": "",
    "passpod": "",
    "__validationToken__": "79f9227b25e148b691852632b54ceefe",
    "__validationDna__": ""
}
response = requests.post(url, headers=headers, data=data)

print(response.text)
print(response.status_code)
print(len(response.text))

密码加密逆向

找入口

在点击登录的时候会发现一个现象,就是密码框的内容会变长
在这里插入图片描述
我输入的是123456但是登录的时候会出现密码变长, 这就说明加密后的密码又重新赋值给了原密码框。这点和上一个案例很像 【JS逆向入门实战】7881登录

既然会对密码框进行操作,肯定会用到选择器,那就根据密码框的特征来检索。

id通常会使用id所以根据这个txtPass进行搜索
在这里插入图片描述

找加密函数

Ctrl + shift + F 打开搜索框,点进去查看,发现第二个搜索结果很像操作的地方。

在这里插入图片描述
图中红框位置很像是对密码框赋值密文了,打上断点测试。
在这里插入图片描述
果然这个o参数就是密文
在这里插入图片描述
往上找发现这个o是上层函数传入的第二个参数,往上一级追栈。
在这里插入图片描述
在这里插入图片描述
往上发现是传入c参数
在这里插入图片描述
这段的逻辑就是判断是否已经对密码加密赋值了,如果是就直接获取密码框的内容,如果没有则进入生成密文以及赋值的逻辑。
那么密文最终就是函数a.getPassword生成的。还需要传入参数pkey,这里先记录固定值,先把加密逻辑扣下来
在这里插入图片描述

点进加密函数,发现就是一个md5加密,打上断点看看传入的参数是谁
在这里插入图片描述
发现一个是密码,一个是pkey

扣代码

先扣下来

pkey = 'yoy8dc';
password = '123456';
c = hex_md5(hex_md5(password).substr(8, 16) + pkey);
console.log(c);

重新请求测试这个md5加密有没有魔改。

  • 浏览器结果

在这里插入图片描述

  • 本地结果
    在这里插入图片描述
    说明是标准md5加密库,就不需要扣了,如果扣也很简单。

完整js代码

const crypto = require('crypto');

// 计算 MD5
function hex_md5(input) {
    const hash = crypto.createHash('md5');
    hash.update(input);
    const md5 = hash.digest('hex');
    return md5;
}

pkey = "4qh005";
password = '123456';
c = hex_md5(hex_md5(password).substr(8, 16) + pkey);
console.log(c);


pkey的位置

还有一个问题,参数pkey 这个参数还不知道哪里来的,这个估计是随网页返回的。全局搜索一下,在加密函数上面能发现一个,不确定是不是这个,登录测试

其实在这里就能发现这个参数的生成位置!
不知道为什么我没有看到!
在这里插入图片描述

下面的内容是找到上面这个位置。

在这里插入图片描述
发现数据是对不上的
在这里插入图片描述
那就看看上级传入的,发现这个参数最终会在b.fost.security.FostTpm 中。
在这里插入图片描述
这就有点棘手了。
往上能够找到这个b.fost.security.FostTpm 的赋值位置,打上断点,发现请求完毕后,会重新生成pkey也就是说,本次使用的pkey是上一次生成的。
在这里插入图片描述
慢慢调试,往下翻发现pkey是先在一个a变量中生成,然后赋值给b.fost.security.FostTpm

this.ekey = a.ekey;
this.vkey = a.vkey;
this.pkey = a.pkey;

在这里插入图片描述
往上追就是a的来源。
在这里插入图片描述
发现a还是在上层。
在这里插入图片描述
发现是传入了d参数
在这里插入图片描述
搜索往上查找,发现了pkey的生成位置
在这里插入图片描述
使用$查找是jQuery的语法,这么说还是在网页上的,搜索发现果然如此。
在这里插入图片描述
所以这个参数是跟随网页发送过来的,可以先请求一次网页,获取需要的内容,再构建逆向代码登录,本篇完结!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D0ublecl1ck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值