吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1834|回复: 36
收起左侧

[原创] Unity逆向-某攀爬动物游戏角色的参数查看思路

  [复制链接]
DingDangMao001 发表于 2026-3-20 21:52

最近网上流行一个游戏,属于跳一跳一类的游戏,这个游戏没有存档点,这玩起来就比较崩溃了,我也是玩了玩奈何技术太菜,就开始研究这个游戏的逆向了。最初我的思路就是拿Cheat engine进行扫描,因为它需要跳跃。用01大法进行搜索。一开始我想的是不跳是0跳跃是1。后来这个思路没有搜索到关键的数值。我又换了方式就是跳跃是0不跳是1,采用ce的暂停功能进行搜索。我后来搜索到了一些数值找到了一个汇编指令,这个稍后我列图片展示。

​        后来进行搜索学习知道这是unity游戏的逆向,这个还是用了il2cpp编译的。按那些教程一看简直就是发现了新大陆,就差没把游戏源代码反编译出来,但是功能都能看见,角色控制的功能在里面显示的有很多,我在此只列出跟角色有关的参数进行技术探讨。

1.png

开始搜索,我这里不演示过程了,直接放出搜索结果。

2.png

出现了这些搜索结果,现在就开始找一下哪些改写了这些地址,因为有的地方可能不是关键指令。

最后我在一条找到了一条指令试了试nop果然它起了作用:nop掉以后直接升天不会落地。 3.png

