升学e通网逆向

网站分析

最近看到都在说升学e通网这个网站:https://www.ewt360.com/
那么废话不多说,看看这个网站:
打开网站输入账号密码,

账号:12345678911
密码:123456

可以看到网站url跳转到:https://web.ewt360.com/register/#/login

加密点:sign、password

重新发起一次请求、看看异同

可以看到password没有变化、sign变了

找加密点

1、sign

直接搜索大法:

发现sign太多,一般得赋值为sign=、sign:再次搜索:

搜索sign:时发现可疑点,点击去看看,打上断点

加密函数很简单,直接扣下来改写

const getHeadersCommon = () => {
  const now = new Date().getTime()
  const token = Cookies.get('token')
  console.log(token)
  const returnData: any = {
    timestamp: now,
    platform: 1,
    sign: md5(now + 'bdc739ff2dcf').toString().toLocaleUpperCase(),
    secretId: 2,
  }

import time
import hashlib

timestamp = str(int(time.time() * 1000))
sign = hashlib.md5((timestamp + 'bdc739ff2dcf').encode(encoding='utf-8')).hexdigest().upper()
print(sign)
2、password

同理:搜索大法

结果太多,也没有合适得结果
换一种方式,查找堆栈:

向上查找,发现一个LoginPassword,很像加密点

点进去看看,打上断点重新请求,成功断住

此时得密码是还未被加密的,跟着加密点进到加密函数

可以看到密码,进入加密函数


import CryptoJS from 'crypto-js'

const key = CryptoJS
  .enc
  .Utf8
  .parse("20171109124536982017110912453698");

const iv = CryptoJS
  .enc
  .Utf8
  .parse('2017110912453698'); //十六位十六进制数作为密钥偏移量

const encrypt = (word: string) => {
  let srcs = CryptoJS
    .enc
    .Utf8
    .parse(word);
  let encrypted = CryptoJS
    .AES
    .encrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
  return encrypted
    .ciphertext
    .toString()
    .toUpperCase();
}

export const passwordEncrypt = (password: string) => {
  if (typeof password === 'undefined') return undefined
  if (!password) return ''
  return encrypt(password)
}

加密函数找到
改写:

CryptoJS = require("crypto-js")

const key = CryptoJS.enc.Utf8.parse("20171109124536982017110912453698");
const iv = CryptoJS.enc.Utf8.parse('2017110912453698'); //十六位十六进制数作为密钥偏移量

function getEncryptedPassword(word) {
    let srcs = CryptoJS.enc.Utf8.parse(word);
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    return encrypted.ciphertext.toString().toUpperCase();
}

测试:

和加密结果一致

问题:你可能会问,问什么sign不找堆栈呢,要搜索呢,而password要找堆栈呢?

首先,这里的加密都可以通过找堆栈信息找到加密点,只是花费时间长短的问题,搜索用的时间段,那么就使用了搜索。

堆栈中也有对应的生成sign的地方,你也可以打上断点追堆栈,只是相对麻烦一点

posted @ 2021-11-03 17:18  是四不是十  阅读(1235)  评论(0编辑  收藏  举报