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 昨天按照楼主说的,尝试了一下,确实能成功,手机只要下个官网的fgo,不需要什么破解,连上电脑的WiFi,准备工作完成后,进战斗开图,退出就能获胜,材料,经验,奖励都会给,只是没结算页面而已。可以说是秒刷了,但这容易被服务端检测出来,因为时间太短了,数据包那里有个lasttime之类的东西,进图前会记录一次,结束后会记录一次,就是战斗时间,只要进图后等个一两分钟,然后退出,加上楼主的回合数和剩余怪的修改,基本上只要不要刷得太快,应该很难检测出来,当然,奉劝一句,别拿大号作死,用挂迟早会被封的。 路过看看。。。。 厉害了 期待发布 感谢分享!!! 学习大牛的作品!! 利害。。。曲线救国呀。。。思路很清析,谢谢分享 感谢大佬教程
跪看大佬 这个思路有点类似于之前iOS科技的思路哇 观摩观摩....{:1_927:} 谢谢楼主分享