其实,当你对Windwos核心编程有一定的了解后,编写各种游戏小外挂就和写"Hello World!"一样简单。

War3开图小外挂实现步骤主要有三:1 提升当前外挂进程的访问权限;2 获取War3的进程句柄以及该进程中game.dll的基地址;3 修改War3的进程空间数据(开图)。下面我们对每一部分做详细分析。

一、 提升当前外挂进程的访问权限

    Windows系统中,当你想在一个进程中利用OpenProcess获取另一个独立进程的句柄时,你必须提升该进程的权限。要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcessID)还是会遇到“访问拒绝”的错误。什么原因呢?原来在默认的情况下进程的一些访问权限是没有被启用(Enabled)的,所以我们要做的首先是启用这些权限。通常我们通过调用OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges等函数来修改进程的访问权限。该部分代码如下:

//提升当前进程的访问权限

[cpp]  view plain copy
  1. BOOL ImproveProcPriv()
  2. {
  3. //得到进程的令牌句柄
  4. HANDLE token;
  5. if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))
  6. {
  7. MessageBox(NULL,"打开进程令牌失败...","错误",MB_ICONSTOP);
  8. return FALSE;
  9. }
  10. //查询进程的权限
  11. TOKEN_PRIVILEGES tkp;
  12. tkp.PrivilegeCount = 1;
  13. LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);
  14. //修改进程权限
  15. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  16. if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))
  17. {
  18. MessageBox(NULL,"调整令牌权限失败...","错误",MB_ICONSTOP);
  19. return FALSE;
  20. }
  21. CloseHandle(token);
  22. return TRUE;
  23. }

二、 获取War3的进程句柄以及该进程中game.dll的基地址

    提升当前进程的访问权限后,我们就能够轻松地利用OpenProcess获取War3的进程句柄了。首先我们通过进程名称“war3”或者"War3"来获取war3的进程id,然后调用OpenProcess获取war3的进程句柄。

注意设置外挂进程对war3进程的操作权为:

PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE

这样你就能够修改war3进程空间的内容了。该部分代码如下:

[html]  view plain copy
  1. void CWar3OpenMapDlg::InitGameHandle124()
  2. {
  3. ImproveProcPriv();    //提升当前进程的权限
  4. DWORD dwpid = GetProcPIDByName("war3.exe");     //得到war3进程ID
  5. if (dwpid == 0)
  6. {
  7. dwpid = GetProcPIDByName("War3.exe");       //得到war3进程ID
  8. if (dwpid == 0)
  9. {
  10. ::MessageBox(m_hWnd, "貌似您 没有开war3吧?", 0, MB_ICONERROR);
  11. return ;
  12. }
  13. }
  14. //得到war3进程句柄
  15. hopen = OpenProcess( PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
  16. PROCESS_VM_WRITE,FALSE, dwpid);
  17. if (hopen == NULL)
  18. {
  19. ::MessageBox(m_hWnd, "不能打开war3进程!", 0, MB_ICONERROR);
  20. return ;
  21. }
  22. BOOL bret = FALSE;
  23. gameBase = GetDLLBase(_T("Game.dll"), dwpid);
  24. if (gameBase == 0)
  25. {
  26. gameBase = GetDLLBase(_T("game.dll"), dwpid);
  27. }
  28. dSize = 0;
  29. gameAddr = (DWORD)GetModuleHandle("game.dll");
  30. //设置为内存页为可读可写可执行,(gameBase + 0x01000)为要改变属性的内存起始地址,0x87E000要改变属性的内存区域大小
  31. BOOL bVir = VirtualProtect((LPVOID)(gameBase+0x01000),0x87E000,PAGE_EXECUTE_READWRITE,&OldProtect );
  32. }

三、 修改War3的进程空间数据(开图)

    前面两部分只是做好了准备工作,到这一步我们才干我们想干的事。需要修改的地址空间可以到网上去查。该部分代码如下:

