首先获取时间戳除以30取整,得到8个数,再补成8个字节的长度。
之后要有一个密钥,这个密钥是steam和我们约定好的 用来计算令牌码
安卓手机可以在/data/data/com.valvesoftware.android.steam.community/files/目录下找到
文件中的shared_secret就是我们所需的密钥(需要ROOT权限才可以查看)
这个密钥是steam和我们约定好的,用来计算令牌码
如果你的手机未被ROOT,你将无法访问到这部分的数据,即使你安装了根目录文件管理器 在该文件中,你将找到如下的一个变量,其####的部分就是你所需的秘钥
"shared_secret":"#############################"
更换验证设备,那么原有的serect_key就将会失效.
密钥作为key,处理过的时间戳作为信息进行哈希运算,得到一串16进制的数
取最后一位去掉高四做为偏移,在这串数中取四个字节,除26取余数5次得到5个数。从字母表中找到对应的值合起来就是我们要的令牌验证码
1 import hmac 2 import hashlib 3 from base64 import b64decode 4 from time import time,sleep 5 import struct 6 from tkinter import * 7 8 ########################################### 9 # # 10 # # 11 # Python本地计算steam手机令牌码 # 12 # # 13 # by:冷溪凌寒 # 14 ########################################### 15 16 def get_steam_auth_code(secret: str, t: int = None) -> str: 17 if not t: 18 t = int(time()/30) 19 msg = struct.pack(">Q", t) 20 key = b64decode(secret) 21 mac = hmac.new(key, msg, hashlib.sha1).digest() 22 offset = mac[-1] & 0x0f 23 binary = struct.unpack(‘>L‘, mac[offset:offset+4])[0] & 0x7fffffff 24 codestr = list(‘23456789BCDFGHJKMNPQRTVWXY‘) 25 chars = [] 26 for _ in range(5): 27 chars.append(codestr[binary % 26]) 28 binary //= 26 29 code = ‘‘.join(chars) 30 return code 31 32 #print(get_steam_auth_code(‘‘,)) 33 grad=get_steam_auth_code(‘‘,)#在此填入steam密钥 34 r = Tk() 35 r.withdraw() 36 r.clipboard_clear() 37 r.clipboard_append(grad) 38 r.update() 39 sleep(.2)# 一直在占用,需要销毁,添加个0.2秒延迟自动销毁 40 r.update() 41 r.destroy()
运行程序后,自动复制到剪切板,之后只需ctrl+v即可