3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 侠客前传 | 刺客信条 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 9606|回复: 16

[求助] 【2017.8.22】(提问)关于CE脚本有用的函数定位的问题(原帖:瘸腿大象,漫漫长夜1.08 修改脚本)

[复制链接]

1

主题

24

帖子

84

积分

初级玩家

Rank: 2

贡献度
0
金元
835
积分
84
精华
0
注册时间
2016-12-4
发表于 2017-8-22 17:48 | 显示全部楼层 |阅读模式
看了瘸腿大象老哥的帖子,http://bbs.3dmgame.com/thread-5631642-1-1.html,漫漫长夜1.08 修改脚本,感觉很有收获,但也有一些疑问。论坛里的回复,不知道老哥看不看,于是另发一贴向各位大佬求助。
查了一下资料,CE大概是在6.4版本时候,就加入了对unity3d的支持。使用形如:
{$lua}
LaunchMonoDataCollector()
mono_symbolLookupCallback("某函数名")
{$asm}
这种格式,可以在内存的随机区域定位到特定函数,实现多版本共用的修改。游戏更新后,只要数值计算的原理和函数名未发生改变,就可以通用,比原先定位到"xx.exe+123ab"这样的注入方法好了很多。
但是这个函数怎么找呢?我下面举出两个例子。

第一个,光合作用自动增加卡路里。
{$lua}
LaunchMonoDataCollector()
mono_symbolLookupCallback("Hunger:RemoveReserveCalories")
mono_symbolLookupCallback("Hunger:AddReserveCalories")
{$asm}
define(myhook1,"Hunger:RemoveReserveCalories")
define(myhook2,"Hunger:AddReserveCalories")

[ENABLE]
myhook1:
jmp myhook2
[DISABLE]
myhook1:
push ebp
mov ebp,esp
push edi
sub esp,14

这个例子很有意思,思路是找到减少浮点数卡路里值的函数Hunger:RemoveReserveCalories,并将其修改为(跳转到)增加卡路里值的函数Hunger:AddReserveCalories。
具体操作上,最一般的思路,先找到这个浮点型的卡路里值,然后因为卡路里值是自动掉的,可以“找出是什么改写了这个地址”,定位到相关函数。接下来,
1.传统方法,注入代码,比如把相关的fld nop掉,略;
2.unity3d游戏的方法,首先开启LaunchMonoDataCollector(),使得函数名出现。
按方法2,那么问题来了。作者用的另一个函数,Hunger:AddReserveCalories是怎么找到的?
猜想1:CE可以穷举所有“有名字的函数”?但在CE界面没找到相关功能。
猜想2:白天晒太阳时候,卡路里值增加,按照“找出是什么改写了这个地址”定位?我还没试过白天。但是,这个方法对例二肯定是不成立的。
猜想3:用reflector之类的软件,读取Assembly-Csharp.dll,来分析里面的所有函数,或者带某关键词的函数?但是,一来不能确定关键词,二来工作量大。
那么,有什么简单方法呢?

第二个,不会被狼攻击
{$lua}
LaunchMonoDataCollector()
mono_symbolLookupCallback("BaseAi:ShouldAlwaysFleeFromCurrentTarget")

{$asm}
define(myhook1,"BaseAi:ShouldAlwaysFleeFromCurrentTarget")

[ENABLE]
myhook1:
mov al,1
ret

[DISABLE]
myhook1:
push ebp
mov ebp,esp
这个例子,调用BaseAi:ShouldAlwaysFleeFromCurrentTarget函数,根据(环境之类?)的参数,判断是否会被当前生物选为攻击目标。思路是,直接把返回值ax=1,即不能选为目标;然后直接ret。
像这个例子,用CE数值搜索肯定是找不到的。那么问题来了,这个函数又是怎么定位的呢?


请瘸腿大象老哥、各位方家指点一二。非常感谢!



回复

使用道具 举报

1

主题

24

帖子

84

积分

初级玩家

Rank: 2

贡献度
0
金元
835
积分
84
精华
0
注册时间
2016-12-4
 楼主| 发表于 2017-8-22 17:52 | 显示全部楼层
另外,论坛的V1.1.1版本,这个CT依然是可用的,起码是可注入的,原帖一群人“求更新”,不知道是否有自己尝试使用过?
回复 支持 反对

