"
准备工具
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() { }
}
(不知道有没有无尽模式