King of Defense 2 防御之王2 塔防游戏破解教程

查看 125|回复 11
作者:芽衣   
"

准备工具
1、IDA32
2、Il2CppDumper
教程基于当前最新版1.0.47,主要是修改货币,以及游戏中用于建设的金币。货币这种应该很多游戏都有破解,但是游戏中的金币奖励应该是没人破过,塔防游戏我也玩得不少,就是没见有人破解过这方面的。虽然说用太多破解会导致乏味,不过既然是破解就要贯彻到底

一,各种货币


1.jpg (134.28 KB, 下载次数: 0)
下载附件
2022-12-17 11:44 上传

修改比较简单,效果如上图左上角,永远花不完,重启后还原。用Il2CppDumper解包后打开dump.cs,还是老生常谈的
get_Gem
,搜索后只有两个结果,很容易定位到要修改的地方。


1.png (126.98 KB, 下载次数: 0)
下载附件
2022-12-17 11:49 上传

那么这个class中,get_Gem()对应钻石数量,get_Crystal()对应紫色晶体数量,get_Badges()对应徽章数量。
比如修改钻石,ida跳转到地址0x5F1398,修改压栈。push改成MOV R0, #0x800000,如果觉得太多可以减少几个0,然后bx弹栈。


1.png (99.71 KB, 下载次数: 0)
下载附件
2022-12-17 11:55 上传

其它同理不再演示。
二、修改游戏内金币


2.jpg (106.39 KB, 下载次数: 0)
下载附件
2022-12-17 11:57 上传

效果如上图左上角,开局就几万,随便升级随便造塔,适合吃饱没事干消磨时间的。
因为这种没有提示,比如什么什么不足,如果有提示还能从英文找到相关地址,所以只能拐个弯从侧面入手。比如增加或者减少。
我的思路是从建设花费查到金币地址,比如先找塔的价格,然后从价格找到增加或者减少的地方。
利用正则表达式匹配get_.*tower,有10个结果,一个个往下翻。


1.png (86.35 KB, 下载次数: 0)
下载附件
2022-12-17 12:06 上传

看到这里,有个
get_Money()
,且位于class GameSetup,不用多说就是这个地方,跳转到地址0x5F8B68修改压栈即可。


1.png (92.09 KB, 下载次数: 0)
下载附件
2022-12-17 12:10 上传

// Namespace:
public class GameSetup // TypeDefIndex: 3714
{
        // Fields
        public static GameMode gameMode; // 0x0
        public static GameLevel gameLevel; // 0x4
        public static int stageSelect; // 0x8
        public static List heroesUsedLegendTournament; // 0xC
        // Properties
        public static int Healthy { get; }
        public static int Money { get; }
        public static List heroesUsed { get; }
        public static List towersUsed { get; }
        public static List[I] itemUsed { get; }
        // Methods
        // RVA: 0x5F8998 Offset: 0x5F8998 VA: 0x5F8998
        public static int get_Healthy() { }
        // RVA: 0x5F8A00 Offset: 0x5F8A00 VA: 0x5F8A00
        public static int GetHealthy(GameLevel gameLevel) { }
        // RVA: 0x5F8AD8 Offset: 0x5F8AD8 VA: 0x5F8AD8
        public static int GetHealthyFor2Star(GameLevel gameLevel) { }
        // RVA: 0x5F8B68 Offset: 0x5F8B68 VA: 0x5F8B68
        public static int get_Money() { }
        // RVA: 0x5F8C44 Offset: 0x5F8C44 VA: 0x5F8C44
        public static List get_heroesUsed() { }
        // RVA: 0x5F8FFC Offset: 0x5F8FFC VA: 0x5F8FFC
        public static List get_towersUsed() { }
        // RVA: 0x5F9060 Offset: 0x5F9060 VA: 0x5F9060
        public static List[I] get_itemUsed() { }
        // RVA: 0x5F9190 Offset: 0x5F9190 VA: 0x5F9190
        public void .ctor() { }
        // RVA: 0x5F9198 Offset: 0x5F9198 VA: 0x5F9198
        private static void .cctor() { }
}
(不知道有没有无尽模式

下载次数, 下载附件

侃遍天下无二人   

关于网络问题我找到的解法是用com.unity3d.player.NetworkConnectivity中onUnavailable的代码覆盖掉onCapabilitiesChanged的,可以让游戏无条件认为自己处于断网状态,这样就不需要专门断网玩了。
此后可以顺带着删掉游戏的联网权限,没有签名校验和加固搞起来就是爽


image.png (83.1 KB, 下载次数: 0)
下载附件
2023-1-5 17:09 上传

另外可以考虑直接把set方法return回去,我稍微了解了一下arm的汇编,参考了你的代码,应该是要写 BX LR,这样就不用重启恢复了,数量完全不变
芽衣
OP
  


BFZWQ 发表于 2023-1-14 17:43
噢噢,谢谢大佬,想问一下double类型的货币该怎么赋值,有个方法是lgl菜单挂钩那个,不过好麻烦

你用AS写一个c#语言,生成so后用ida查看汇编。
左岸麦田   

Kingdom Rush好玩。
s1112819   

感谢分享,学习一下
songzhiyy   

谢谢分享
herry_heng   

感谢分享!
lqp0083   

感谢分享
woYaoGuoSiJi   

谢谢分享
daoxun   

感谢分想
您需要登录后才可以回帖 登录 | 立即注册

返回顶部