-
-
[原创]【逆向分析】RIMWORLD游戏逆向分析
-
发表于:
2020-5-16 16:44
7987
-
RIMWORLD(环世界)游戏是一款模拟经营游戏,上手容易,玩家可以创造一个属于自己的世界指挥你的殖民者在陌生星球建立据点,并发展下去统领全球。有兴趣可以玩一下。
这款游戏是我在以前上学的时候放假打发时间用的,建造经营感觉还不错,今天就拿这个游戏练练手,逆向分析然后修改游戏数据,做一个简单的游戏修改器。
目标:
1.修改物品
2.修改人物状态
3.加速研究建造速
需要CE任何版本的都可以,
环世界游戏,我准备了单机环世界:
链接:https://pan.baidu.com/s/1xhlgiYs2HS2Fdzq-7ffnDQ
提取码:h910
编程使用的VS2017
修改的方法是DLL注入,注入工具大家可以随便在网上找找,一大堆,随便一个就可以。
首先运行游戏,新建游戏,创建一个剧本,
普通剧情简单模式
跳过不重要的选项,选择小地图便于分析
进入游戏后存档,准备完成,游戏的界面:
在游戏界面中,我们可以发现由每个物品都有数量,使用CE进行搜索木材54,然后随便建造一点使用木材的建筑,根据更改搜索变动。
用同样的方法搜索另一个类型的白银,会得到白银和木头的地址,将他们的结构保存下来进行每个字节的修改来判断物品的每个字段是什么类型,具体方法就是将白银的相同位置改到木头上,查看游戏变化,来判断那个位置属于什么,当然这种只能判断一部分,另一部分可以在带用他们的代码上进行分析。这一部分是比较消耗时间的,因为需要一点点判断,找出有用信息。
例如修改蓝色区域就能判断出为坐标,一点一点查找可以用到的字段
医药物品:
84 9E C2 19 00 00 00 00 20 D9 FD 19 00 00 00 00
20 D9 FD 19 *物品类型
84 9E C2 19
00 00 00 00 40 1B 8E 1A F8 54 CB 43 74 71 00 00
40 1B 8E 1A *物品贴图
74 71 00 00 像是序号
00 00 00 00 58 00 00 00 00 00 00 00 60 00 00 00
58、60 该物品座标
00 00 00 00 05 00 00 00 3C 00 00 00
05 00 00 00物品数量
3C 00 00 00耐久度
经过动态更改和比较能够判断出物品结构体部分类型
找到了物品的地址就使用CE进行附加查看访问该位置的地方来查看那部分的代码进行分析。
我们在这个位置发现会访问物品的信息,并且是个循环线程,一直遍历访问所有物品,所以对这个函数进行hook就可以不断获取所有的物品。
HOOK的代码我会放在项目hook.cpp中 这个函数的第二个参数就是物品的地址。使用结构体指向这里就可以获取所有的信息。
因为这里的函数是动态内存中随机地址,所以不能通过模块+偏移的方式确定位置,所以我们需要遍历特征找到这个函数的位置,定义一个特征:
遍历所有的内存模块找到这个特征地址进行定位代码过长就放在项目的EnumAllMemoryBlocks函数和MemoryCmpToFeatureCode函数配合查找位置。这个游戏中我们需要的内存块都是固定属性的,所以我们只遍历该属性内存块就可以:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-5-16 16:44
被Cc28256编辑
,原因: