Skip to content

Instantly share code, notes, and snippets.

@maxisoft
Created January 10, 2014 22:52
Show Gist options
  • Save maxisoft/8364262 to your computer and use it in GitHub Desktop.
Save maxisoft/8364262 to your computer and use it in GitHub Desktop.
python steam login process copied from http://forums.eventscripts.com/viewtopic.php?f=90&t=46941
import urllib
import urllib2
import json
import time
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
import cookielib
uname = "----"
passwd = "----"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
# Request key
url = 'https://steamcommunity.com/login/getrsakey/'
values = {'username' : uname, 'donotcache' : str(int(time.time()*1000))}
headers = { 'User-Agent' : user_agent }
post = urllib.urlencode(values)
req = urllib2.Request(url, post, headers)
response = urllib2.urlopen(req).read()
data = json.loads(response)
print "Get Key Success:", data["success"]
# Encode key
mod = long(str(data["publickey_mod"]), 16)
exp = long(str(data["publickey_exp"]), 16)
rsa = RSA.construct((mod, exp))
cipher = PKCS1_v1_5.new(rsa)
print base64.b64encode(cipher.encrypt(passwd))
# Login
url2 = 'https://steamcommunity.com/login/dologin/'
values2 = {
'username' : uname,
"password": base64.b64encode(cipher.encrypt(passwd)),
"emailauth": "",
"loginfriendlyname": "",
"captchagid": "-1",
"captcha_text": "",
"emailsteamid": "",
"rsatimestamp": data["timestamp"],
"remember_login": False,
"donotcache": str(int(time.time()*1000)),
}
headers2 = { 'User-Agent' : user_agent }
post2 = urllib.urlencode(values2)
req2 = urllib2.Request(url2, post2, headers)
response2 = urllib2.urlopen(req2).read()
data2 = json.loads(response2)
if data2["success"]:
print "Logged in!"
else:
print "Error, could not login:", data2["message"]
print response2
@wagenaartje
Copy link

I may have just solved it, instead of getting an 'incorrect login' I know get emailauth. Ill keep you updated and i'll say when (and how) it works completely!

EDIT: It works, I have successfully logged in. I am now cleaning up the code

FYI: I have written it in python 3 (not 2!), you also need to have pycrypto installed which you most likely already have. I will make a repo on github soon (max 5 days) and upload my project there.

@jayme-github
Copy link

Cool! Let me know what you changed or did different than me!

@wagenaartje
Copy link

I uploaded it. https://github.com/wagenaartje/PySteam/blob/master/PySteam.py . It contains a lot of unnecessary headers, but I achieved it by copying the exact login process from internet explorer and including the same headers and such. I think the problem was at the session ID, I am now going to continue to remove unnecessary headers and such.

@wagenaartje
Copy link

also note it does not handle captcha codes yet.

@jayme-github
Copy link

I think the problem was at the session ID

Strange. My code requests a sessionid first as well here and provides it along with all other cookies for every other GET/POST. I also tried the X-Prototype-Version header some time ago...
We'll see what you find out when you reduce the headers and/or what I find out when I have time to dig into this again ;)
Thanks for sharing! I'll follow you for now to not miss any updates on this (why the heck can't I watch this discussion...)

@jayme-github
Copy link

:trollface: I'ts just that stupid twofactorcode parameter that needs to be added to the dologin POST.

@wagenaartje
Copy link

damn xD

@furkan6116
Copy link

you dont need to do that. there is a library for steam link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment