欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js加密(七)steam登录

程序员文章站 2022-06-22 15:45:47
1. url: https://store.steampowered.com/login/?redir=&redir_ssl=1 2. target: 登录 3. 分析 3.1 老样子,抓包,找js。 随便输入一个帐号密码,点击登录,看看发送了哪些请求。 一次登录,发送了两次请求,第一次的请求结果是 ......

1. url: 

2. target: 登录

js加密(七)steam登录

 

 3. 分析

3.1 老样子,抓包,找js。

随便输入一个帐号密码,点击登录,看看发送了哪些请求。

js加密(七)steam登录

 

 一次登录,发送了两次请求,第一次的请求结果是一个json,里面有两个参数,是第二次请求中需要的,这个直接添加用户名和一个时间戳发送post就可以了,不管它。看dologin。

3.2 有一个password参数是加密的,其余两个看起来不是很重要。下面就对这个参数进行解密。

js加密(七)steam登录

 

 3.3 复制加密参数,去寻找哪里出现了这个参数,这里看起来比较像。

js加密(七)steam登录

 

 那就打上断点调试,找依赖函数,变量,最终扣出可运行js代码。

4. python代码:

from afterwork.config import proxies, useragent
import requests
import json
import time
import re
import execjs

def getmodexp(data):
    res = requests.post(url='https://store.steampowered.com/login/getrsakey/',
                        data=data,
                        headers={'user-agent': useragent.random()})
    # print(res.text)
    jsoninfo = json.loads(res.text)
    mod = jsoninfo['publickey_mod']
    exp = jsoninfo['publickey_exp']
    return mod, exp

def getdata(username, donotcache):
    data = {
        'donotcache': donotcache,
        'username': username
    }
    return json.loads(json.dumps(data))

def accountinfo():
    username = '你的用户名'
    pw = '你的密码'
    donotcache = re.sub(r'\.', '', str(time.time()))[:-4]
    # print(donotcache)
    # print('1577238990888')

    return username, pw, donotcache

def getjscode():
    with open('jscode.js', 'r') as f:
        jscode = f.read()
        return jscode

def getlogindata(username, pw, donotcache):
    logindata = {
                'donotcache': donotcache,
                'password': pw,
                'username': username,
                'twofactorcode': '',
                'emailauth': '',
                'loginfriendlyname': '',
                'captchagid': '-1',
                'captcha_text': '',
                'emailsteamid': '',
                'rsatimestamp': '111645050000',
                'remember_login': 'false'
                }
    print(logindata)
    return json.loads(json.dumps(logindata))

def login(logindata):
    res = requests.post(url='https://store.steampowered.com/login/dologin/',
                        data=logindata,
                        headers={'user-agent': useragent.random()})
    print(res.text)
    return

def mainfun():
    username, pw, donotcache = accountinfo()
    data = getdata(username, donotcache)
    # print(type(data))
    mod, exp = getmodexp(data)
    jscode = getjscode()
    ctx = execjs.compile(jscode)
    result = ctx.call('getpw', pw, mod, exp)
    # print(result)
    logindata = getlogindata(username, result, donotcache)
    # print(type(logindata))
    login(logindata)

if __name__ == '__main__':
    mainfun()

结果,登录成功返回这些东西:

js加密(七)steam登录

 

 学习交流,勿作他用。