18授人以鱼不如授之以渔●CALL高级篇二:让游戏自带辅助(一)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

授人以鱼不如授之以渔●CALL高级篇二:让游戏自带辅助(一)

目标:给剑侠3增加一个血小于300便喊话的功能,直接打开游戏便有这个功能.

目的:我也不知道,弄着好玩吧.

========================开始分析=================================

首先整理下所需要的资料.

喊话CALL:50f09c 为我自己开辟的空白喊话内容指针地址push 50f09c

push 5

push 0

push 1

mov ecx, 00522FB8

call 004309B0

需要保存的代码指令

mov ecx, dword ptr [ecx+5]

mov dword ptr [eax+1a8],ecx

好了, 我们先来找一下空白地址,先跳到主线程(右键选择模块-jx3clien)

好了先找一个地方写CALL

为了方便起见,我们用CALL的方式来调用它所以我们要在尾部加一个RETN,不知道RETN啥用作请看我前面的教程

好了在找一个空白地方写入处理数据的代码..

首先我们要对比血值是否小于300 300的十六进制=12c

用汇编代码写就是

cmp edx,12c 上篇教程说了EDX是保存当前血值的寄存器

jle ***** 如果小于则跳转

然后我们要恢复原有的数据.

mov ecx, dword ptr [ecx+5]

mov dword ptr [eax+1a8],ecx

然后是处理CALL部分

call ****** ***的地址是我们刚刚写入的CALL地址

然后跳转到数据恢复哪里...

call ******

JMP *****

然后我们需要处理被占用的ECX值和EAX的值因为CALL了一次后EAX ECX会被占用.

push eax

push ecx

push 50f09c

push 5

push 0

push 1

mov ecx, 00522FB8

call 004309B0

pop ecx

pop eax

retn

好了,我们来正式写入吧

写好CALL之后我们来写数据处理部分

在把地址跳转到我们的程序里

好了现在把喊话内容改一下

为啥要写成这样请参考CALL提升篇一好了现在找个怪物试试吧.

然后用OD保存起来

到这里我们就可以不用开挂(当然由于喊话内容的原因我们需要用CE写入喊话内容) ,就会有这个功能了.

=============================解疑=======================

为何要压入EAX和ECX的值?

这里因为CALL之后EAX和ECX的值会发生改变,所以需要保存 .我们来调试下不保存的结果吧

当执行完CALL后ecx的值变成了1 而这条指令则读取了[1+5]的内存,当然这里是无法读取的内存区域所以游戏会出错.

相关文档
最新文档