实战破解网游游戏源码篡改游戏结果为胜利

  • A+
所属分类:安全文章

实战破解网游游戏源码篡改游戏结果为胜利


修改游戏:“大学生联盟”

使用到工具:IDE 3.1.0.0

           .NET Reflector 8.2.0.42

打开assetsbinDataManaged目录下的Assembly-CSharp.dll文件。

实战破解网游游戏源码篡改游戏结果为胜利


分析过程就不细说了,F3  ctrl + m  win 选择精准匹配。

实战破解网游游戏源码篡改游戏结果为胜利

我们锁定Menber = winDeclaring Type = BattleState这行,双击进去,顺便看看BattleState这个类都有些什么相关的信息。

实战破解网游游戏源码篡改游戏结果为胜利

实战破解网游游戏源码篡改游戏结果为胜利

(截取不完整,只看看它的方法吧。)

AllEnemiesDead() : Boolean 所有敌人死亡

AllHeroDead() : Boolean 所有英雄死亡

EndBattle() : Void 结束战斗

............................

............................

这里我们把直接胜利,比喻成我们想添加的toast,想让toast在启动的时候显示,就要找到主启动的activity添加进去。

Win() : Void 右键Analyze或者ctrl + r →点加号或双击 used By看下。

实战破解网游游戏源码篡改游戏结果为胜利

BattleState.Win() : Void

         DependsOn

         UsedBy

                   BattleState.Update() : Void #同在BattleState类下的方法

                   PlayerCmder.Reconnect(FullPlayerWrap) : Void #PlayerCmder类下的方法

不舍近求远,看看Update() : Void

public override void Update()

{

    base.Update();

    if ((this.m_status == Status.Init)&& (BattleApp.aBattle != null))

    {

        this.m_status = Status.Runing;

    }

    if (BattleApp.aBattle != null)

    {

        if (this.m_status == Status.BattleEndTutorial)

        {

            if (Singleton<TutorialManager>.Get().IsTutorialFinishOp(this.m_battleEndTutorial))

            {

                if (this.m_result == BattleResult.Win)

                {

                   this.Win();

                }

                else if (this.m_result == BattleResult.Lose)

                {

                   this.Loss();

                }

            }

        }

        else

        {

            if (!this.m_bTriggerStartEvent && (this.ElapseTime > 0x9c4L))

            {

                this.m_bTriggerStartEvent = true;

                Singleton<TutorialManager>.Get().SendEvent(new BattleStart());

            }

            if (!this.m_bTrriggerWaveStartEvent && (this.ElapseTime > 0x9c4L))

            {

                this.m_bTrriggerWaveStartEvent = true;

                Singleton<TutorialManager>.Get().SendEvent(new WaveStart(this._curWave));

            }

            bool flag= false;

            if (!this.PauseTime && !this.WaveCleared)

            {

                this.RemainTime -= App.Clock.DeltaMillis;

                if ((this.RemainTime <= 0L) || this.AllHeroDead())

                {

                   flag = true;

                   this.m_result = BattleResult.Lose;

                }

                if (this.AllEnemiesDead())

                {

                   this._waveCleared = true;

                   if (this.CurWave == this.MaxWave)

                   {

                       flag = true;

                       this.m_result = BattleResult.Win;

                   }

                   else

                   {

                       this.ClearWave();

                   }

                }

                if (flag)

                {

                   this.OnBattleEnd();

                   if (this.m_status != Status.BattleEndTutorial)

                   {

                       if (this.m_result == BattleResult.Win)

                        {

                            this.Win();

                       }

                        elseif (this.m_result == BattleResult.Lose)

                       {

                            this.Loss();

                       }

                   }

                }

                if ((this.m_helpAddEpDataList != null) && (this.m_helpAddEpDataList.Count > 0))

                {

                   HelpAddEpData data = this.m_helpAddEpDataList[0];

                   if ((data.Tick * 1000f) < this.ElapseTime)

                   {

                       this.m_helpAddEpDataList.RemoveAt(0);

                       BevUnit bevUnitByHeroID = BattleApp.aBattle.GetBevUnitByHeroID(data.HeroID);

                       if (bevUnitByHeroID != null)

                        {

                            bevUnitByHeroID.aUnitAttribute.aUnitProp.CurEP = UnitProp.MAX_EP;

                       }

                   }

                }

            }

        }

    }

}

可以看到胜利、失败、所有敌人死亡、所有英雄死亡。

想让游戏直接胜利,就在第一行Update() : Void上面调用Win() : Void方法。

在菜单Tools  Reflexil v1.6 →如下面两张图。

实战破解网游游戏源码篡改游戏结果为胜利

修改后:

实战破解网游游戏源码篡改游戏结果为胜利

样就能达到直接胜利的效果了,如果没记错的话,在这里修改游戏里会出现些小问题。解决办法就不写了,多多尝试开动思维哟。


本文始发于微信公众号(飓风网络安全):实战破解网游游戏源码篡改游戏结果为胜利

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: