Python создание сессий Steam
Пытаюсь написать скрипт для создания сессий Steam. Возникла проблема: Steam пишет, что я передаю неверный логин или пароль, хотя все данные на 100% верны, в том числе и 2fa код. Возможно я неправильно реализовал шифрование? Не знаю.
Ответ от Steam:
login_response: {
'success': False,
'requires_twofactor': False,
'message': 'The account name or password that you have entered is incorrect.',
'clear_password_field': True,
'captcha_needed': False,
'captcha_gid': -1
}
Мой скрипт:
def encrypt_password(password, public_mod, public_exp):
modulus = int(public_mod, 16)
exponent = int(public_exp, 16) if public_exp.startswith('0x') else int(public_exp)
key = RSA.construct((modulus, exponent))
cipher = PKCS1_v1_5.new(key)
encrypted_password = cipher.encrypt(password.encode('utf-8'))
return encrypted_password.hex()
def create_steam_session():
conn = sqlite3.connect(DATABASE_PATH)
cursor = conn.cursor()
cursor.execute("SELECT login, password FROM users WHERE session='No'")
accounts = cursor.fetchall()
if not accounts:
print("No accounts found.")
conn.close()
return
login, password = accounts[0]
print(f"Login: {login}, Password: {password}")
rsa_url = "https://steamcommunity.com/login/getrsakey/"
rsa_payload = {'username': login}
rsa_response = requests.post(rsa_url, data=rsa_payload).json()
print(f"rsa_response: {rsa_response}")
if not rsa_response['success']:
print(f"Failed to get RSA key for {login}: {rsa_response.get('message')}")
conn.close()
return
public_mod = rsa_response['publickey_mod']
public_exp = rsa_response['publickey_exp']
timestamp = rsa_response['timestamp']
encrypted_password = encrypt_password(password, public_mod, public_exp)
print(f"encrypted_password: {encrypted_password}")
field_name = 'shared_secret'
shared_secret = get_account_info(account_name=login, field_name=field_name)
twofactor_code = getcode(shared_secret)
print(f"twofactor_code: {twofactor_code}")
login_url = "https://steamcommunity.com/login/dologin/"
login_payload = {
'username': login,
'password': encrypted_password,
'rsatimestamp': timestamp,
'twofactorcode': twofactor_code,
'remember_login': 'true'
}
login_response = requests.post(login_url, data=login_payload).json()
print(f"login_response: {login_response}")
if login_response['success']:
cookies = requests.utils.dict_from_cookiejar(login_response.cookies)
session_file_path = os.path.join(SESSIONS_DIR, f"{login}.json")
with open(session_file_path, 'w') as f:
json.dump(cookies, f)
print(f"Session for {login} created and saved in {session_file_path}!")
cursor.execute("UPDATE users SET session='Yes' WHERE login=?", (login,))
conn.commit()
else:
if 'requires_twofactor' in login_response:
print(f"Two-factor authentication required for {login}")
elif 'emailauth_needed' in login_response:
print(f"Email authentication required for {login}")
else:
print(f"Login failed for {login}: {login_response.get('message')}")
conn.close()