后来发现这种游戏的另一种方式的逆向我就去学习了一下(刚刚看到一位吾爱坛友也发了一篇文章写了关于这块的内容CTF游戏逆向入门https://www.52pojie.cn/thread-2098123-1-1.html,趁热打铁我也写这篇教程分享一下),里面的内容我也使用到了,跟我之前学习的有很大相关性,就是用https://github.com/Perfare/Il2CppDumper这个工具进行逆向,再搭配dnSPY进行源代码查看,里面能看到框架但是源代码会丢失。Il2CppDumper这个工具我刚刚引用的文章有写可以看那篇文章的教学。

4.png

反编译过后关键的一个dll文件在这里面

5.png

名字叫Assembly-CSharp.dll,用dnSPY打开后就从里面搜索一下jump的实现方式,我很纳闷是怎么实现的,一直想改二段跳没有改成,后来放弃了,没有分析出来,越分析越乱,看着落地判定有点麻烦,有会的大佬可以在评论区指导一下

6.png

这个类可能就是关于角色的所有类,从里面搜索jump会发现很多参数,我还发现了这个地址会对应ce附加进程的那个汇编地址。[Address(RVA = "0x377790", Offset = "0x375D90", VA = "0x180377790")]

Virtual Address(虚拟地址)这个有很大作用,反编译原来的dll文件可以在ida中修改汇编代码。也可以在ce里进行hook,进行一些功能的修改。
7.png

这里还有一些参数,还有解释,我就把参数都给了ai进行分析,里面有很多的常量,修改常量就可以进行功能的修改了。至于我刚刚那个GameAssembly.dll+37E0CB - 88 86 9C000000        - mov [rsi+0000009C],al中rsi+0000009C是什么在里面也有了解释和对应关系

offset是根据一个基址的偏移,由这个文件可以得出很多属性的偏移和功能,这个rsi让ai分析出来是人物的基址,结合这些偏移就有了人物的属性。

8.png

里面有可以直接修改的属性,比如跳跃高度和重力。修改跳跃高度效果如下图

9.png

这个rsi的基址我没通过指针扫描完成,我是通过hook申请了一个新变量得到的CT脚本如下:

[ENABLE]
alloc(newmem,2048,"GameAssembly.dll"+37D433)
alloc(Player_RSI,2048,"GameAssembly.dll"+37D433)
label(returnhere)
label(originalcode)
label(exit)
registersymbol(Player_RSI)
newmem:
mov [Player_RSI],rsi
originalcode:
movaps [rsp+00000090],xmm6
exit:
jmp returnhere
"GameAssembly.dll"+37D433:
jmp newmem
nop
nop
nop
returnhere:

[DISABLE]
dealloc(newmem)
"GameAssembly.dll"+37D433:
movaps [rsp+00000090],xmm6

启用了就可以用这个基址进行偏移来修改属性。

​        这里也可以通过ce来看这个类 10.png

9C的偏移就是检测是否在地面。里面还有很多参数可以进行浏览/修改。

11.png

跟刚刚通过hook方式得出来的结果是一样的。

技术达不到,可以通过这种方式来进行游戏,改了跳跃高度和重力也是挺好玩的。大家可以通过这种方式来完成自己的登顶梦想


免费评分

参与人数 12威望 +1 吾爱币 +26 热心值 +12 收起 理由
crisili + 1 热心回复!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
0504yck + 1 热心回复!
anotherNEw + 1 + 1 用心讨论,共获提升!
buluo533 + 1 + 1 用心讨论,共获提升!
Fourseasons + 1 + 1 真好
qzy3744 + 1 + 1 非常不错
zjdals + 1 我很赞同!
laozhang4201 + 1 + 1 热心回复!
Spirittingle + 1 谢谢@Thanks!
Issacclark1 + 1 谢谢@Thanks!
allspark + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

huaxixi 发表于 2026-3-22 23:25
对于Unity游戏进行修改,我更推荐:
1.使用与游戏相同版本的 Unity 编辑器创建工程。 这样打包出的 AssetBundle(模型、特效、音效、图片等)兼容性最好,能有效避免因序列化不一致导致的加载失败或 Shader 报错.并且能使用游戏中不存在的资源创造出更多新的内容.
2.利用 BepInEx 框架搭配 C# 制作插件。 这种方式可以直接调用游戏原生函数。对于 IL2CPP 游戏,BepInEx 6 自带的 Il2CppInterop 能自动解析 GameAssembly.dll 并生成 C# 引用库。虽然看不到源码逻辑,但类名、函数名和参数都是透明的,利用 C# 直接调用 Unity 原生 API,并配合Harmony进行逻辑 Hook,这种方案的开发上限极高。相比于传统使用 CE 进行汇编层面的逆向和指令注入,这种方式不仅上手门槛更低,代码的稳定性和可维护性也是降维打击-.-
3.借助 dnSpy 配合 Trae/Cursor/Codex 等 AI 工具辅助开发.Mono 游戏可以直接用 dnSpy 把 Assembly-CSharp.dll 反编译成 C# 工程,让 AI 深度阅读并总结源码逻辑。而IL2CPP 游戏即便代码不直观,也能通过导出的函数名让 AI 进行“顾名思义”式的逻辑推演。针对性提问能极大提高对核心逻辑的定位效率。
4.配合使用 UnityExplorer 进行动态调试。 它可以让你在不改动代码的前提下,直接在游戏运行时观察场景层级和组件属性。这种“绕过代码找逻辑”的方式,是调试和寻找 Hook 点的最高效手段
bgwu666 发表于 2026-3-23 12:14
很巧,我最近也使用CE分析了一下这个游戏,分享一下我的思路和见解和楼主交流
因为这个游戏是Unity游戏,所以依赖于一些经验。常见的Unity游戏主程序代码都在GameAssembly.dll,而人物控制在Controller相关类中很常见,所以直接激活Mono功能,在.NetInfo里面很轻易就找到了人物控制相关的类StarterAssets.ThirdPersonController
激活Mono功能.png
在右侧的Fields中,就是该类里面的数据结构了,和楼主分析出的结果基本一致

至于怎么实现连跳,我在这里也犯了难,跳跃并不是简单的跳指令,是有一些其他判断在里面共同组成的跳跃,我没有继续深挖,而是通过修改当前人物高度的方法来实现连跳的。
我用的笨方法,搜索浮点数,控制人物高度变化,重复搜索高度值,两次就搜出来高度的地址了
搜索高度地址.png
浏览此地址的内存区域,向上翻动,就能发现有一个地址的数据一直在小范围浮动
高度的内存区域.png
经过证实,此地址的数据为当前高度,不知道为什么不是0,绑定快捷键增加减少地址的值,即可实现连跳以及连落功能。
地球守护者 发表于 2026-3-21 07:18
楼层主人,应用程序GUI,只是应用程序原始代码,通过用户图形界面或图形用户界面,显示出来,还有,如果尝试应用程序代码,应该可以确定,就是混肴代码,防御阻止应用程序代码,没有获得制作作者同意,随便调整

点评

@地球守护者 随机人机测试,请在接下来的三个回帖中回复本条消息;超出数量后,每超过一条加一次违规,直至达上限BAN号。  详情 回复 发表于 2026-3-22 04:57
liyicha 发表于 2026-3-21 10:52
虽然但是,还是想要逆向得到源码,或者打包成开发项目,能添加新功能。
Starlight5 发表于 2026-3-21 11:03
学习下思路
 楼主| DingDangMao001 发表于 2026-3-21 11:05
liyicha 发表于 2026-3-21 10:52
虽然但是,还是想要逆向得到源码,或者打包成开发项目,能添加新功能。

拿这个i2cpp编译的基本上是很难拿到源码了
17Roco 发表于 2026-3-21 12:34
过来学习一下
XTDR12 发表于 2026-3-21 14:56
过来学习一下
12bc 发表于 2026-3-21 18:21
学习一下思路
zjdals 发表于 2026-3-21 19:23
膜拜大佬
Cirilla4231 发表于 2026-3-21 22:16
有点意思,之前学过一小段时间的 Unity,现在从逆向的角度看 lz 的破解过程也挺有趣。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-6 04:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表