网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
协议型网络游戏外挂制作之启动
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
479274];ds:[00479274]为SendMessage的函数地址,调用SendMessage函数向外挂发送命令

 

 :00496818 5A pop edx;恢复各寄存器

 

 :00496819 59 pop ecx

 

 :0049681A 5B pop ebx

 

 :0049681B 58 pop eax

 

 :0049681C 8938 mov dword ptr [eax], edi;调用原来的操作,因为我们打补丁的时候跳过了部分操作,因此在这里进行原来的操作。

 

 :0049681E 5F pop edi

 

 :0049681F 5E pop esi

 

 :00496820 5D pop ebp

 

 :00496821 E9CC35FBFF jmp 00449DF2;跳回原来的地址之后接着执行

 

  以上就是拦截补丁的完整代码。在使用的时候,必须先将大话程序的[004966d0]中填充上外挂的窗口句柄,要不然是没办法弄得。

 

  使用W32dasm做补丁的时候好处在于我们看到的就是程序执行时用的虚拟地址,并且,W32dasm在给出汇编代码的同时给出了代码的16进制表示。补丁做完之后,剩下的就是如何将补丁程序放入到目标程序中了。

 

  当外挂窗口创建之后,我们通过向外挂窗口发送WM_USER 2来命令外挂窗口执行修改大话程序的操作。

 

  下面是具体的修改操作:

 

void TwgHookForm::ModifyXy2(TMessage Message)

{

 DWORD dwIdOld1, dwIdOld2, dwIdOld3, dwIdOld4, dwIdOld5;

 DWORD id=GetCurrentProcessId();

 HANDLE handle1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE,id);

 if (wghandle)

 {

  Byte getrecv1 =

   {

    0xE9, 0x0E, 0xCa, 0x04, 0x00

   }; //5

  Byte getrecv2 =

   {

    0x50, 0x53, 0x51, 0x52, 0x55, 0x57, 0x68, 0x04, 0x04, 0x00,

    0x00, 0xA1, 0xd0, 0x66, 0x49, 0x00, 0x50, 0x3E, 0xFF, 0x15,

    0x74, 0x92, 0x47, 0x00, 0x5A, 0x59, 0x5B, 0x58, 0x89, 0x38,

    0x5F, 0x5E, 0x5D, 0xE9, 0xcc, 0x35, 0xFB, 0xFF

   }; //38

  VirtualProtectEx(handle1, (void*)(0x004966d0), 4, PAGE_READWRITE,&dwIdOld1);

  if ((WriteProcessMemory(handle1, (void*)(0x004966d0), &wghandle, 4,NULL)) == false)

  {

   ShowMessage("写句柄错误!");

   return ;

  }

  VirtualProtectEx(handle1, (void*)(0x004966d0), 4, dwIdOld1, &dwIdOld1);

  VirtualProtectEx(handle1, (void*)(0x00449DED), 5, PAGE_READWRITE,&dwIdOld4);

  if ((WriteProcessMemory(handle1, (void*)(0x00449DED), getrecv1, 5, NULL)

) == false)

 

 {

  ShowMessage("拦截接收修正补丁错误!");

 }

 VirtualProtectEx(handle1, (void*)(0x00449DED), 5, dwIdOld4, &dwIdOld4);

 VirtualProtectEx(handle1, (void*)(0x00496800), 38, PAGE_READWRITE,&dwIdOld5);

 if ((WriteProcessMemory(handle1, (void*)(0x00496800), getrecv2, 38,NULL)) == false)

 {

  ShowMessage("拦截接收补丁错误!");

 }

 VirtualProtectEx(handle1, (void*)(0x00496800), 38, dwIdOld5, &dwIdOld5);

}

 

}

 

  在CB中使用自定义消息,需要在头文件中加入:

 

#define WM_USER_MODIF (WM_USER 2) //修改大话程序的消息

#define WM_USER_GETSEND (WM_USER 1) //拦截到发送数据接收到的消息

#define WM_USER_APIHOOK (WM_USER 5) //APIHOOK拦截到接收到的消息

#define WM_USER_GETRECV (WM_USER 4) //修改后的程序会向外挂窗口发送该消息。

 

  在外挂窗口类里面(我这里是TwgHookForm),添加函数void ModifyXy2(TMessage Message);

 

void GetRecv(TMessage Message);

 

  在protected:关键字下面添加消息映射声明:

 

BEGIN_MESSAGE_MAP

VCL_MESSAGE_HANDLER(WM_

  • 上一篇资讯: 外挂编写完全攻略
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号