爬虫逆向实战(40)-某江酒店登陆(AES、MD5)

一、数据接口分析

主页地址:某江酒店

1、抓包

通过抓包可以发现数据接口是/api/member/login

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看"载荷"模块可以发现,有TDFingerprintblackBoxMd5passwordsw四个加密参数,剩下的diddeviceInfo是可以写死的。
  2. 请求头是否加密?
  3. 响应是否加密?
  4. cookie是否加密?

二、加密位置定位

1、password

通过搜索password:可以发现有一处加密的位置

点进去,打上断点,可以发现,就是可以断住,并且就是在这里进行的加密。

2、sw

我们可以发现,在上方password加密的位置,并没有其他参数,但是在下方调用了一个r.login方法,我们可以进入该方法查看。

进入之后,发现还有一层a.login,我们接着进入a.login方法查看,进入之后,可以发现,sw参数是在此处使用md5进行加密的。

3、TDFingerprintblackBoxMd5

虽然我们在上方的方法中,也发现了TDFingerprintblackBoxMd5,但是它们的生成位置不在这里

然后我们可以通过搜索_fmOpt.TDFingerprint =,可以发现一处赋值位置。

我们在此处打上断点,然后刷新页面,发现可以断住。

然后通过查看堆栈,可以发现data参数是由oooOoQ方法生成的。

三、扣js代码

passwordsw参数的加密都是使用的标准模块进行的加密,直接使用标准加密,然后再将TDFingerprint的生成方法扣出即可。

js源代码:

javascript 复制代码
var CryptoJS = require('crypto-js')

var QOoOoo = {};
var o00o0O = [];

function o00Q00(QQQoO) {
    var Qo000 = ""
    var oQoQo = ['ghijklmnopqrstuv'['charAt']('0123456789abcdef'['indexOf'](QQQoO['substring'](0, 1))), QQQoO['substring'](1, 4), QQQoO['substring'](4, 14), QQQoO['substring'](14, 22), QQQoO['substring'](22, 23)];
    var Oo000 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
    var oQOQO = [];
    var QOQQO = 0;
    oQOQO = [Oo000[parseInt(Math['random']() * 62)], Oo000[parseInt(Math['random']() * 62)], Oo000[parseInt(Math['random']() * 62)]];
    QOQQO = 1000
    o00o0O['push']("" + oQOQO[0] + oQOQO[1] + oQOQO[2])
    Qo000 = "" + oQoQo[0] + oQoQo[1] + oQOQO[0] + oQoQo[2] + oQOQO[1] + oQoQo[3] + oQOQO[2] + oQoQo[4];
    QOQQO++;
    return Qo000
}

encryptAES = function (e) {
    var n = CryptoJS.enc.Latin1.parse("h5LoginKey123456")
        , a = CryptoJS.enc.Latin1.parse("h5LoginIv1234567")
        , t = e
        , o = CryptoJS.AES.encrypt(t, n, {
        iv: a,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    return o.toString()
}

hex_md5 = function (text) {
    return CryptoJS.MD5(text).toString()
}

function get_params(mobile, password, yzm) {
    let t = '7a2jY0'
    let deviceInfo = {
        "fingerPrintJs": "30c4e77f147c1e20d765a426d3903d48",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
        "platform": "Win32"
    }
    let data = o00Q00('bWPH1712728929bkst3r3de')
    l = {
        groupTypeId: 2,
        type: 1,
        mobile: mobile,
        password: encryptAES(password),
        rememberMe: true,
        verifyCode: yzm,
        TDFingerprint: data,
        blackBoxMd5: hex_md5(data),
        did: 'd26ff897e3a0dd231c97e33c84ca4c0f',
        deviceInfo: deviceInfo,
        sw: hex_md5(t + mobile + deviceInfo.fingerPrintJs),
        channelCode: 'CA00046'
    }
    return l
}
相关推荐
电商API&Tina14 小时前
【电商API接口】多电商平台数据API接入方案(附带实例)
运维·开发语言·数据库·chrome·爬虫·python·jenkins
code tsunami17 小时前
如何将 Helium 与 CapSolver 集成,实现无缝 CAPTCHA 自动化解决
运维·数据库·人工智能·爬虫·python·自动化
电商API_1800790524718 小时前
淘宝商品数据爬虫技术实践指南
大数据·数据库·人工智能·爬虫
Serendipity_Carl18 小时前
淘宝商品数据爬取实战:突破sign签名与Cookie验证
爬虫·js逆向
code tsunami19 小时前
DrissionPage 与 CapSolver:打造无痕、高效的自动化爬虫利器
运维·爬虫·自动化
qq_124987075319 小时前
基于spark的西南天气数据的分析与应用(源码+论文+部署+安装)
大数据·分布式·爬虫·python·spark·毕业设计·数据可视化
tang777891 天前
Python爬虫代理,选短效IP还是长效IP?
爬虫·python·tcp/ip
从负无穷开始的三次元代码生活2 天前
Python网络爬虫——知识点
爬虫·python
小白学大数据2 天前
海量小说数据采集:Spark 爬虫系统设计
大数据·开发语言·爬虫·spark
Smartdaili China2 天前
如何抓取维基百科. 完整初学者教程
爬虫·指南·抓取·wikipedia·抓取api·如何·百科