本帖最后由 我是大哥陈 于 2018-5-3 14:48 编辑
上一篇:
https://www.52pojie.cn/thread-732525-1-1.html
继上一次对请求做了修改之后,一直想在返回值上搞点东西,最近两天经过不断尝试,终于成功了,并对之前的脚本进行了优化:
1.增加了修改战斗请求的判断逻辑:正常胜利或正常失败的话不作修改,撤退的话会改为判定胜利,并将回合数改为3-10之间的随机数,且清空存活敌人ID。
[JavaScript] 纯文本查看 复制代码 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"也就是“=”字符删掉,然后再自己加一个"=":
[JavaScript] 纯文本查看 复制代码 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倍。
[JavaScript] 纯文本查看 复制代码 var attack = /userid":"[0-9,":\w]+"atk":"?\d+/gi;
var hp = /userid":"[0-9,":\w]+"hp":"?\d+/gi;
if(str2.match(attack)){
FiddlerObject.log("匹配");
str2 = str2.replace(attack,"$&0");
str2 = str2.replace(hp,"$&0");
//FiddlerObject.log("替换后"+ str2);
}
2.3 最后看一下日志,没问题,重新加密回去即可。
[JavaScript] 纯文本查看 复制代码 str2 = System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(str2));
oSession.utilSetResponseBody(str2);
2.4 效果截图:
修改前:
修改后:
PS:虽然已经伪装的比较完美了,但是必须借助电脑才行的硬伤依然没解决,之前帖子里大家推荐的几个手机抓包软件我都看了下,都没有修改功能,难受。
照例附上脚本文件和用法:
fgo_1.20.1_sem_545125.V3.zip
(315.01 KB, 下载次数: 1547)
|