自己做网站优化,微信朋友圈怎么发链接那种网页怎么制作,杭州建设网杭州建设工程招标平台,如何下载wordpress游戏近期改变了登录方式#xff0c;于是把之前的研究成果分享一下研究仅供学习交流#xff0c;如有侵权请联系删除
抓包
启动启动器#xff0c;输入账号密码#xff0c;点击登录#xff0c;抓包得到一些信息
接口 1 https://wskacchm.mini1.cn:14100/login/auth_secur…游戏近期改变了登录方式于是把之前的研究成果分享一下研究仅供学习交流如有侵权请联系删除
抓包
启动启动器输入账号密码点击登录抓包得到一些信息
接口 1 https://wskacchm.mini1.cn:14100/login/auth_security
请求数据
加密的返回数据 调试分析
由于游戏更新后原文件丢失了这里就不详细演示调试过程了qwq改用ida静态分析演示。 因为游戏启动需要解密数据构造 commandline 来启动所以解密的代码应该就在启动器里. 启动ida等待分析结束搜索关键字符串 authinfo 找到对应函数 调试分析的话可以发现在走完 sub_45A180 后就解密完成了那么这个肯定就是解密函数了第一个参数是加密的数据第二个是iv iv分析
分析一下这个函数发现前面对iv做了一系列的运算实际上就是取出iv中的数字拼接在了一起, 简化一下的python代码如下 1 length int(.join(c for c in iv_ if c.isdigit())) 加密算法分析
这里我是半调试半加直觉的调试后发现他在获取完iv后将加密数据分成了两部分然后反过来拼接起来 经过测试后得出iv是第二部分数据的长度 1 2 3 4 length int(.join(c for c in iv_ if c.isdigit())) res content[len(content) - length:] content[:len(content) - length] # base64解码 res base64.b64decode(res)
继续往下调试走到 sub_44C2B0 发现传入了两个字符串参数 ida跟进分析了一下发现很明显的AES的s_box 那么基本肯定这里就是AES的解密了传入的两个字符串参数一个是key,一个是iv key 和 iv 1 2 key: fcafc12e17b93a30a8998fcbc7d5c786 iv: 624df8d86de5dc35
测试解密
解密的流程清楚了 解析iv还原数据顺序-base64解码-aes解密 用 CyberChef 测试一下成功解密 auth分析
在尝试自己发post的时候发现还有个auth参数不知道怎么得到继续分析 调试得出auth就是 sourcemini_microtargetauthtime时间戳 加盐后md5加密的值盐值调试一下或者明文都能看到 1 2 3 4 5 6 SALT 2ddb7619717147439c83ab022e9d4d38 def get_auth(): string sourcemini_microtargetauthtime str(TIMESTAMP) SALT md5 hashlib.md5() md5.update(string.encode()) return md5.hexdigest()
全部代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 import requests import base64 import uuid import hashlib from datetime import datetime from Crypto.Cipher import AES requests.packages.urllib3.disable_warnings() # ---------- config ---------- UIN Uin PASSWORD Password APIID 110 CLTVERSION 73472 AES_KEY fcafc12e17b93a30a8998fcbc7d5c786 AES_IV 624df8d86de5dc35 SALT 2ddb7619717147439c83ab022e9d4d38 LOGIN_API https://wskacchm.mini1.cn:14100/login/auth_security TIMESTAMP int(datetime.now().timestamp()) # ----------------------------- def get_auth(): string sourcemini_microtargetauthtime str(TIMESTAMP) SALT md5 hashlib.md5() md5.update(string.encode()) return md5.hexdigest() def get_device_id(): # 随便伪造的设备ID不是游戏本身的算法 return WIN uuid.uuid1().hex def decrypt_data(content, iv_): # 根据iv取到第二部分的长度, 还原顺序 length int(.join(c for c in iv_ if c.isdigit())) res content[len(content) - length:] content[:len(content) - length] # base64解码 res base64.b64decode(res) # AES解密 aes AES.new(AES_KEY.encode(), AES.MODE_CBC, AES_IV.encode()) dec aes.decrypt(res) return dec.decode() data { auth: get_auth(), passwd_auth: { DeviceID: get_device_id(), apiid: APIID, cltversion: CLTVERSION, passwd: PASSWORD, uin: UIN }, source: mini_micro, target: auth, time: TIMESTAMP } if __name__ __main__: response dict(requests.post(LOGIN_API, jsondata, verifyFalse).json()) iv response[iv] print(decrypt_data(response[authinfo], iv)) print(decrypt_data(response[baseinfo], iv))
结尾
小白写的有点乱有问题还请提出qwq 还有看雪的Markdown编辑器字数多了变得好卡hh