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:02
为什么会这样呢?
手机的浏览器看能不能打开百度呢?如果不能说明手机代{过}{滤}理没配置对,或者电脑上监听端口没开。如果能但是提示证书不安全,说明没装证书。 这东西没啥技术含量,还以为是解密dll呢,这等于就是一个fiddler抓包教程和一个怎么发协议的js教程吧,给菜鸟看还凑合!而且这些协议的分析都是易盾没有加固前的dll分析出来的,噱头而已! 之前有个头脑风暴的辅助,通过本地或者服务器进行抓包在进行修改发送的客户端,作者你可以试试弄在服务器上。相当于游戏通过你的服务器代{过}{滤}理,服务器处理数据,然后在把抓包后修改的数据 发送给客户端 攻击力翻倍是吧 教程很详细,希望出更多精品教程 谢谢楼主的分享哦 抓来看看什么颜色的猫 好厉害,赶紧去试一试
真的增加10倍,大佬厉害呀 有没有中文的fiddler script的文档啊 15808244862 发表于 2018-5-3 16:11
有没有中文的fiddler script的文档啊
没,只有英文的,不过都配了例子,比较简单易懂。
http://docs.telerik.com/fiddler/KnowledgeBase/FiddlerScript/ModifyRequestOrResponse