如何为wegame版三国杀绑定手机号

in 折腾一下 with 27 comments

最近玩了三国杀,为了方便登录,特意选择了 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 账号

image-20200722221234665.png

这里马赛克所在的位置就是 dsp 账号

获取字符串 p

image-20200722221555150.png

马赛克所在位置就是字符串p

获取session

image-20200722221832748.png

红矩形所在就是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 账号即可,登陆后自行改密码,不再赘述。

结语

一次不错的体验,果然后端不能偷懒。

上一篇: flash页游seer2折腾日记5-协议的加解密
下一篇: 腾讯云服务器即将到期,如何快速导出数据
Responses
  1. rr

    成了,弄了一下午,谢谢楼主

    Reply
    1. QQ
      @rr

      大佬能不能教一教post获取验证码

      Reply
      1. rr
        @QQ

        这个获取的账号已经用不了了

        Reply
    2. @rr

      大佬 麻烦请教一下post 怎么弄呢 {"error_no":"1001"} 一直返回这个

      Reply
  2. 2294522056

    POST那一步是怎么进行的啊,需要使用什么软件吗?

    Reply
  3. yuyuyugg

    请教一下大佬,为什么我到了“发送http绑定手机号”这一步的时候显示404呢0.0

    Reply
    1. QQ
      @yuyuyugg

      大佬能不能教一教post获取验证码

      Reply
    2. yuyuyugg
      @yuyuyugg

      搞懂了,谢谢大佬的教程。只是短信登陆填写dsp账号提示我“该账号不存在或登录方式不正确,请检查!”
      那想请问大佬可以通过post的方式获取验证码吗?

      Reply
      1. 变形虫
        @yuyuyugg

        我这边也卡在了用post获取验证码 大佬你会了吗

        Reply
  4. 带佬带带我

    大佬,请教下,这篇文章确实能绑定上手机并正常登陆油卡官网对吗?其中获取到dsp账号后直接浏览器网页发送http请求就可以吗,希望赐教,泄泄~

    Reply
    1. _ukuq
      @带佬带带我

      session大概十几位吧,反正是连续的就是了

      Reply
    2. 带佬带带我
      @带佬带带我

      还有就是如何确认session的长度,dsp账号好识别,session长度有什么规律,最难应该是获取session部分吧,抱歉专业水平有限,希望详细指导一波,带佬带带俺,俺想进官网 。0.

      Reply
  5. 陈漱泉

    请问4399服登陆可以抓取吗?只能找到一个uid=2069***25, 没有.dsp结尾的号码

    Reply
    1. _ukuq
      @陈漱泉

      4399就不用试了,数据不归油卡管,也就没法绑手机

      Reply
    2. _ukuq
      @陈漱泉

      不清楚, 没有试过. 上面思路写的很详细了,你可以自己试试

      Reply