我是大哥陈 发表于 2018-5-3 14:43

FGO 1.20 修改抓包简单破解战斗过程【10倍血量10倍攻击】(二)

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

上一篇:
https://www.52pojie.cn/thread-732525-1-1.html

继上一次对请求做了修改之后,一直想在返回值上搞点东西,最近两天经过不断尝试,终于成功了,并对之前的脚本进行了优化:
1.增加了修改战斗请求的判断逻辑:正常胜利或正常失败的话不作修改,撤退的话会改为判定胜利,并将回合数改为3-10之间的随机数,且清空存活敌人ID。
                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"))
                              //      {
                              var tmp = Math.random()*8+3;
                              var val = tmp.toFixed(0);
                                        var turn = /elapsedTurn%22%3a\d+/ig;
                                        str = str.replace(turn,"elapsedTurn%22%3a" + val);
                                        //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);
                              }


                }

2.下面进入正题:通过解码并修改返回数据,来达到修改血量和攻击的目的。
2.1.base64解码
更新了fiddler之后,自带了fiddler scripteditor,里面提供了大部分基本用例,不过还有很多语法不在其中,自行调用Javascript .NET的用法就行,基本都能使用。


查了下base64解码方法很简单,只要调用System.Convert.FromBase64String就行了,但是最坑爹的来了!!!
将返回值直接复制到任何一个解码网站里都能顺利解码,但是脚本就经常报错“输入的不是有效的 Base-64 字符串”,WTF???
花了一天时间找原因,最后终于发现。。。是填充符号的问题,fiddler默认是以ASCII编码的,传过来的填充符号“=”会被解析为“%3d”,也就是“%”符号导致的报错,然而更坑的是打印log的时候“%3d”是打印不出来的,就算转成UTF8也打印不出来!!!导致从日志里根本找不到原因。

所以下面就要干一件很蠢的事:将"%3d"也就是“=”字符删掉,然后再自己加一个"=":
                              oSession.utilDecodeResponse()
                              var i = 0;
                           var str1 = oSession.GetResponseBodyAsString();
                              var wtf = str1.Remove(0,str1.Length-3);
                              while(wtf == "%3D"){
                                        var str1 = str1.Substring(0,str1.Length-3);
                                        wtf = str1.Remove(0,str1.Length-3);
                                        i = i+1;
                                        }
                              if(i == 1){
                                        str1 = str1 + "=";
                                        }
                              if(i == 2){
                                        str1 = str1 + "==";
                                        }      
                        
                              var str2 = System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(str1));
                              FiddlerObject.log("解密后"+ str2);
如此一来终于不报错了,顺利解码出来了,解码后的明文网上有很多,太长了就不放了。
2.2. 定制逻辑,修改想要的数据。
返回的数据中有本次副本所有怪物、人物、宝具的数据,同样参考了https://www.52pojie.cn/thread-698928-1-1.html中的经验,增加一个判定是否为怪物的逻辑就行了。将userID不为空的hp和atk全部加个0,也就是改为10倍。
                              var attack = /userid":"+"atk":"?\d+/gi;
                              var hp = /userid":"+"hp":"?\d+/gi;
                                        if(str2.match(attack)){
                                                FiddlerObject.log("匹配");
                                                str2 = str2.replace(attack,"$&0");
                                                str2 = str2.replace(hp,"$&0");
                                                //FiddlerObject.log("替换后"+ str2);
                                        }
                        
2.3 最后看一下日志,没问题,重新加密回去即可。
                              str2 = System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(str2));
                              oSession.utilSetResponseBody(str2);
2.4 效果截图:
修改前:


修改后:


PS:虽然已经伪装的比较完美了,但是必须借助电脑才行的硬伤依然没解决,之前帖子里大家推荐的几个手机抓包软件我都看了下,都没有修改功能,难受。
照例附上脚本文件和用法:

我是大哥陈 发表于 2018-5-7 13:34

丹下樱 发表于 2018-5-7 13:02
为什么会这样呢?

手机的浏览器看能不能打开百度呢?如果不能说明手机代{过}{滤}理没配置对,或者电脑上监听端口没开。如果能但是提示证书不安全,说明没装证书。

烟雨破解 发表于 2018-8-23 18:50

这东西没啥技术含量,还以为是解密dll呢,这等于就是一个fiddler抓包教程和一个怎么发协议的js教程吧,给菜鸟看还凑合!而且这些协议的分析都是易盾没有加固前的dll分析出来的,噱头而已!

ao610336999 发表于 2018-5-3 15:13

之前有个头脑风暴的辅助,通过本地或者服务器进行抓包在进行修改发送的客户端,作者你可以试试弄在服务器上。相当于游戏通过你的服务器代{过}{滤}理,服务器处理数据,然后在把抓包后修改的数据 发送给客户端

fq645122 发表于 2018-5-3 14:54

攻击力翻倍是吧

ieiqp 发表于 2018-5-3 14:55

教程很详细,希望出更多精品教程

myheartwillg 发表于 2018-5-3 14:58

谢谢楼主的分享哦

shghe 发表于 2018-5-3 15:14

抓来看看什么颜色的猫

15808244862 发表于 2018-5-3 15:52

好厉害,赶紧去试一试

15808244862 发表于 2018-5-3 15:55

真的增加10倍,大佬厉害呀

15808244862 发表于 2018-5-3 16:11

有没有中文的fiddler script的文档啊

我是大哥陈 发表于 2018-5-3 16:25

15808244862 发表于 2018-5-3 16:11
有没有中文的fiddler script的文档啊

没,只有英文的,不过都配了例子,比较简单易懂。
http://docs.telerik.com/fiddler/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: FGO 1.20 修改抓包简单破解战斗过程【10倍血量10倍攻击】(二)