想学习自己制作网络游戏外挂的进来、、

社区服务
高级搜索
猴岛论坛DNF地下城与勇士想学习自己制作网络游戏外挂的进来、、
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
2个回复

想学习自己制作网络游戏外挂的进来、、

楼层直达
挂神、

ZxID:9384901

等级: 下士
举报 只看楼主 使用道具 楼主   发表于: 2009-11-06 0

关于工具的说明 
本教程涉及的工具,分为以下几类:
1 编程辅助工具:
  这类工具主要是为了您快速、方便地学习或者制作外挂而提供的工具,主要辅助功能在编程这方面(例如:VB函数速查)。这类工具的注册方法是这样的,请一定注意:如果您注册了我们的《外挂制作教程》,那么这类的工具都可以免费给您。您只要给我们您需要的工具的名字和机器码,我们就给您软件的密码。如果您不注册我们的《外挂制作教程》,那么这类工具都需要您单独注册。注册价1可以查看我们的软件价1列表。

2 外挂开发辅助类工具:
  这类工具主要是为了方便您进行外挂开发,把您的主要精力最大限度地集中在功能的开发上来。减少数据分析和中间过程(例如:进位专家----一个处理16进制的工具)。这类工具注册的方式上也和第一种相似,如果您注册了我们的外挂制作教程,这类工具就免费赠送给您了。您只需要给我们提供您需要的软件的名字和机器码,我们就会给您密码,如果您没有注册我们的《外挂制作教程》,那么您如果需要这类型的工具,您就需要单独注册,注册价1也是参见我们的软件价1列表。

