发表于 2019-7-12 17:19

申请会员ID:洛言

1、申请ID:          洛言
2、个人邮箱:      173718794@qq.com
3、文章:
(看到论坛一篇Net逆向,就跑过来水一下,看下能不能过233)

工具:
1、dnSpy
2、Notepad++(笔记本应该也行)

目标:(游戏:Rmlyc3QlMjBTdHJpa2UlMjBGaW5hbCUyMEhvdXI=)
把某人没有填上的 “扫描无冷却” 给填上


正文:

最开始肯定是用dnSpy载入 Assembly-CSharp.dll 啊(笑
https://i.loli.net/2019/07/12/5d284dfbdbdf992327.jpg
(然后对着一堆命名空间一脸懵逼)

我们也不可能一个个函数去看,所以得用到强大的搜索工具,先查一下扫描的英文
https://i.loli.net/2019/07/12/5d284dfbdb9f266923.jpg
(剧透狗:然鹅都不是)

一个个看
然后发现没一个是
有几个很像的是Iron Dome,这是一个超武,直接略过
https://tvax1.sinaimg.cn/large/0060lm7Tly1g4x6a5qz51j316j01v0so.jpg

然后线索就断了
没错,断了
但是一切功能都在游戏里面有体现
我直接看看游戏的文本就行了
https://i.loli.net/2019/07/12/5d284dfbc27bb77024.jpg
打开游戏后,我发现我实在是太嫩了
战术高亮系统

得,我查查
https://tva1.sinaimg.cn/large/0060lm7Tly1g4x67zuq1fj316v041aa8.jpg
(然鹅P都没有)

几经思考,我决定翻游戏的文本文件
翻了翻目录
一下子就找到了(熟练地打开了StreamingAssets)
https://i.loli.net/2019/07/12/5d284dfb919f764300.jpg
点进去,Zh-hans,打开Localizable.strings
先用Notepad++试试(然后上垒了)

吐槽:众所周知,StreamingAssets的文件不会被加密
所以一下子就打开了

https://tvax1.sinaimg.cn/large/0060lm7Tly1g4x69a0hqvj30u00frac0.jpg

找到对应科技的名字
对比一下
特征码是 “09_TN”
8用说,直接搜字串符
https://tvax1.sinaimg.cn/large/0060lm7Tly1g4x6b2rjkfj30fp02z747.jpg
跳转到指定函数
public void HighlightTechSelection(TechTree.Branches branch, int level_onebased)
{
      this.upgradebutton.SetActiveRecursively(false);
      if (this.techTree.BranchIsAvailable(branch))
      {
                string branchLetter = this.GetBranchLetter(branch);
                if (level_onebased > 0)
                {
                        base.StartCoroutine(this.DecodeText(LocalizationManager.getLocalizedString("09_TN_" + ((int)(branch * (TechTree.Branches)5 + (level_onebased - 1))).ToString(), "---"), this.techtreetext, 0.02f));
                        /*废话*/
                }
                /*废话*/
      }
}

唉哟,上面的techTree真显眼,毫无疑问,这肯定很重要,毕竟branch是TechTree.Branches类型的,二话不说肯定点进去啦!
https://tvax1.sinaimg.cn/large/0060lm7Tly1g4x6bspfllj309a05rwel.jpg
太棒了,是科技类型
往上翻翻,一下子就找到了ApplyResearch函数
private void ApplyResearch(TechTree.Branches branch, int level)
{
    switch (branch)
    {
      /*废话*/
      case TechTree.Branches.RECON://大大的RECON
            if (this.alliance.IsHuman)
            {
                switch (level)
                {
                  case 1:
                        if (this.TechTreeUpdateEvent != null)
                        {
                            TechTreeUpdateArgs techTreeUpdateArgs5 = new TechTreeUpdateArgs();
                            techTreeUpdateArgs5.Type = TechTreeUpdateArgs.UpdateTypes.FogOfWarEnd;
                            this.TechTreeUpdateEvent(this, techTreeUpdateArgs5);
                        }
                        break;
                  case 2:
                        if (this.TechTreeUpdateEvent != null)
                        {
                            TechTreeUpdateArgs techTreeUpdateArgs6 = new TechTreeUpdateArgs();
                            techTreeUpdateArgs6.Type = TechTreeUpdateArgs.UpdateTypes.HUDHighlightAvailable;//这是要找的
                            this.TechTreeUpdateEvent(this, techTreeUpdateArgs6);
                        }
                        break;
                        /*废话*/
                }
            }
            break;
            /*废话*/
    }
    /*废话*/
}
一下子就找到了关键字HUDHighlightAvailable

搜索HUD!
https://i.loli.net/2019/07/12/5d284dfbb668370138.jpg
这么大的HUDButton,肯定是了
找到OnClick,感觉很不对劲
protected virtual void OnClick()
{
    if (this.selected && !this.buttonEnabled)
    {
      this.AbortAction();
      return;
    }
}
打开AbortAction函数
public virtual void AbortAction()
{
    this.selected = false;
    this.Player.AbortCommand();
    this.Player.selectedTargetCount = 0;
    this.EnableButton();
}
果然是个接盘侠(从代码可知这是增加健壮性的函数)

右键分析
一下子就找到正主了
https://s2.ax1x.com/2019/07/12/ZfAvt0.jpg
(嘿嘿嘿,你叫破喉咙也没有用)

打开后发现高亮控制的OnClick调用了HUDButton的OnClick和DoHighlighting
毫无疑问
看DoHighlighting的代码
protected void DoHighlighting(float startWith = 0f)
{
    this.cooldownProgress = startWith;
    if (HighlightController.HighlightEvent != null)
    {
      HighlightController.HighlightEvent(this, new EventArgs());
    }
    this.statusText.text = LocalizationManager.getLocalizedString("14_cooldown", "---");
    this.statusText.CheckOverset();
    this.statusText.Commit();
    base.ShowProgressBar(60f, startWith);
}
14_cooldown的文本是“冷却”,8用说了

立刻看ShowProgressBar
public void ShowProgressBar(float time, float startWith = 0f)
{
    this.inProgress = true;
    this.DisableButton();
    this.progressBar.DoCountown(time, startWith);
}

很明显,就是冷却控制函数
因为要改这个就可能会留下许多问题
(例如其他地方DisableButton,却少了这玩意恢复)
秉承能少做事绝不多做的原则
改ShowProgressBar(60f, startWith) (笑
改60f成0.01f(理由同上)

最后,大功告成!

Hmily 发表于 2019-7-15 13:46

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。

21号自己来注册吧。
页: [1]
查看完整版本: 申请会员ID:洛言