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

注册 登录

QQ登录

只需一步,快速开始

查看: 10690|回复: 16
打印 上一主题 下一主题

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

[复制链接]

1

主题

25

帖子

85

积分

初级玩家

Rank: 2

贡献度
0
金元
850
积分
85
精华
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数值搜索肯定是找不到的。那么问题来了,这个函数又是怎么定位的呢?


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



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-11 14:30 , Processed in 0.027395 second(s), 15 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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