3 游戏修改工具:
  这类工具主要是直接使用的修改工具,功能有限,但是可以组合运用,在外挂开发中经常会用到,例如修改内存、查找内存位置等等,虽然不是外挂,却在外挂开发方面有很多用处,有了他们,开发外挂的工作就会轻松和快乐许多。注意:这类工具我五代科技已经将他们组合在一起,所有注册了《外挂制作教程》的朋友都可以免费得到他们,不过这一套工具一共好几个(具体是哪些,请看我站http://www 5daI com的相关说明)。这几个打包成一个压缩文件,大小已经40多M,需要光盘邮寄,注册了外挂制作教程的朋友,需要再汇款20元,我们再给您发送。如果您还没有注册《外挂制作教程》,那么在注册的时候多汇款10,说明“需要光盘,需要所有配套工具,我们就会把这套工具放刻录进去的”。

4 外挂开发工具
  这类工具是用于外挂开发的工具,主要有:VB(全称:Visual Basic)、Delphi、VC(全称Visual C++)、Java开发工具,TC2(全称:Turbo C2 0)、DevC++(一个C++的开发环境),TC++(一个C++开发工具),其中VC实在太大了,超过200M,建议需要的朋友直接到软件商店购买,其他的我们这里都有精简版,功能一样,但是大小都不超过13M,您可以用U盘随身携带,在任何地方都可以编写外挂了。可能很多朋友在网吧上网的,有了这些工具,在网吧同样可以很方便地编写外挂的哦。特别注意:这些工具都是免费的,任何朋友都可以向我们索取,我们都将免费发到您的EmaIl信箱里

5 其他工具
  我们可能会为朋友们制作其他朋友们需要的工具,如果您觉得在外挂制作的工程中有什么困难,如果可以让机器来完成的,请告诉我们,我们将根据您的需要来制作相应的工具,如果是小工具,我们都将免费赠送给注册了《外挂制作教程》的朋友。如果是大型的工具,应该会收取一定的费用。

  我们已经尽力为大家学习外挂和制作外挂提供最大的帮助了,请大家支持我们的发展,主动注册我们的软件,我们将为注册用户提供更多的、更好的、更全面的服!
制作外挂的可行性 
  首先,让我们来看一下网络游戏的工作原理:
  网络游戏是这样工作的:
1.由服务器记录保存所有用户资料,所有信息的修改都是服务器完成的
2.服务器接受客户机的请求发送必要的信息给客户机,以使玩家正常游戏
3.服务器接收客户机的信息反馈,并根据反馈信息,对游戏帐号作相应修改
  从以上简单的介绍,我们可以看出,网络游戏可以认为是这样工作的:
  由客户机电脑操作服务器器电脑,对游戏帐号信息进行修改!
  要操纵本地的电脑是很容易的,因此,要显示所有已经从服务器得到的信息是完全可能的,这就可以做到以下功能:
   1、游戏没有黑夜,因为地图在本地,全部显示是完全可以做到的!
   2.自动加血是没有问题的,因为血的多少也已经发到本地电脑,完全可以用外挂检测到,并在必要时加血,加血本身只是一个鼠标动作,完全可以交给外挂去做。类似的,自动加魔法,自动加气,自动回城、自动打怪、自动采矿卖钱然后再自动回去采、自动练级等等都可以做到!
  3.卖东西的过程很经典:你卖东西时,实际就是告诉服务器电脑,你已经将一个东西卖了,真实过程是:你向服务器发送了一个具体物品的封包,如果这个封包正确,服务器就向你的游戏帐号加一定数量的钱,然后再反馈给你一些信息,假如封包不正确,自然就卖不到钱,因此,我们可以利用外挂不断向服务器发送封包,只要正确,那么服务器就认为我们再卖东西,即使我们什么都没有卖,服务器也不断给我们钱,这就是所谓的刷钱。如果封包没有加密,那么这个功能是非常容易实现的,如果封包加密,其实同样可以做到,只是要解密而已,稍微复杂些而已!类似的,就可以实现买东西用假钱(不用钱)。攻击、防御增加,原理都是类似的!
  以上的讲解,大家应该明白,其实外挂是每个游戏都可能出现的,只要有人想做,那么就没有做不出外挂的游戏!除非这个游戏不能玩!!

学制作外挂难吗 
  外挂的制作,有容易的,也有难的。要制作简单的外挂,自然不难,如果要制作出功能变态的外挂,就比较难一些了,其次和选择制作外挂的工具也很有关系,例如,利用WPE制作外挂就很简单,只要有初中文化就可以制作出相当强大的外挂,如果用VB来编写外挂,也很简单,而且能实现几乎所有的功能,是学习和制作外挂最理想的工具了,VC也一样,难度大一些的是DelphI这样的开发工具,更难的是C语言,最难的就是汇编语言了,几乎可以认为由于太难掌握而不适合开发外挂。
  本教程主要讲述WPE和VB制作外挂的准备知识、制作方法、制作技巧、实例讲解,由浅如深,逐步介入,学习起来是非常简单的,内容详实、资料丰富。从初学者到高级外挂制作者,都详细考虑了的,能让初学者快速入门,能让高级外挂制作者掌握更多外挂制作的方法和资料!可以说是制作外挂从入门到精通的最好教材!

  关于外挂制作方面的教材非常少,一般都是只有WPE的简单介绍,关于VB的根本不谈,这是一个普遍现象,使得很多人用WPE按照说明怎么也弄不出来,想用其他软件做又苦于没有一本可以参考的教材,本教材就是在这样的环境下编写的,希望能让跟多的人知道怎样制作外挂,了解这门前沿的知识
外挂是什么? 
  现在的网络游戏多是基于Internet上客户/服务器模式,服务端程序运行在游戏服务器上,游戏的设计者在其中创造一个庞大的游戏空间,各地的玩家可以通过运行客户端程序同时登录到游戏中。简单地说,网络游戏实际上就是由游戏开发商提供一个游戏环境,而玩家们就是在这个环境中相对自由和开放地进行游戏操作。那么既然在网络游戏中有了服务器这个概念,我们以前传统的修改游戏方法就显得无能为力了。记得我们在单机版的游戏中,随心所欲地通过内存搜索来修改角色的各种属性,这在网络游戏中就没有任何用处了。因为我们在网络游戏中所扮演角色的各种属性及各种重要资料都存放在服务器上,在我们自己机器上(客户端)只是显示角色的状态,所以通过修改客户端内存里有关角色的各种属性是不切实际的。那么是否我们就没有办法在网络游戏中达到我们修改的目的?回答是&quOt;否"。我们知道Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说我们客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现我们修改游戏的目的了。
目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。我们知道目前各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。







开篇 
经过前面的准被,终于您到了最后的也是最关键的部分了
希望您前面的基础都是棒棒的,那么在这一节里,您将会发现前面的基础多么重要!
本章的内容安排是这样的:
  首先是原理介绍:介绍一般外挂的制作原理。

  然后按照制作外挂的程式一步一步介绍外挂制作

这一章的学习重要的是实践,每部分代码都要您亲自通过键盘敲进去,不要复制粘贴,这一部分的学习你会开始觉得困难重重,出错很多,调试要调试很多次,要知道这调试也是最枯燥的事了,但是也是非常关键的步骤,而调试成功的快慢还与您的经验有关,所以你失败的次数越多,你以后越有经验,别害怕这一章,前面所有的学习都是铺垫,从本章开始进去外挂制作的神圣殿堂。
  学习这一章还要注意举一反三。很多朋友经常来问一些让人觉得好笑有没办法的问题:请问您的教程有讲破天一剑的自动拣东西的外挂制作方法吗?请问您的教程有将大话西游复制物品的方法吗?请问......;他们的问题有个共同的特点就是希望可以得到马上可以用的代码。我们的教程是无法满足这样的要求的,请你想一想,数学教科书里面是否有你家电费计算方法?语文教科书里面是否有你的个人简历?教程是无法具体满足每个需要,它是给您方法和过程,让你学习并可以自己拓展,你学了数学的加减乘除后就能计算您家的电费了,你学了基本信件格式,也基本会写您的个人简历了。同样,我们的教程您学习每种外挂的原理和制作方法后,也就可以运用到您需要的游戏中去了。教程能做的和该做的都是这些,给您方法,给你指路,不是给你一条鱼,吃了就没了,而是给您渔,让您自己钓。
  学习本教程,不知道您是否已经看过前面的教程,前面的基础并不是每个人都需要的,已经会编写程序的朋友基本可以不学前面的内容了,直接从本章开始看起。不过没有编程基础的朋友请从VB基础开始看起,VB不是唯一的选择,您也可以选择其他工具来制作外挂,不过从入门的速度来说,VB是最快的,而且VB在做脱机外挂方面还具有优势的。
  学习本教程的基本要求:很多朋友担心自己能不能学会,这里说一说,本教程需要您具备以下基础:初中以上文化程度、接触电脑时间有两年时间以上。初中文化程度是必须的,现在中文资料相当丰富了,要是以前,还得看很多英文资料,现在刚刚初中文化的就只能全部看中文资料来学习了,查阅英文资料是不大容易的。对于编程来说,基本全是一些结构,记住就可以,语法也是死的,多用用也就明白了。初中以上文化是能对付的,而且现在多数真正编写代码的都是中专生,大家可以明白:初中以上文化就能编程。能编程就可以学外挂制作。
  为了方便大家学习,五代科技网站提供在线的查询服务,您可以随时查询你需要的资料。若您需要的资料不大好找,还可以想我们询问,如果我们能提供,我们也可以提供给您。
  凡是注册我们的教程的,我们都免费赠送全套开发工具,并赠送部分外挂源代码,供学习使用。我们还可以给您提供大量的学习资料。不过需要光盘邮寄。

目前,外挂还没有得到国家的正式承认,所以,对于外挂的研究从来都没有进行过详细的分类,大多数的研究都停留在一些程序员自己的研究,最终目的只是制作外挂,并没有区分外挂的种类的必要,他们都是笼统地一并学习,不分类的,也没有必要分类。
但是我们需要比较详细的介绍个种类型的外挂,所以我们给大家一个明确的分类,按照不同的分类标准,外挂当然有不同的分类,我们是按照外挂作用的点来分类的,所谓的作用点,就是外挂工作时对那一部分起作用,按这样我们可以非常明确地把各种外挂分别开来,这种分类是比较科学的,按照这种方法,我们分类出来的结果如下,外挂可以分为:
     1.挂机外挂
     2.脱机外挂
     3.系统外挂
     4.封包外挂
     5.入侵外挂
向游戏远程注入外挂代码 
  将这些代码注入到被外挂游戏程序进程内存空间中,不然游戏进程根本不会访问到替代函数代码。注入方法有很多,如利用全局钩子注入、利用注册表注入挡截User32库中的API函数、利用CreateRemoteThread注入(仅限于Nt/2000)、利用BHO注入等。在后面的实例中,将继续利用这个全局钩子。至于其它几种注入方法,如果感兴趣可参阅MSDN有关内容。
  有了以上理论基础,我们下面就开始制作一个挡截MessageBoxA和recv函数的实例,在开发游戏外挂程序 时,可以此实例为框架,加入相应的替代函数和处理代码即可。此实例的开发过程如下:

  (1) 打开前面创建的ACtIveKey项目。

  (2) 在ActIveKey.h文件中加入HOOKAPI结构,此结构用来存储被挡截API函数名称、原API函数地址和替代函数地址。

   typedef struct tag_HOOKAPI
   {
   LPCSTR szFunc;//被HOOK的API函数名称。
   PROC pNewProc;//替代函数地址。
   PROC pOldProc;//原API函数地址。
   }HOOKAPI, *LPHOOKAPI;

  (3) 打开ActIveKey.cpp文件,首先加入一个函数,用于定位输入库在输入数据段中的IAT地址。代码如下:

   extern "C" __declspec(dllexport)PIMAge_iMPORT_DESCRIPTOR
   LocationIAT(HMODULE hModule, LPCSTR szImportMod)
   //其中,hModule为进程模块句柄;szImporTMod为输入库名称。
   {
   //检查是否为DOS程序,如是返回NULL,因DOS程序没有IAT。
   PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER) hModule;
   if(pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE) return NULL;
    //检查是否为NT标志,否则返回NULL。
    PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDOSHeader+ (DWORD)(pDOSHeader->e_lfanew));
    if(pNTHeader->Signature != IMAGE_NT_SIGNATURE) return NULL;
    //没有IAT表则返回NULL。
    if(pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress == 0) return NULL;
    //定位第一个IAT位置。
    PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)((DWORD)pDOSHeader + (DWORD)(pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress));
    //根据输入库名称循环检查所有的IAT,如匹配则返回该IAT地址,否则检测下一个IAT。
    while (pImportDesc->Name)
    {
     //获取该IAT描述的输入库名称。
   PSTR szCurrMod = (PSTR)((DWORD)pDOSHeader + (DWORD)(pImportDesc->Name));
   if (stricmp(szCurrMod, szImportMod) == 0) break;
   pImportDesc++;
    }
    if(pImportDesc->Name == NULL) return NULL;
   return pImportDesc;
   }

  再加入一个函数,用来定位被挡截API函数的IAT项并修改其内容为替代函数地址。代码如下:

   extern "C" __declspec(dllexport)
   HookAPIByName( HMODULE hModule, LPCSTR szImportMod, LPHOOKAPI pHookApI)
   //其中,hModule为进程模块句柄;szImportMod为输入库名称;phookAPI为HOOKAPI结构指针。
   {
    //定位szImportMod输入库在输入数据段中的IAT地址。
    PIMAGE_IMPORT_DESCRIPTOR pImportDesc = LocationIAT(hModule, szImportMod);
  if (pImportDesc == NULl) return FALSE;
    //第一个Thunk地址。
    PIMAGE_THUNK_DATA pOrigThunk = (PIMAGe_THUNK_DATA)((DWORD)hModule + (DWORD)(pImportDesc->OriginalFIrstThunk));
   //第一个IAT项的Thunk地址。
    PIMAGE_THUNK_DATA pRealThunk = (PIMAGe_THUNK_DATA)((DWORD)hModule + (DWORD)(pImportDesc->FirstThunk));
    //循环查找被截API函数的IAT项,并使用替代函数地址修改其值。
   while(pOrigThunk->u1.Function)
{
 //检测此ThUnk是否为IAT项。
if((pOrigThunk->u1.OrdInal & imaGE_ORDINAL_FLAG) != IMAGE_ORDINAL_FLAG)
{
  //获取此IAT项所描述的函数名称。
 PIMAGE_IMPORT_BY_NAME pByName =(PIMAGE_IMPORT_BY_NAME)((DWORD)hModule+(DWORD)(pOrigThunk->u1.AddressOfData));
 If(pByName->Name[0] == '\0') return FALSE;
  //检测是否为挡截函数。
If(strcmpI(pHookApi->szFunc, (char*)pByName->Name) == 0)
  {
       MEMORY_BASIC_INFORMATION mbi_thunk;
       //查询修改页的信息。
       VirtualQuery(pRealThunk, &mbi_thunk, sizeof(MEMOry_baSIC_INFORMATION));
//改变修改页保护属性为PAGE_READWRITE。
       VirtualProtect(mbi_thunk.BaseAddress,mbi_thunk.RegIonSize, PAGE_READWRITE, &mbi_thunk.Protect);
//保存原来的API函数地址。
      if(pHookApi->pOldproc == NULL)
pHookApi->pOldProc = (PROC)pRealThunk->u1.Function;
  //修改API函数IAT项内容为替代函数地址。
pRealThunk->u1.Function = (PDWORD)pHookApi->pNewProc;
//恢复修改页保护属性。
DWORD dwOldProtect;
       VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegIonSize, mbi_thtnk.Protecu, &dwOldProtect);
      }
}
  pOrIgThunk++;
  pRealThunk++;
}
  SetLastError(ErROR_SUCCESS); //设置错误为ERROR_SUCCESS,表示成功。
  return TRUE;
   }

  (4) 定义替代函数,此实例中只给MessageBoxA和recV两个API进行挡截。代码如下:

   static Int WINAPI MessageBoxA1 (HWND hWnd , LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
   {
    //过滤掉原MessageBoxA的正文和标题内容,只显示如下内容。
return MessageBox(hWnd, "Hook API OK!", "Hook API", uType);
   }
   static Int WINAPI recv1(SOCKET s, char FAR *buf, int len, Int flags )
   {
   //此处可以挡截游戏服务器发送来的网络数据包,可以加入分析和处理数据代码。
   return recv(s,buf,len,flags);
   }

  (5) 在KeyboardProc函数中加入激活挡截API代码,在If( wParam == 0X79 )语句中后面加入如下else If语句:

   ......
   //当激活F11键时,启动挡截API函数功能。
   else If( wParam == 0x7A )
   {
    HOOKAPI api[2];
api[0].szFunc ="messageBoxA";//设置被挡截函数的名称。
api[0].pNewProc = (PROC)MessageBoxA1;//设置替代函数的地址。
api[1].szFunc ="recv";//设置被挡截函数的名称。
api[1].pNewproc = (PROC)recv1; //设置替代函数的地址。
//设置挡截User32.dll库中的mesSageBoxA函数。
HookAPIByName(GetModuleHandle(NUlL),"User32.dll",&api[0]);
//设置挡截Wsock32.dll库中的recv函数。
HookAPIByName(GetModuleHandle(NULL),"Wsock32.dll",&api[1]);
   }
   ......

  (6) 在ActIveKey.cpp中加入头文件声明 "#include "wsock32.h"。 从“工程”菜单中选择“设置”,弹出Project Setting对话框,选择Link标签,在“对象/库模块”中输入WS2_32..lIb。

  (7) 重新编译ActiveKey项目,产生ActiveKey.dll文件,将其拷贝到SimulAte.exe目录下。运行Simulate.Exe并启动全局钩子。激活任意应用程序,按F11键后,运行此程序中可能调用MessageBoxA函数的操作,看看信息框是不是有所变化。同样,如此程序正在接收网络数据包,就可以实现封包功能了。





ppdx995

ZxID:3683301

等级: 上士
举报 只看该作者 沙发   发表于: 2009-11-06 0
专业问题啊。看不懂
打不死的神

ZxID:8640567

等级: 上士
人可以成为神,猴子可以成为孙悟空吗?
举报 只看该作者 板凳   发表于: 2009-11-06 0
跟天书一样,太深奥了
别拿我对你的承诺当成你不要脸的行为
« 返回列表
发帖 回复