使用道具 举报

1

主题

24

帖子

84

积分

初级玩家

Rank: 2

贡献度
0
金元
835
积分
84
精华
0
注册时间
2016-12-4
 楼主| 发表于 2017-8-22 20:42 | 显示全部楼层
顶顶。有人吗?
回复 支持 反对

使用道具 举报

81

主题

2136

帖子

2653

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
61
金元
24093
积分
2653
精华
0
注册时间
2007-12-26
发表于 2017-8-22 22:24 | 显示全部楼层
在一堆不懂编程的人讲这些,肯定没人理你。我觉得你还是私信那个人会好些。
回复 支持 反对

使用道具 举报

1

主题

24

帖子

84

积分

初级玩家

Rank: 2

贡献度
0
金元
835
积分
84
精华
0
注册时间
2016-12-4
 楼主| 发表于 2017-8-23 09:24 | 显示全部楼层
naoh2004 发表于 2017-8-22 22:24
在一堆不懂编程的人讲这些,肯定没人理你。我觉得你还是私信那个人会好些。 ...

嗯,,我试试。
回复 支持 反对

使用道具 举报

99

主题

727

帖子

3899

积分

游戏精英

Rank: 8Rank: 8

贡献度
621
金元
13845
积分
3899
精华
3
注册时间
2008-1-21

旧版萌之委员会''永久''

QQ
发表于 2017-8-29 12:45 | 显示全部楼层
修改工具就这些,你都有了。
方法就这些,你也都知道。
所以还有啥可问的呢。。。
回复 支持 反对

使用道具 举报

1

主题

24

帖子

84

积分

初级玩家

Rank: 2

贡献度
0
金元
835
积分
84
精华
0
注册时间
2016-12-4
 楼主| 发表于 2017-8-31 19:03 来自手机 | 显示全部楼层
瘸腿大象 发表于 2017-8-29 12:45
修改工具就这些,你都有了。
方法就这些,你也都知道。
所以还有啥可问的呢。。。 ...

老哥,具体讲一下呗,比如那个狼的,具体是咋找到的。谢谢啦。
回复 支持 反对

使用道具 举报

99

主题

727

帖子

3899

积分

游戏精英

Rank: 8Rank: 8

贡献度
621
金元
13845
积分
3899
精华
3
注册时间
2008-1-21

旧版萌之委员会''永久''

QQ
发表于 2017-8-31 22:00 | 显示全部楼层
搜索常用的文本比如 speed critital damage heal remove chance 。一般总会发现点什么。

回复 支持 反对

使用道具 举报

头像被屏蔽

0

主题

138

帖子

192

积分

禁止发言

贡献度
0
金元
1917
积分
192
精华
0
注册时间
2017-8-31
发表于 2017-9-1 15:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

1

主题

24

帖子

84

积分

初级玩家

Rank: 2

贡献度
0
金元
835
积分
84
精华
0
注册时间
2016-12-4
 楼主| 发表于 2017-9-3 19:08 来自手机 | 显示全部楼层
瘸腿大象 发表于 2017-8-31 22:00
搜索常用的文本比如 speed critital damage heal remove chance 。一般总会发现点什么。

...

这样工作量可真大。谢谢老哥啦。
回复 支持 反对

使用道具 举报

99

主题

727

帖子

3899

积分

游戏精英

Rank: 8Rank: 8

贡献度
621
金元
13845
积分
3899
精华
3
注册时间
2008-1-21

旧版萌之委员会''永久''

QQ
发表于 2017-9-4 11:49 | 显示全部楼层
tempa 发表于 2017-9-4 11:13
新手修改Unity游戏需要先了解dnSpy,.Net Reflactor已经过时可以丢垃圾堆了,把dnSpy分析的文件导出成工程 ...

说那么详细干什么,不知道这是个大坑么,让别人跳进去出不来多不好。一般人还是玩游戏就好了,有修改器就用用,没有就伸手好了。又不是谁都像你一样搞游戏开发。

回复 支持 反对

使用道具 举报

327

主题

3082

帖子

7794

积分

3DM创意工坊 原创组

Rank: 12Rank: 12Rank: 12

贡献度
963
金元
39019
积分
7794
精华
4
注册时间
2009-7-13
发表于 2017-9-4 11:54 | 显示全部楼层
本帖最后由 tempa 于 2017-9-4 12:16 编辑

