kengwang 发表于 2019-4-21 12:19

[二改]某(核弹)破解教程(分析)

本帖最后由 云在天 于 2019-6-7 13:01 编辑

# 二改说明

作者在此给坛友道个歉,当时撰写时确实时间没多少,赶着上课,所以质量不高,所以来一次二次更改!希望这一次的可以让更多人理解.也希望大家有建议也可以提出,看到后会回复.

20190426 25:35:18 下暴雨了,明天继续

20190427 08:50:29 继续更新!

## 问&答

因为有很多坛友都在问一些问题,就在这里回答了吧.

Q1: 请问破解的软件是什么,可以发一下吗

A1: Dnspy 建议到爱盘上下载!

直链 (https://down.52pojie.cn/Tools/NET/dnSpy.zip)



Q2:破解的是电脑版还是手机版

A2:电脑版,手机版的话安卓可以解包后编辑Assembly-CSharp.dll 应该是差不多的方法吧

安卓的这个文件可能在assets/bin/Data/Managed/Assembly-CSharp.dll

思路差不多,毕竟一个人写出来的



## 修改内容

这个星期和aaaaaaccd交流了一下,发现了一些新的破解方法,也在他的说下发现了一些没有破解到的地方

- 超级武器研究&建造时间√
- 成就全解锁√
- 攻击&防御的冷却√
- 有一个国家没有解锁(哈萨克斯坦)√
- 其他国家的速度也很快!
- ~~自动防御有时会有问题(自动防御其实可以不需要,研究就行了)~~

二改之后会 修改一下之前的思路,然后修改

# 前言

第一次在52破解发帖,也不知道发到哪个区,干脆发到脱壳破解区吧.

核弹先发制人这款游戏还是aaaaaaccd推荐的,他说想找一个破解教程,52上逛了一圈,好像还没有,就自己发个坑吧......

# 简介游戏

这款游戏是一个即时性战略游戏,你有几个操作:

1. 攻击
2. 防御
3. 拓宽领土
4. 研究新武器/新技能

每一个都需要时间,时间就是这个游戏中的金钱......

emm,怎么说呢......下载游戏了就知道了!!



# 确定方向

首先我们要破解的话,要确定好破解的方向.目前我们就讲讲一下几个吧

1. 国家全解锁
2. 自动防御默认开启
3. 无建造时间(这个稍稍有点困难)
4. (未完待续)

# 开场分析,寻找破解软件

这个是用的Unity写的,而且还是用的Mono打包(嘿嘿),找到 .\FirstStikeFinalHour_Data\Managed\Assembly-CSharp.dll抱着试一试的态度打开Dnspy,一拖......

!(https://s2.ax1x.com/2019/04/21/EiIv1H.png)

这下就用这Dnspy搞事情吧 /坏笑

# 国家全解锁

## 普通国家

首先,我们看得到,开始是只有美国是解锁的,中国是没有解锁的.我们就来解锁吧.

这个比较简单,字符搜索一下就ok了.

!(https://s2.ax1x.com/2019/04/21/EioCHP.png)

可以看到,这边有一个 **UnlockManager** 这个类,肯定就是他了!双击点进去.在这个UnlockManager里面乱翻,得到一个方法 **IsAllianceUnlocked** 嗯,我们来看一看这个的代码

[!(https://s2.ax1x.com/2019/04/21/Eiok4S.png)](https://imgchr.com/i/Eiok4S)

他switch国家名称(姑且叫名称吧,其实是另一种数据类型),然后返回那个国家解锁否.emm,我们看看,这个方法的返回值是一个布尔值,而Default是false,那么我们就让他返回True吧! 点击右键->编辑方法

方法内全部内容删掉,只留下return true; 然后再编译

成果图:

[!(https://s2.ax1x.com/2019/04/21/EioQEV.png)](https://imgchr.com/i/EioQEV)

## 哈萨克斯坦

谷歌翻译 哈萨克斯坦=>Kazakhstan

Dnspy寻找一下呗,还是在UnlockMananger里面

有一个**GrantAccessToKazahstan**

也不知道是干什么的,好像是解锁哈萨克斯坦的,这个怎么改呢,我们分析一下代码

```c#
public void GrantAccessToKazahstan()
      {
                if (!this.unlockedKazakhstan)
                {
                        this.unlockedKazakhstan = true;
                        this.SaveState();
                }
      }
```



似乎是说假如说没有解锁就解锁,emm,那我们就把它放到**LoadState**语句吧

```c#
public void LoadState()
      {
                this.GrantAccessToKazahstan();
                   .......
      .......
      }
```



嘿嘿,既然到这里找到了UnlockManager,下面一个方法不就是**IsSuperWeaponUnlocked**



# 解锁成就

还是在这个UnlockManager里面

**CheckGoalFinish**函数全部返回Ture ,像国家一样

## 解锁超级武器

仍然这样吧,全部返回True,运行一下看看

!(https://s2.ax1x.com/2019/04/21/EioRbt.gif)

嗯,已经全部弄好了呢!,解锁的话就在**UnlockManager**还有什么别的解锁需求可以自己改哦!

# 无等待时间

## 防御&攻击无冷却

还在研究,下个星期和aaaaaaccd一起研究一下!

可能是这样

在**NationModel**里面的**RequestRocketLaunch**函数

```c#
if (flag)
                        {
                              this._numAttacksOverall++;
                              this.CurrentState = NationState.States.cooldown;
                              this.view.WaitAfterLaunch(agent, 30f);
                        }
```



把他注释后成为

```c#
if (flag)
                        {
                              this._numAttacksOverall++;
                              //this.CurrentState = NationState.States.cooldown;
                              //this.view.WaitAfterLaunch(agent, 30f);
                        }
```



**RequestInterceptorLaunch**也是注释掉这样的语句

但是这样的话,他的武器显示不会更新,所以我们就加一个

```c#
this.UpdateWeaponBar();
```



emm,就加载之前注释的地方吧

## 建造无时间



~~我们就着简单的来,搜寻build,结果搜索结果一堆,那干脆搜索ICBM吧.~~

~~忽然发现了onBuildICBM,点进去一路追查,走到了**BuildRocket**~~

~~里面就是了!~~

~~我们把this.CurrentState = NationState.States.building;可以注释掉,让他认为这个还没有正在建造~~

~~然后发现一个更神奇的 this.arsenal.TotalRocketCapacity~~

~~嗯,追踪过去,让他返回10(最多建造10个)合理更改,免得游戏炸掉哦!~~

↑↑↑↑这个可能导致游戏崩溃,不建议修改!



其实在另一个**BuildRocketSub**里面还有东西!追踪到 GetTimeToBuildRocket 嗯,这个就是建造时间

我们直接让他返回0(似乎返回的试float,dnspy会自动加上f)

嘿嘿,这里好像都是和时间有关,看见GetTimeToXX全部返回0吧!

就这样吧!

## 超级武器研究&建造无冷却

搜索一下*Super time* ,一路跟踪到**SuperWeaponManagerModel**下面的**GetProgressTime** 这个应该就是返回的吧,我们直接让他返回0f

不过这样就有问题了,试试0.1f

0.1f可以通过,总之这个地方不能是0,似乎要执行一个时间减然后才可以解锁Button

## 扫描无冷却

还在寻找突破口!

# 自动防御

emm,直接说吧

寻找auto,看到个autoDefendeEnabled,我们往上翻,看到AutoDefenseEnabled函数里面设置了他的值,改成返回true

isfull也顺便改了,false



# 成就全解锁

UnlockManager改CheckGoalFinish改成

```c#
public bool CheckGoalFinish(int mission)
      {
                return true;
      }
```



# 变态版改变

这些建议不改,影响游戏体验,而且其他国家也会一样的执行修改后的操作

## 地区不被毁灭

NationModel里面的**ReceiveDamage**函数

```c#
if(this._health.Health <= 0){
    ...
}
```

改为

```c#
if(false){
...
}
```



**LooseNation**函数里面全部注释掉,**OnBurn**函数也全部注释掉

# 小结

这次可能有点乱,有问题,或者很多方面做得不好,这只是提供了一个思路,也希望52的坛友们能补充和尝试!

©Kengwang



假如说aaaaaaccd看到了的话:)

当前破解版版本链接(第二版): 链接: https://pan.baidu.com/s/1CQ4bhfFkAOI-ClJYGiL0Og 提取码: wc5j

kengwang 发表于 2019-4-21 12:46

本帖最后由 kengwang 于 2019-4-27 10:33 编辑

修改了一下,现在可以很爽了,我干脆把改好的DLL给大家
解压后放到 .\FirstStikeFinalHour_Data\Managed

kengwang 发表于 2019-4-21 12:43

wear90 发表于 2019-4-21 12:27
希望楼主把破解使用的软件发一发

爱盘上面有,Dnspy,直接搜索哦!

kengwang 发表于 2019-4-21 12:25

等下,好像开始不了游戏了......
重新完整再破一下

wear90 发表于 2019-4-21 12:27

希望楼主把破解使用的软件发一发

Windows10 发表于 2019-4-21 13:06

感谢分享教程

hmeng 发表于 2019-4-21 13:32

感谢分享教程

xztyx 发表于 2019-4-21 13:38

学习了~~谢谢~~很好很强大~!

hyqhy 发表于 2019-4-21 15:29

支持一下

袁煜914 发表于 2019-4-21 15:49

页: [1] 2
查看完整版本: [二改]某(核弹)破解教程(分析)