最近玩了三国杀,为了方便登录,特意选择了 wegame 版的(以下简称 wg 版)。后来才了解到 wg 版礼包多,但是却不能参与油卡(三国杀官服)的活动,比如 7 月 18 日的嘉年华线上抽奖。
背景
据老玩家反馈,wg 版和官服用的是同一套服务器,数据库也是通的,wg 版账号都有一个对应的以 .dsp 结尾的油卡账号,只是不知道密码是什么。有些老玩家曾经在游戏中绑定过手机号,然后又通过手机号重置了 dsp 账号的密码,这样就能通过账号密码登录油卡,参与油卡活动了。无奈,绑定手机的功能已经下线了,无法看到具体的绑定过程了。
转机出现在了 7 月 16 日的更新中,这次更新后,wg 版客户端也出现了绑定手机的交互页面。于是我同时下载了官服和 wg 版的客户端,分别登录,并尝试使用 fd 工具抓取数据。经过比对发现,官服客户端会发送两个 http 请求,用于发送验证码和确认验证码;而 wg 版未发现类似的 http 请求,猜测客户端做了校验,如果是 dsp 账号就不发送验证码。后来 wg 版更新,隐藏了绑定手机号的页面。但是没有关系,之前 wg 客户端未发现 http 请求,我们可以假定服务端没有做校验,只要模拟发送 http 请求,依旧可以绑定手机号。这是一个很重要的假设,是这篇文章存在的基础。
为方便说明,以下简称 Fiddler 为 fd,Cheat Engine 为 ce;
请求分析
绑定手机号的请求分为两个,一个是发送验证,一个是确认验证。
发送验证码
POST https://web.sanguosha.com/auth/bind_new/phone_code.php
acount=<油卡账号>&session=<游戏session>&mobile=<要绑定的手机号>
这是一个 post 请求,acount 是油卡账号,这个通过简单 fd 抓包就能捕获;session 很显然是和游戏相关的,按照以往经验,不妨就假设这个 session 就是游戏 session ,每次登录游戏时随机分配;mobile 就是要绑定的手机号。
确认验证码
POST https://web.sanguosha.com/auth/bind_new/phone_bind.php
acount=<油卡账号>&session=<游戏session>&vcode=<收到的验证码>
同样也是一个 post 请求,vcode 就是收到的数字验证码。
对于 wg 版,我们只需要获取 dsp 账号和游戏 session 就行了,dsp 账号通过简单 fd 抓包就能获取,难点在于如何获取后者。
session 分析
我们知道,游戏运行时,数据是需要放到内存中的,session 自然也不例外,因此我们可以通过利用内存扫描工具 ce 进行数据的扫描。
内存很大,如何定位到这些数据呢?盲目寻找肯定是不可行的,既然 官服客户端和 wg 客户端是同一个游戏,他们的绝大多数代码也是相同的,数据在内存中存放的位置有很大可能也是一样的。所以,我们就从官服版下手,寻找内存中 session 的位置。
打开 fd 和 ce,并用官服客户端进行手机号绑定操作,可以看到 session 的值,接下来利用 ce 扫描这个值。
acount=xxxxxx@qq.com&session=234403fb8991e34386f78f7cb77edb23&mobile=18888888888
我用 ce 扫描到了三处,其中有一处比较可疑,在它的前面发现一个 32 位的字符串,不妨记为p。
580835265ba9809a80095e7dxxxxxxxx xx xx xx 234403fb8991e34386f78f7cb77edb23
同样用 ce 扫描这个字符串 p,扫描到了六处,同样有一处比较可疑,因为在它前面,我发现了油卡账号。
xxxxxx@qq.com xx xx xx 580835265ba9809a80095e7dxxxxxxxx
什么东西会和账号放到一块呢?当然是密码喽。我的密码不是这个,显然这个字符串 p 应该是对密码进行了某种散列运算,但是依旧是和密码相关的。为了保险起见,防止账号被盗,我隐去了后八位的信息,但不影响对整体逻辑的理解。
扫描 wegame
我们来稍微整理一下上面的逻辑。
利用 fd 抓取 dsp 账号;用 ce 扫描 dsp 账号,找到字符串 p;再利用 p 扫描,找到 session;模拟发送 http 请求绑定手机号。
fd 抓取 dsp 账号
这里马赛克所在的位置就是 dsp 账号
获取字符串 p
马赛克所在位置就是字符串p
获取session
红矩形所在就是session
发送http绑定手机号
这个比较简单,就不截图了。
POST https://web.sanguosha.com/auth/bind_new/phone_code.php
acount=<油卡账号>&session=<游戏session>&mobile=<要绑定的手机号>
POST https://web.sanguosha.com/auth/bind_new/phone_bind.php
acount=<油卡账号>&session=<游戏session>&vcode=<收到的验证码>
修改密码
https://splus2.dobest.cn/login
选择短信登录,通行证账号填 dsp 账号即可,登陆后自行改密码,不再赘述。
结语
一次不错的体验,果然后端不能偷懒。
本文由 ukuq 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jul 22, 2020 at 10:35 pm
大佬带带,只搞了个dsp
码拿到了,但是绑定的时候404了,,
发现是网址少打个?。。。感谢大佬,已经成功绑定了
发现登陆以后不能改密码了,点击修改密码会提示当前该账号无法修改密码。。
用飞火改了密码,然后在乐游登录之后直接跳转到leyou.sanguosha.com/nonsupport界面,登录的时候还有提示:该渠道账号无法登录
就剩post发送了,这点没学好,求大佬带带
https://web.sanguosha.com/auth/bind_new/phone_code.php?acount=&session=&mobile=
把换成你自己的数据,用浏览器访问就行
谢谢大佬,我一直用的fiddler发送请求老是1001报错,用大佬的方法成功了。膜拜.jpg成功绑定手机了,刚才试了试貌似苟卡把WeGame绑定的dsp账号登录浏览器版sgs的接口给ban了,说要从账号注册的平台登录hha不过还是感谢大佬让我增长了点知识
大佬带带,只找到dsp
加我qq1486848229
大佬,能不能加我一下,我问你一个问题
3 dm区的可以搞吗