[cpp]  view plain copy
  1. //hopen:魔兽的进程句柄;i:地址偏移量;w:将被写入到指定进程的地址空间内的数据;l:写入数据的字节数;dSize:可为NULL
  2. #define WPM(i,w,l) WriteProcessMemory(hopen,reinterpret_cast<LPVOID>(gameBase+i),w,l,&dSize)
  3. //开图函数
  4. void CWar3OpenMapDlg::OnButtonOpenmap()
  5. {
  6. // TODO: Add your control notification handler code here
  7. InitGameHandle124();
  8. WPM(0x74D1B9,"\xB2\x00\x90\x90\x90\x90",6);
  9. 大地图显示单位
  10. WPM(0x39EBBC,"\x75",1);
  11. WPM(0x3A2030,"\x90\x90",2);
  12. WPM(0x3A20DB,"\x8B\xC0",2);     //用相同指令替换掉
  13. ///显示隐形单位
  14. WPM(0x28357C,"\x40\xC3",2);
  15. /显示物品
  16. WPM(0x3A201B,"\xEB",1);
  17. WPM(0x40A864,"\x90\x90",2);
  18. 小地图 去除迷雾
  19. WPM(0x357065,"\x90\x90",2);
  20. ///小地图显示单位
  21. //PATCH(0x361F7C,"\x00",1);
  22. WPM(0x361F7C,"\xC1\x90\x90\x90",4);                                             //换了种方法绕过检测
  23. /敌方信号
  24. WPM(0x43F9A6,"\x3B",1);
  25. WPM(0x43F9A9,"\x85",1);
  26. WPM(0x43F9B9,"\x3B",1);
  27. WPM(0x43F9BC,"\x85",1);
  28. /他人提示
  29. //
  30. WPM(0x3345E9,"\x39\xC0\x0F\x85",4);
  31. 敌方头像
  32. WPM(0x371700,"\xE8\x3B\x28\x03\x00\x85\xC0\x0F\x85\x8F\x02\x00\x00\xEB\xC9\x90\x90\x90\x90",19);
  33. /盟友头像
  34. WPM(0x371700,"\xE8\x3B\x28\x03\x00\x85\xC0\x0F\x84\x8F\x02\x00\x00\xEB\xC9\x90\x90\x90\x90",19);
  35. //资源面板
  36. WPM(0x36058A,"\x90",1);
  37. WPM(0x36058B,"\x90",1);
  38. ///   允许交易
  39. WPM(0x34E8E2,"\xB8\xC8\x00\x00",4);
  40. WPM(0x34E8E7,"\x90",1);
  41. WPM(0x34E8EA,"\xB8\x64\x00\x00",4);
  42. WPM(0x34E8EF,"\x90",1);
  43. 显示技能
  44. WPM(0x2031EC,"\x90\x90\x90\x90\x90\x90",6);
  45. WPM(0x34FDE8,"\x90\x90",2);
  46. /技能CD
  47. WPM(0x28ECFE,"\xEB",1);
  48. WPM(0x34FE26,"\x90\x90\x90\x90",4);
  49. //资源条
  50. //野外显血
  51. ///视野外点击
  52. WPM(0x285CBC,"\x90\x90",2);
  53. WPM(0x285CD2,"\xEB",1);
  54. /无限取消
  55. WPM(0x57BA7C,"\xEB",1);
  56. WPM(0x5B2D77,"\x03",1);
  57. WPM(0x5B2D8B,"\x03",1);
  58. //1111
  59. /过-MH
  60. WPM(0x3C84C7,"\xEB\x11",2);
  61. WPM(0x3C84E7,"\xEB\x11",2);
  62. 反-AH
  63. WPM(0x3C6EDC,"\xB8\xFF\x00\x00\x00\xEB",6);
  64. WPM(0x3CC3B2,"\xEB",1);
  65. WPM(0x362391,"\x3B",1);
  66. WPM(0x362394,"\x85",1);
  67. WPM(0x39A51B,"\x90\x90\x90\x90\x90\x90",6);
  68. WPM(0x39A52E,"\x90\x90\x90\x90\x90\x90\x90\x90\x33\xC0\x40",11);
  69. ///分辨幻影
  70. }

外挂在单机和局域网环境下测试通过,只支持1.24e版本。代码可以在本人的资源中下载到。如有任何问题,欢迎交流。

转自:http://blog.csdn.net/victoryknight/article/details/7580188

转载于:https://www.cnblogs.com/knightluffy/archive/2012/11/21/2780776.html

