mod菜单-函数还原与重写

大佬勿笑! 仅供小白参考!!

1.使用的HOOK方法
使用到了
HOOK_LIB_NO_ORIG()

thumb和32位 MSHookFunction((void *) getAbsoluteAddress(targetLibName, 0xD4722C), (void *) BossMonster_BaseEntity__PlusHp, nullptr);
64位 A64HookFunction((void *) getAbsoluteAddress(targetLibName, 0xD4722C), (void *) BossMonster_BaseEntity__PlusHp, nullptr);

2.可以看到这种hook方式将不会返回原函数继续执行(即只执行你写的代码),为了保证游戏不崩溃,第一步你应该还原函数逻辑,这时候我们需要IDA来分析要还原的函数,根据其逻辑用c或c++还原逻辑。好在iDA为我们提供了伪代码功能(按F5),我们只需要复制伪代码到我们的菜单中即可,不过需要注意的是A: IDA的伪代码往往没有变量名称,你可以根据dump.cs中的信息来补全 B: IDA常常会搞错参数个数,请你注意,并自行修复报错
还原过程

先还原,还原后注入游戏的原功能是否还正常,如正常就可以进入修改步骤了。

3.一个例子: 这里我们还原了一个加血函数和它会调用的函数,这里为了玩家自己坐牢,我们想要实现如下功能 1.削弱回血量 2.血量不得大于1000否则加负血。3,每加一滴血减三滴蓝

4.有什么用????????
–还原函数后我们可以轻易的用高级语言来修改函数逻辑,而不用考虑怎样机械码来实现功能,可以轻易实现一些高级功能。
–还原函数后我们可以在函数内轻易的调用一些库函数或自定义函数,可玩性极高,这是改机械码很难做到的
–被还原的函数间可相互调用,实现更高级的功能,你甚至可用此功能来改变游戏逻辑

THE END