欢迎光临
我们一直在努力

JS逆向:逆向登录流程,逆向简单,重在分析思路

文章目录

    • 概要
    • 整体流程
    • 实操阶段
    • 加密部分
    • 去验证登录试试
      • 1 流程梳理
      • 2 实操
    • 加载js代码
    • 准备登陆信息
    • 去登陆

概要

使用的库:

import requests
import execjs
import base64
import ddddocr
import json

基础命令安装

pip install requests execjs ddddocr

整体流程

实操阶段

  • 首先进入网页,打开F12抓包工具,在登陆页面的选项卡中选择"密码登录页面"。将登录所需信息全部填完(错误信息),点击"登录"按钮 在这里插入图片描述
  • 在抓包工具中找到登录的数据包,查看payload信息,很明显发现,password参数是被经过加密的,且属于request payload。
  • 此时,可判断一定属于POST请求,且数据是直接被挂载到请求体上的
  • 在控制台搜索框中搜索这个数据包的url后半部分 在这里插入图片描述
  • 可以发现有两个有用的而数据包,此时并不知道程序走哪一个,也不需要知道,直接让程序告诉我们走哪,分别进去下两个断点即可。 在这里插入图片描述
  • 然后再在页面上重复第1步的操作点击"登录",断下来。在这里插入图片描述
  • 此时发现pwd是我们输入的密码,而ress.data不知道是什么(思考)。
  • ress是通过一个函数zdAjax传过来的一个参数,并且该参数是一个箭头函数。那么我们只需要通过调用栈找其上一步,观察其怎么传参就可以解决这个问题。 在这里插入图片描述
  • 参数为n,并且为ajax请求,url也可以看到是一个getTime,显而易见,我们需要的这个参数是跟getTIme数据包有关,找到getTime数据包。基本断定这是返回了服务器时间
  • 在这里插入图片描述

    加密部分

  • 进入加密函数 在这里插入图片描述

  • 特征很明显,这是一个rsa加密,并且没有任何不确定的数值 在这里插入图片描述

  • 直接撸代码

  • var JSEncrypt = require("node-jsencrypt")

    encryptFn = function (e) {
    var o = new JSEncrypt;
    return o.setPublicKey("公钥"),
    o.encrypt(e)
    }

    去验证登录试试

    1 流程梳理

    1.1 先加载登录页面,需要加载验证码
    1.2 识别验证码图片
    1.3 拿到getTime返回的data数据
    1.4 加载js代码
    1.5 准备登陆信息
    1.6 去登陆

    2 实操

  • 加载登录页面
  • session = requests.Session()
    session.headers = {
    浏览器里的头信息
    }

    login_page_url = '加载页面url'
    session.get(login_page_url) # 访问登录页面

  • 识别验证码图片
  • verify_url = "验证码数据包url"
    resp = session.post(verify_url, headers={
    "content-type":"application/json;charset=UTF-8"
    })
    bs = base64.b64decode(resp.json()['data'].split(',')[–1])
    dddd = ddddocr.DdddOcr(show_ad=False)
    verify_number = dddd.classification(bs)

  • getTime返回的data数据
  • getTime_url = "getTime数据包url"
    getTime_resp = session.post(getTime_url, headers={
    "content-type": "application/json;charset=UTF-8" # 特殊的头信息
    })

    tm = getTime_resp.json()['data']

    加载js代码

    f = open("逆向.js", mode='r', encoding="utf-8")
    js_code = f.read()
    f.close()
    js = execjs.compile(js_code)

    准备登陆信息

    pws = js.call('encryptFn', 密码 + str(tm))
    payload_data = {
    "imageCaptchaCode": verify_number,
    "userName": "账号",
    "password": pws
    }

    去登陆

    login_url = "登录数据包url"
    login_resp = session.post(login_url, data=json.dumps(payload_data, separators=(',', ':')), headers={
    "content-type":"application/json;charset=UTF-8"
    })

    赞(0)
    未经允许不得转载:171主机测评 » JS逆向:逆向登录流程,逆向简单,重在分析思路
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址