我是大哥陈 发表于 2018-4-28 22:42

FGO 1.20 修改抓包简单破解战斗过程

本帖最后由 我是大哥陈 于 2018-5-3 14:49 编辑

FGO之前的版本Assembly-CSharp.dll文件都没加密,可以随意修改;
而最近1.20版不仅dll文件加密了,连libmono.so也加壳了,IDA解析不出也没法动态调试,看了下https://www.52pojie.cn/thread-697357-1-1.html大神的教程,并没有学会;
想了想,就算dump出了dll文件,也没法加密回去重新打包使用,看来只能放弃修改本地文件了,只能在抓包上搞点东西;
话不多说,直接开始:
1.安装fiddler,在fiddler的设置中打开允许远程连接,并设置模拟器代{过}{滤}理,准备抓包。

2.测试了发现抓到的都是unknown,原来是手机没装证书。。。在fiddler里设置解密HTTPS连接,并在手机上安装证书。

3.运行游戏,进入战斗,终于能抓到ac.php了,但是返回的都是加密数据,https://www.52pojie.cn/thread-698928-1-1.html的楼主写了破解脚本,但是似乎没带base64解密功能,我还不会fiddler的base64解密语法怎么写。。。尴尬

4.无奈退出战斗,抓到游戏发出了一个战斗结果的请求,惊喜地发现里面居然是明文,而且其中还带着battleresult字段,因为之前搞过未加密的FGO,知道这个字段1代表胜利,2代表失败,3代表退出。

5.写规则将battleresult强行改为1,果然成功了!每次进战斗只要退出就算胜利。
static function OnBeforeRequest(oSession: Session) {
if (oSession.url.Contains("ac.php")){
var str = oSession.GetRequestBodyAsString();
str = str.replace("battleResult%22%3a3", "battleResult%22%3a1");
oSession.utilSetRequestBody(str);
}
}

6.为了保险,又正常刷了个图,比较一下正常请求和修改请求的区别:
正常请求:
{"battleId":63315937,"battleResult":1,"scores":"","action":"","elapsedTurn":3,"aliveUniqueIds":[],"battleStatus":3404360355,"voicePlayedList":"[]"}
修改的请求:
{"battleId":63315800,"battleResult":1,"scores":"","action":"","elapsedTurn":1,"aliveUniqueIds":,"battleStatus":2776095253,"voicePlayedList":"[]"}

发现elapsedTurn和aliveUniqueIds有很大不同,elapsedTurn应该是回合数,修改版1回合就结束战斗了,太假;aliveUniqueIds应该是存活的怪物ID,修改版还有这么多怪活着呢阿喂怎么就胜利了呢!
7.修改脚本,伪装elapsedTurn和aliveUniqueIds:
static function OnBeforeRequest(oSession: Session) {
if ((null != gs_ReplaceToken) && (oSession.url.indexOf(gs_ReplaceToken)>-1)) {   // Case sensitive
            oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith);
      }
                if (oSession.url.Contains("ac.php")){
                        oSession["ui-color"] = "red";
                        var str = oSession.GetRequestBodyAsString();
                        if(str.Contains("battleResult%22%3a2") || str.Contains("battleResult%22%3a3"))
                              {
                              if(str.Contains("battleResult%22%3a3"))
                                        {
                                        str = str.replace("elapsedTurn%22%3a1%2c%22","elapsedTurn%22%3a8%2c%22");
                                        str = str.replace("elapsedTurn%22%3a2%2c%22","elapsedTurn%22%3a8%2c%22");
                                        }

                              str = str.replace("battleResult%22%3a3", "battleResult%22%3a1");
                              str = str.replace("battleResult%22%3a2", "battleResult%22%3a1");
                              var regex1 = /aliveUniqueIds%22%3a%5b([\d+,%2c]+)%5d/gi;
                              str = str.replace(regex1,"aliveUniqueIds%22%3a%5b%5d");

                              //FiddlerObject.log(str);
                              oSession.utilSetRequestBody(str);
                              }


                }
8.试了一下,最终修改后的请求和正常刷图的请求暂时没发现太大不同,只要过图时间不要太短,应该没啥问题。
附上脚本文件,祝大家肝的开心。
就是操作有些繁琐,暂时又没找到手机上能抓包并修改的App,如果各位见过麻烦推荐下。


下一篇:
https://www.52pojie.cn/thread-734393-1-1.html

QB56 发表于 2018-4-30 07:35

昨天按照楼主说的,尝试了一下,确实能成功,手机只要下个官网的fgo,不需要什么破解,连上电脑的WiFi,准备工作完成后,进战斗开图,退出就能获胜,材料,经验,奖励都会给,只是没结算页面而已。可以说是秒刷了,但这容易被服务端检测出来,因为时间太短了,数据包那里有个lasttime之类的东西,进图前会记录一次,结束后会记录一次,就是战斗时间,只要进图后等个一两分钟,然后退出,加上楼主的回合数和剩余怪的修改,基本上只要不要刷得太快,应该很难检测出来,当然,奉劝一句,别拿大号作死,用挂迟早会被封的。

ren332427516 发表于 2018-4-29 18:56

路过看看。。。。

世夕 发表于 2018-4-28 23:13

厉害了 期待发布

MAKEYZH 发表于 2018-4-29 00:12

感谢分享!!!

百到真人 发表于 2018-4-29 00:30

学习大牛的作品!!

qaz003 发表于 2018-4-29 00:40

利害。。。曲线救国呀。。。思路很清析,谢谢分享

北岛未 发表于 2018-4-29 01:26

感谢大佬教程

sfz032 发表于 2018-4-29 01:51

跪看大佬

Noir夜祀 发表于 2018-4-29 02:39

这个思路有点类似于之前iOS科技的思路哇

qq327594197 发表于 2018-4-29 06:39

观摩观摩....{:1_927:}

haoxiangzuo 发表于 2018-4-29 08:37

谢谢楼主分享
页: [1] 2 3 4 5 6
查看完整版本: FGO 1.20 修改抓包简单破解战斗过程