介绍《The Sanbox》
首先简单介绍下《The Sanbox》,元宇宙游戏。 是一个以社区为主导的平台,创作者们能在区块链上利用体素ASSET和游戏体验获取收益。总之,不用管他是什么,当一个普通网站来逆向分析就行~
登录过程逆向分析
1、 首先 打开网址,选择邮箱登录方式
2、 F12打开调试工具,并点击登录,尝试抓取登录接口
发现登录接口没有账号密码,所以第一时间预感参数,账号密码肯定是经过加密传输,经过比对,authorization这个字段最可疑。
3、 尝试寻找加密参数的构建代码位置
搜索 "Basic ",后面有个空格,因为authorization的格式:Basic XXXXXXX
搜索之后,发现有大量的匹配js文件,扑街,没办法一个个看呗。随便点几个比对发现,这块的代码逻辑都是一样的,还好还好,以为要一个个排查过去。 大胆推测代码的加密逻辑是: "Basic "+ (账户:密码)的base64加密
4. 验证
敲点代码验证一下,直接附上
import base64
import requests
def login_in(email,pwd):
"""登录并获取用户id"""
# 对字符串进行编码
bs4str = base64.b64encode(f"{email}:{pwd}".encode())
# print(bs4str.decode())
url = "https://api.sandbox.game/auth/login"
proxies = {'http': 'http://127.0.0.1:11000', 'https': 'http://127.0.0.1:11000'}
payload = "{}"
headers = {
'authority': 'api.sandbox.game',
'cache': 'no-cache',
'pragma': 'no-cache',
'x-csrf-token': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
headers["authorization"] = f'Basic {bs4str.decode()}'
response = requests.request("POST", url, headers=headers, proxies=proxies, data=payload)
print(response.text)
if __name__ == '__main__':
login_in("xxxx@qq.com","xxxxxxx")
执行测试
正常拿到返回值,搞定收工~
其实本文只是展现了正确的思路,错误的过程我就不展示了,一开始花了好多时间在调试代码上面。( Ĭ ^ Ĭ )