吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5545|回复: 30

[Android 原创] 记一次FGO逆向过程 End

  [复制链接]
发表于 2018-2-13 14:26 | 显示全部楼层
本帖最后由 ss22219 于 2018-3-5 16:48 编辑

上一篇说到成功解析了服务器请求的加密和校验

这一篇简单分析下战斗数据吧


ac.php post:
acaction
keybattlesetup

请求参数这里就不多讲诉了,想要了解这些如何填入这些参数,可以从游戏源码,以及FGO管理系统中查获
base64解码并UTF8编码转换成字符串后


[JavaScript] 纯文本查看 复制代码
{
  "response": [
    {
      .....
      "isEncrypt": 1,
      .....
    }
  ],
  "cache": "xxx"
}



战斗请求返回信息里面看到有一个cache是base64编码的
直接base64解码,发现是一堆乱码

在源代码里查找FromBase64String的引用,发现ResponseCacheDecrypt方法
查看ResponseCacheDecrypt方法引用

[C#] 纯文本查看 复制代码
if (serverMark)
{
        string cryptString = (string)wwwparam["cache"];
        string cacheString = string.Empty;
        try
        {
                cacheString = CryptData.ResponseCacheDecrypt(cryptString, false);
        }


这里发现,如果返回的信息包含isEncrypt=1,那么就执行ResponseCacheDecrypt
[JavaScript] 纯文本查看 复制代码
serverMark = (responseData.isEncrypt != 0);


对cache使用ResponseCacheDecrypt,然后得出战斗返回数据
这个数据包含了玩家svt信息,也包含了怪物的信息


我们写一个Fiddler插件,解析内容

判断url,base64解码返回值
[C#] 纯文本查看 复制代码
        public void AutoTamperResponseBefore(Session oSession)
        {
            if (oSession.url.IndexOf("/ac.php?_userId=") != -1)
            {


解码cache,改写isEncrypt=0
[C#] 纯文本查看 复制代码
                    var root = JsonConvert.DeserializeObject<JObject>(content);

                    var response = (JObject)root.SelectToken("response[0]");

                    var isEncrypt = response.Property("isEncrypt");

                    isEncrypt.Value = 0;
                    File.WriteAllText(@"C:\Users\gool\Desktop\project\fgo\cache.json", ResponseCacheDecrypt(root.SelectToken("cache").ToString()));


我们将cache保存到cache.json文件分析

可以看到其中有很多数据,进过反复对比确认

replaced.battle[0].battleInfo.userSvt包含了本次战斗的从者数据
updated.userSvtCollection包含了助战的一些信息

对于脱机战斗来说我们没必要解析这些信息
不过可以编写一个脚本,让Fiddler帮助我们来修改这些数据

获取助战svtId:
[C#] 纯文本查看 复制代码
        List<int> GetFollowerSvtIds(JObject cacheObj)
        {
            var list = new List<int>();
            var array = (JArray)cacheObj.SelectToken("updated.userSvtCollection");
            if (array == null)
                return list;
            for (int i = 0; i < array.Count; i++)
            {
                var svt = (JObject)array[i];
                list.Add(svt.Property("svtId").Value.Value<int>());
            }
            return list;
        }


判定是否是怪物,修改基础数据
[Asm] 纯文本查看 复制代码
        void ReplaceSvtInfo(JArray svts, List<int> followers)
        {
            FiddlerApplication.Log.LogString("ReplaceSvtInfo");
            for (var i = 0; i < svts.Count; i++)
            {
                var svtObj = (JObject)svts[i];
                if (svtObj.Property("userId").Value.ToString() == "0" && !followers.Contains(svtObj.Property("svtId").Value.Value<int>()))
                {
                    if (svtObj.Property("atk") != null)
                    {
                        svtObj.Property("atk").Value = 10;
                        svtObj.Property("hp").Value = 40000;
                    }
                }
                else
                {
                    if (svtObj.Property("atk") != null)
                    {
                        svtObj.Property("atk").Value = 80000;
                        svtObj.Property("hp").Value = 80000;
                    }
                    else if (svtObj.Property("maxAtk") != null)
                    {

                        svtObj.Property("maxAtk").Value = 80000;
                        svtObj.Property("maxHp").Value = 80000;
                    }
                }
                svts[i] = svtObj;
            }
        }




===========================================

FGO系列到此一共6章,也该结束了
1-3章记录了Native层的一些逆向技巧
4章简单说明了下Android Java层的调试方法
5-6章是游戏源代码的分析


虽然有很多遗憾,也有不少迷惑,但是也有不少收获




有朋友说想让我总结一下,但是我发现我实在总结不出什么东西来。。。

作为一名小白,一步步走到这里,发现很多都是以前积累的知识的运用

逆向的关键就是找到关键代码,比如在mono函数查找中,利用开源代码,一步步找到image_open函数
在java和c#代码分析中,利用login md5 base64这些关键词,往往能找到不少关键函数


实在想不出其他要说的,这个系列说了这么多东西,就放下脚本代码给大家用下吧



最后,祝大家新年快乐!


FGOModify.zip

223.65 KB, 下载次数: 232, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 16吾爱币 +17 热心值 +16 收起 理由
wmsuper + 2 + 1 谢谢@Thanks!
九门提督定风波 + 1 + 1 热心回复!
zycode + 1 + 1 谢谢@Thanks!
天阙丶 + 1 + 1 谢谢@Thanks!
isora + 1 + 1 热心回复!
walkersky + 1 + 1 谢谢@Thanks!
STSnaive + 1 + 1 dalao厉害,好奇抽卡机制
unlockable + 1 + 1 用心讨论,共获提升!
花火Cage + 1 + 1 厉害了!其实抽奖功能是比较受关注的,抽奖的随机方式。
民以玩为天 + 1 + 1 我很赞同!
幻灵 + 1 + 1 谢谢@Thanks!
忒伊亚 + 1 + 1 谢谢@Thanks!
niconico128 + 1 + 1 热心回复!
winding + 1 + 1 大牛,仰望
dwq308 + 1 + 1 我很赞同!
boyulin + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-5-7 15:49 | 显示全部楼层
ss22219 发表于 2018-2-13 16:14
没有哦,这个自己分析吧

大大,你好呢,看了你这个脱机逆向,这里面的 ,下面三个数值,1.32.1519070400   这三个数值是什么意思呢,这是 目前fgo里面,脱机挂Program.cs里的三个,可以帮我解答下吗?
"aK8mTxBJCwZyxBjNJSKA5xCWL7zKtgZEQNiZmffXUbyQd5aLun",
                "/rongame_beta/rgfate/60_member/",
                "/rongame_beta/rgfate/60_1001/",
                "1",
                "32",
                "1519070400",

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2018-2-13 16:14 来自手机 | 显示全部楼层
boyulin 发表于 2018-2-13 15:40
想問一下  陸板fgo 沒禁止在模擬器使用嗎
台服好像會限制  有的話  沒看到大大 介紹這方面的處理

没有哦,这个自己分析吧

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 14:34 | 显示全部楼层
不知道怎么修改日服?Fiddler代{过}{滤}理也可行?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2018-2-13 14:37 | 显示全部楼层
jianghanxia 发表于 2018-2-13 14:34
不知道怎么修改日服?Fiddler代{过}{滤}理也可行?

应该没问题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 14:41 | 显示全部楼层
谢谢分享!学习了!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 15:40 | 显示全部楼层
想問一下  陸板fgo 沒禁止在模擬器使用嗎
台服好像會限制  有的話  沒看到大大 介紹這方面的處理

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 15:42 | 显示全部楼层
00000000000000000000000000000000000

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 16:16 | 显示全部楼层
ss22219 发表于 2018-2-13 16:14
没有哦,这个自己分析吧

好的謝謝

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 16:49 | 显示全部楼层
謝謝分享,新年快乐!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-13 17:15 | 显示全部楼层
测试了一下,日服不能正常运行,应该是加密不一样~

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

RSS订阅|手机版|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2018-8-17 00:05

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表