1. 少前手游安卓与ios互转
    1. 为什么会有这篇文章?
    2. 整体思路
    3. 具体实现

少前手游安卓与ios互转

为什么会有这篇文章?

最近用别人的服务器太卡了,经常掉线,很烦,于是我想搞成本地服务。

整体思路

首先进入游戏会有一个服务器列表,说明游戏要和服务器进行一次请求来获取服务器信息。

无论使用什么协议发送请求,域名到ip的转换是必须的,所以我们需要在这一层做一个拦截让转换的ip修改成我们自己的。

ok,我们已经让接口控制权转交到我们的手上了,我们需要伪装成原接口,以相同的数据格式来篡改数据以达到我们的要的效果。

所幸的是少前的请求是基于http的,在我所学范围内,所以设想成立,剩下的就是具体操作。

具体实现

  1. 爬取请求信息

    ios通过Thor去爬取,以下的爬取好的,它会返回一个xml配置,我们的目标是伪造这个xml,篡改他的信息。

    curl -X POST -H "User-Agent: girlsfrontline/636 CFNetwork/1098.6 Darwin/19.0.0" -H "Content-Type: application/x-www-form-urlencoded" -H "Host: ios.transit.gf.ppgame.com" -H "X-Unity-Version: 2017.4.21f1" -d "c=game&a=newserverList&channel=cn_appstore&platformChannelId=ios&check_version=20400&rnd=755227" "http://ios.transit.gf.ppgame.com/index.php"
  2. 本地请求伪造

    非常简单,但是不同语言用的东西不同,这里我是用nodejs

    注意不加端口的域名默认走80端口,如果被占用,请自行搞反代理

    //test.js 
    //node: v10.16.0
    var express = require('express')
    var bodyParser = require('body-parser')
    
    var app = express()
    var xmlString = `<?xml version="1.0" encoding="UTF-8"?>
    <servers>
     <server>
      <name>0服 格里芬</name>
      <addr>http://gf-ios-cn-zs-game-0001.ppgame.com/index.php/3000/</addr>
      <worldId>3000</worldId>
      <recommended>1</recommended>
      <condition>0</condition>
      <is_check>0</is_check>
      <nc>0</nc>
      <ab_version>190110</ab_version>
      <open_time>1566464400</open_time>
     </server>
     <config>
      <notice_url>http://gf.ppgame.com/notice/index.html?type=5</notice_url>
      <update_log_url>http://gf.ppgame.com/update_url.html</update_log_url>
      <update_start_time>1522512000</update_start_time>
      <update_end_time>1609430400</update_end_time>
      <client_version>20400</client_version>
      <platform>https://itunes.apple.com/cn/app/shao-nu-qian-xian-jun-wu-qiang/id1117273600?mt=8</platform>
      <top_client_version>2011</top_client_version>
      <version_desc>V2.0400版本更新内容: 1.新增:3D化据点,原先的“宿舍”及“附属房间”可在据点界面进行访问。 2.新增:探索系统,通过新的“附属房间”-“前进营地”开启探索之旅。 3.新增:指挥官衣柜,支持打造个性化的指挥官形象。 4.新增:支持60帧模式,可在“设置”中选择开启。 5.优化:提升前期任务奖励,老用户通过邮件补偿差异部分。 6.优化:缩短登录时用户信息的读取时间。 7.优化:缩短战斗开始时的读取时间。 8.优化:缩短由主界面进入战役选择界面时的读取时间。 9.优化:战斗中范围攻击瞬时产生大量伤害结算时的卡顿问题。 10.优化:在战斗内通过梯队编成进入人形选择界面时的卡顿问题 。 11.优化:加快了宿舍的加载速度。 12.优化:加快了仓库列表的加载速度。 13.优化:回合交替时,行动方动画演示效果展示速度提升。 14.优化:计划模式下我方被动进入战斗/敌方主动攻击我方时,战斗结算界面可自动跳过。 15.优化:增加22:00-1:00的电池收取时间段。 16.优化:装扮礼包支持礼包内容的可预览化。 17.优化:模拟作战支持重复上一次作战的功能。 18.优化:计划模式支持先换位再结束回合的功能。 19.优化:人形图鉴部分显示及操作优化。 20.优化:拆解人形/装备/妖精时,高编制/高等级/高星级单位提示分离。 21.优化:人形/妖精详情界面可以直接赠送礼物,妖精详情界面可跳转至强化。 22.优化:支持不同梯队间的人形互换。 23.优化:情报解析进程中可进行一键领取。 24.优化:游戏内音频音质升级。 25.优化:战区攻略系统玩法的相关优化。</version_desc>
     </config>
    </servers>`
    
    app.listen(80)
    
    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({ extended: true }))
    
    app.all('*',function(req,res) {
      if(req.body.a==='newserverList') {
        res.send(xmlString);
      }else {
        res.send({});
      }
    })
    node test.js  
    # 可以使用PM2后台挂起
  3. 修改host指向

    在模拟器中使用re文件管理器,修改hosts文件,增加以下内容

    因为phone的localhost指向与pc不同,phone指向10.0.2.2;pc指向127.0.0.1

    10.0.2.2 adr.transit.gf.ppgame.com
    10.0.2.2 ios.transit.gf.ppgame.com