码迷,mamicode.com
首页 > Web开发 > 详细

js加密(七)steam登录

时间:2019-12-25 13:24:08      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:account   dump   head   sub   targe   publickey   python   data   pil   

1. url: https://store.steampowered.com/login/?redir=&redir_ssl=1

2. target: 登录

技术图片

 

 3. 分析

3.1 老样子,抓包,找js。

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

技术图片

 

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

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

技术图片

 

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

技术图片

 

 那就打上断点调试,找依赖函数,变量,最终扣出可运行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登录

标签:account   dump   head   sub   targe   publickey   python   data   pil   

原文地址:https://www.cnblogs.com/zrmw/p/12095879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!