资源描述:
《vb制作游戏外挂教程菜鸟级(牛)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、有个问题必须首先考虑:使用VB编写的修改器需要VB的执行库才能执行。如果考虑到有些使用者(实际上可能是大部分使用者)没有执行库,那么在最后制作的ZIP压缩档中就必须包含这些庞大的档。在下面的教程里我将制作一个修改器,如果为它再制作一个安装程序,那么整个修改器的体积将超过1MB。其中包括一个很好的安装和反安装程序,但大部分还是VB40032.DLL这个档。除了以上这点,使用VB制作修改器是非常简单的。一旦制作了多次后,你会发现能很快地制作出一个修改器。而且使用VB制作的修改器能够毫无困难地解决游戏执行时的动态内存分配问题,因此即使是最新的游
2、戏,也可以使用VB制作修改器。在本教程中将不涉及动态内存分配,因为虽然简单,但仍然属于一个高级的选项。一些背景知识不象C语音,VB不会自动包括普通的API函数的声明,因此我们必须把他们加入我们的项目文件。在几乎所有的修改器中会使用到6个主要的函数,讨论如下:1.FindWindow(ClassName,WindowTitle)-FindWindow返回符合指定的类名(ClassName)和窗口名(WindowTitle)的窗口句柄。对我们来说,可以让ClassName为空(Null),只给出游戏的WindowTitle。函数应该这样声明:
3、DeclareFunctionFindWindowLibuser32AliasFindWindowA(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong2.GetWindowThreadProcessId(WindowHandle,ProcessId)-在这里我们把FindWindow函数中得到的句柄作为参数,来获得进程标识符(ProcessId)。声明如下:DeclareFunctionGetWindowThreadProcessIdLibuser32(ByValhwndA
4、sLong,lpdwProcessIdAsLong)AsLong3.OpenProcess(DesiredAccess,Inherit,ProcessId)-这个函数将返回一个我们目标进程的句柄,可以用来对目标进行读写操作。DesiredAccess参数的值决定了句柄对进程的存取权利,对我们来说,要使用PROCESS_ALL_ACCESS(完全存取权限)。Inherit应该总是False。ProcessId是从GetWindowThreadProcessId函数中取得的。DeclareFunctionOpenProcessLibkerne
5、l32(ByValdwDesiredAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)AsLong4.CloseHandle(ProcessHandle)-每一个打开的句柄必须呼叫这个函数来关闭。DeclareFunctionCloseHandleLibkernel32(ByValhObjectAsLong)AsLong5.WriteProcessMemory(ProcessHandle,Address,value,Sizeofvalue,BytesWritten)
6、-把指定的值value写入由Address指定的目标地址。DeclareFunctionWriteProcessMemoryLibkernel32(ByValhProcessAsLong,ByVallpBaseAddressAsAny,ByVallpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong6.ReadProcessMemory(ProcessHandle,Address,value,Sizeofvalue,BytesWritten)-把Address指
7、定的目标地址的值存入value位置的变量中。DeclareFunctionWriteProcessMemoryLibkernel32(ByValhProcessAsLong,ByVallpBaseAddressAsAny,ByVallpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong这些函数一环扣一环,缺一不可。更详细的内容可以参考VB的帮助档。一个简单的修改器范例如何使上面介绍的这些函数一起工作,制作出我们需要的修改器呢?下面是一个为Windows的计算器程
8、序制作修改器的例子。这个修改器将读出计算器窗口中显示的数值,并在点击一个按钮后在计算器窗口中显示我们的名字。首先我们需要找到计算器显示窗口中显示值的地址。本教程不是关于如何进行内存搜索,因而我