[转]War3小外挂之一键开图相关推荐

  1. War3小外挂之一键开图

    其实,当你对Windwos核心编程有一定的了解后,编写各种游戏小外挂就和写"Hello World!"一样简单. War3开图小外挂实现步骤主要有三:1 提升当前外挂进程的访问权限 ...

  2. 微信小程序开发开篇词 自顶向下,云端赋能:小程序的高效开发之道

    你好,我是周俊鹏,做前端开发已经 6 年多了,目前我就职于腾讯云 TCB 团队,负责腾讯云开发 CloudBase 前端相关的研发和生态建设工作.我可以说是第一批次的微信小程序开发者,2016 年 9 ...

  3. 微信小程序:二开版优化新紫色UI云开发新款壁纸小程序源码

    这是一款由旧版https://airymz.com/3387.html进行优化二开的一个新版本 本壁纸表情包头像小程序采用(dcloud云开发)所以无需服务器与域名 无需服务器.无需域名.云开发直接上 ...

  4. xshell支持图形_Xshell打不开图形化界面,或许该这样做!

    原标题:Xshell打不开图形化界面,或许该这样做! Xshell是一款优秀的安全终端模拟软件,而且可以配合其他一些模拟软件来使用,例如Xftp.Xmanager.Xstart等,各个软件相互配合,能 ...

  5. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台

    STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台   Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指 ...

  6. 一键读图OCR 轻松搞定任意网页上出现的文字提取

    谷歌Chrome浏览器 有个插件:一键读图OCR 用谷歌浏览器打开以下链接,点击 添加扩展, 直接安装即可. https://chrome.google.com/webstore/detail/%E4 ...

  7. 1.15 一键开关机电路

    1 简介 一键开关机的需求在很多的场景我们都可看到,例如电脑.工控机等场所.通过一个按键就可以实现开机和关机两个过程. 2 原理分析 原理:控制Q2(PMOS)的打开与关闭来实现的 当按键K1闭合时, ...

  8. 为您带来摹客iDoc这款PS自动标注,一键切图神器的超详细教程!速看!

    摹客iDoc中文版是一款适用于ps的自动标注,一键切图神器,通过摹客iDoc PS插件,可以上传PS设计稿以进行标记切图等.摹客iDoc插件提供了自动标注切图的功能,让团队协作设计更加简单.而且这款插 ...

  9. Excel图表神器EasyShu2.9,堪称作图神器,主流好看专业有颜值的图表一键出图

    EasyShu算是一款不错的良心软件,以Excel插件形式提供,在Excel上完成数据处理.分析,然后接着一键出图, 这个体验不能再好. 提前说明,它是付费性插件,但良心的是所有辅助类功能全免费,大量 ...

最新文章

  1. 如何成为SEO专家(10步指南)
  2. Linux centos7 下 svn 服务器搭建
  3. c语言switch()语句
  4. 在jquery mobile制作app的几个页利用ajax将后台数据json数组动态加载到列表里面
  5. Python Django session存取值代码演示及jsonpickle序列化
  6. 可变lambda_Lambda的Lambda(如果可选)
  7. 因子分析——python
  8. 系统操作手册_东芝CT操作手册——系统概述
  9. 为什么下载mysql找不到installer文件呀_PythonMySQL系列1(安装Mysql)
  10. 理财产品利息一直降低是什么原因?
  11. 通过jquery 获取下拉列表中选中的值对应的value
  12. 实战篇:如何用Keras建立神经网络(附全部代码) 1
  13. 何如添加到将文章添加到首页
  14. 【C语言学习教程---1】VC++6.0的安装和创建简单C语言工程文件教程
  15. 申请微信小程序需要的材料
  16. 图像局部特征(五)--斑点检测之SIFT算法原理总结
  17. 编程语言拟人化(1):Java、C++、Python、Ruby、PHP、C#、JS的区别
  18. iPhone 13系列电池信息曝光,续航稳了
  19. svn提交忽略target目录
  20. 彻底解决快压这个垃圾流氓软件

热门文章

  1. 锐龙7000系移动处理器出来了,怎样辨别马甲CPU?
  2. Android APK静态分析
  3. 软件测试工程师工作内容有哪些?
  4. 【面经】2022互联网算法岗面试总结
  5. ABBYY FineReader PDF 16安装教程使用指南及ABBYY16系统配置要求
  6. bootstrap修改样式表
  7. python中能够修改主窗口标题的属性是_word属性里的标题如何更改
  8. 详解kmalloc、vmalloc
  9. 我们来翻翻元素样式的族谱-getComputedStyle
  10. English Learning - L2 语音作业打卡 复习双元音 [ɔɪ] [aʊ] 代词弱读技巧 Day49 2023.4.10 周一