给新手指条明路,毕竟1年前我也啥也不会状态走过来的。

另外最近那个滚球2你玩了没,挺好玩的,塔防竞速二合一的游戏。等你做牛逼的修改呢,无限防御,任意位置建造什么的


http://bbs.3dmgame.com/thread-5639208-1-1.html

回复 支持 反对

使用道具 举报

10

主题

1398

帖子

2132

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
16
金元
20681
积分
2132
精华
0
注册时间
2004-9-2
发表于 2017-9-10 12:02 | 显示全部楼层
现在改游戏这么先进啦,我以前都是DEBUG
回复 支持 反对

使用道具 举报

1

主题

77

帖子

121

积分

中级玩家

Rank: 3Rank: 3

贡献度
1
金元
1168
积分
121
精华
0
注册时间
2009-8-21
发表于 2017-12-13 19:17 | 显示全部楼层
本帖最后由 yigjvn 于 2017-12-13 23:57 编辑

首先,你的猜想1和3都是对的,CE可以枚举附加进程的基本上所有DLL,你能在Unity3D制作的游戏里发现游戏加载了mono.dll
但是你是会发现没有存储Unity3d的C#脚本逻辑代码的Assembly-CSharp.dll或是存放JavaScript脚本代码的Assembly-UnityScript.dll
这是因为Unity3D使用mono_image_open_from_data_with_name这个函数进行dll动态解密.
这时你便需要用.NET Reflector这样的.NET程序反编译软件来反编译这个Assembly-CSharp.dll了
至于说如何找到这些代码,那么你是需要关键字的,按照你上面说的例子,不管是Calories还是Hunger都可以查找到相对应的类名
其实通过查找你所猜测的关键字基本上就能找到你所想要的函数了,因为一般游戏程序员都是写的比较规范清楚的.
当然,游戏也很可能会混淆函数名的....
但是你也可以找到可以反混淆回来的程序...

那么如果你还是想用CE来获取mono数据的话,其实也是可以的,CE6.4之后的版本自带了monoscript.lua这个自动运行的lua脚本,也就是可以用LaunchMonoDataCollector()这样的Lua函数来初始化mono数据的收集器
然后用CE附加了Unity3D制作的游戏后,在CE的主界面的菜单栏里会出现Mono的菜单项,接着Activate mono features,Dissect Mono,这样便会生成Mono的各种数据的分析表.

至于为什么大多数我们写AA都是在函数头直接将结果返回指定的值,是因为这样的话,代码紧凑,而且比较稳定(相对于在其他地方修改)..




回复 支持 反对

使用道具 举报

21

主题

960

帖子

1154

积分

游戏狂人

Rank: 6Rank: 6

贡献度
46
金元
9598
积分
1154
精华
1
注册时间
2007-4-1
发表于 2018-9-24 21:08 | 显示全部楼层
yigjvn 发表于 2017-12-13 19:17
首先,你的猜想1和3都是对的,CE可以枚举附加进程的基本上所有DLL,你能在Unity3D制作的游戏里发现游戏加载了m ...

听了你的解释,我对大概的流程也比较了解了。先说说本人当前的水平,理解并掌握CE自动汇编中的完全注入和AOB注入两种模板的修改方法。
现在需求的情况是,缺氧这个游戏,我会的两种方式都不能用,因为代码的内存位置不固定,而且搜索不到唯一的特征码。后来了解到了是用了mono这个东西,网上也找不到相关的教程。
所以现在我想请教一下:
怎么找到需要改动的函数名,针对使用了mono的游戏,CE里具体需要怎么操作,或者需要些什么别的工具?


回复 支持 反对

使用道具 举报

21

主题

960

帖子

1154

积分

游戏狂人

Rank: 6Rank: 6

贡献度
46
金元
9598
积分
1154
精华
1
注册时间
2007-4-1
发表于 2018-9-24 21:11 | 显示全部楼层
aa2791298 发表于 2017-9-3 19:08
这样工作量可真大。谢谢老哥啦。

lz你好,我也对函数怎么找这一步充满了疑惑。能向你学习下吗?具体在ce里要怎么弄呢? 还是说要借助别的工具才能找到?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|咖绿茵|求知网|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2024-3-29 04:14 , Processed in 0.117504 second(s), 31 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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