1、申请ID: 洛言
2、个人邮箱: 173718794@qq.com
3、文章:
(看到论坛一篇Net逆向,就跑过来水一下,看下能不能过233)
工具:
1、dnSpy
2、Notepad++(笔记本应该也行)
目标:(游戏:Rmlyc3QlMjBTdHJpa2UlMjBGaW5hbCUyMEhvdXI=)
把某人没有填上的 “扫描无冷却” 给填上
正文:
最开始肯定是用dnSpy载入 Assembly-CSharp.dll 啊(笑
(然后对着一堆命名空间一脸懵逼)
我们也不可能一个个函数去看,所以得用到强大的搜索工具,先查一下扫描的英文
(剧透狗:然鹅都不是)
一个个看
然后发现没一个是
有几个很像的是Iron Dome,这是一个超武,直接略过
然后线索就断了
没错,断了
但是一切功能都在游戏里面有体现
我直接看看游戏的文本就行了
打开游戏后,我发现我实在是太嫩了
战术高亮系统
得,我查查
(然鹅P都没有)
几经思考,我决定翻游戏的文本文件
翻了翻目录
一下子就找到了(熟练地打开了StreamingAssets)
点进去,Zh-hans,打开Localizable.strings
先用Notepad++试试(然后上垒了)
(
吐槽:众所周知,StreamingAssets的文件不会被加密
所以一下子就打开了
)
找到对应科技的名字
对比一下
特征码是 “09_TN”
8用说,直接搜字串符
跳转到指定函数
[C#] 纯文本查看 复制代码 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], 0.02f));
/*废话*/
}
/*废话*/
}
}
唉哟,上面的techTree真显眼,毫无疑问,这肯定很重要,毕竟branch是TechTree.Branches类型的,二话不说肯定点进去啦!
太棒了,是科技类型
往上翻翻,一下子就找到了ApplyResearch函数
[C#] 纯文本查看 复制代码 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!
这么大的HUDButton,肯定是了
找到OnClick,感觉很不对劲
[C#] 纯文本查看 复制代码 protected virtual void OnClick()
{
if (this.selected && !this.buttonEnabled)
{
this.AbortAction();
return;
}
}
打开AbortAction函数
[C#] 纯文本查看 复制代码 public virtual void AbortAction()
{
this.selected = false;
this.Player.AbortCommand();
this.Player.selectedTargetCount = 0;
this.EnableButton();
}
果然是个接盘侠(从代码可知这是增加健壮性的函数)
右键分析
一下子就找到正主了
(嘿嘿嘿,你叫破喉咙也没有用)
打开后发现高亮控制的OnClick调用了HUDButton的OnClick和DoHighlighting
毫无疑问
看DoHighlighting的代码
[C#] 纯文本查看 复制代码 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
[C#] 纯文本查看 复制代码 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(理由同上)
最后,大功告成! |