最近玩了三国杀,为了方便登录,特意选择了 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
成了,弄了一下午,谢谢楼主
大佬能不能教一教post获取验证码
这个获取的账号已经用不了了
大佬 麻烦请教一下post 怎么弄呢 {"error_no":"1001"} 一直返回这个
POST那一步是怎么进行的啊,需要使用什么软件吗?
请教一下大佬,为什么我到了“发送http绑定手机号”这一步的时候显示404呢0.0
大佬能不能教一教post获取验证码
搞懂了,谢谢大佬的教程。只是短信登陆填写dsp账号提示我“该账号不存在或登录方式不正确,请检查!”
那想请问大佬可以通过post的方式获取验证码吗?
我这边也卡在了用post获取验证码 大佬你会了吗
大佬,请教下,这篇文章确实能绑定上手机并正常登陆油卡官网对吗?其中获取到dsp账号后直接浏览器网页发送http请求就可以吗,希望赐教,泄泄~
session大概十几位吧,反正是连续的就是了
还有就是如何确认session的长度,dsp账号好识别,session长度有什么规律,最难应该是获取session部分吧,抱歉专业水平有限,希望详细指导一波,带佬带带俺,俺想进官网 。0.
请问4399服登陆可以抓取吗?只能找到一个uid=2069***25, 没有.dsp结尾的号码
4399就不用试了,数据不归油卡管,也就没法绑手机
不清楚, 没有试过. 上面思路写的很详细了,你可以自己试试