当前位置: 代码迷 >> Web前端 >> 说说过游戏保护(四)
  详细解决方案

说说过游戏保护(四)

热度:169   发布时间:2012-08-21 13:00:21.0
说说过游戏保护(4)

复制内容到剪贴板 代码: NTSTATUSReadPhysicalMemory(char*startaddress,UINT_PTRbytestoread,void*output) { HANDLEphysmem; UNICODE_STRINGphysmemString; OBJECT_ATTRIBUTESattributes; WCHARphysmemName[]=L\\d

<script type="text/javascript">/*336*280,创建于2011-5-12*/ var cpro_id = 'u473842';</script><script type="text/javascript" src="http://cpro.baidu.com/cpro/ui/c.js"></script><script type="text/javascript" charset="utf-8" src="http://pos.baidu.com/ecom?di=u473842&amp;tm=BAIDU_CPRO_SETJSONADSLOT&amp;fn=BAIDU_CPRO_SETJSONADSLOT&amp;baidu_id="></script>
-
  
  复制内容到剪贴板?
  代码:?
  NTSTATUS?ReadPhysicalMemory(char?*startaddress,?UINT_PTR?bytestoread,?void?*output)?
  {?
  HANDLE????????????????????????physmem;?
  UNICODE_STRING????????physmemString;?
  OBJECT_ATTRIBUTES?attributes;?
  WCHAR????????????????????????physmemName[]?=?L"\\device\\physicalmemory";?
  UCHAR*????????????????????????memoryview;?
  NTSTATUS????????????????ntStatus?=?STATUS_UNSUCCESSFUL;?
  __try?
  {?
  RtlInitUnicodeString(?&physmemString,?physmemName?);?
  InitializeObjectAttributes(?&attributes,?&physmemString,?OBJ_CASE_INSENSITIVE,?NULL,?NULL?);?
  ntStatus=ZwOpenSection(?&physmem,?SECTION_MAP_READ,?&attributes?);?
  if?(ntStatus==STATUS_SUCCESS)?
  {?
  //hey?look,?it?didn’t?kill?it?
  UINT_PTR?length;?
  PHYSICAL_ADDRESS????????viewBase;?
  UINT_PTR?offset;?
  UINT_PTR?toread;?
  viewBase.QuadPart?=?(ULONGLONG)(startaddress);?
  length=0x2000;//pinp->bytestoread;?//in?case?of?a?overlapping?region?
  toread=bytestoread;?
  memoryview=NULL;?
  DbgPrint("ReadPhysicalMemory:viewBase.QuadPart=%x",?viewBase.QuadPart);?
  ntStatus=ZwMapViewOfSection(?
  physmem,?//sectionhandle?
  NtCurrentProcess(),?//processhandle?(should?be?-1)?
  &memoryview,?//BaseAddress?
  0L,?//ZeroBits?
  length,?//CommitSize?
  &viewBase,?//SectionOffset?
  &length,?//ViewSize?
  ViewShare,?
  0,?
  PAGE_READWRITE);?
  if?(ntStatus==STATUS_SUCCESS)?
  {?
  offset=(UINT_PTR)(startaddress)-(UINT_PTR)viewBase.QuadPart;?
  RtlCopyMemory(output,&memoryview[offset],toread);?
  ZwUnmapViewOfSection(?NtCurrentProcess(),?memoryview);?
  }?
  else?
  {?
  DbgPrint("ReadPhysicalMemory:ntStatus=%x",?ntStatus);?
  }?
  ZwClose(physmem);?
  };?
  }?
  __except(1)?
  {?
  DbgPrint("Error?while?reading?physical?memory\n");?
  }?
  return?ntStatus;?
  }?
  直接读取物理内存,?到目前为止,这个方法依然对?nPROTECT?保护的进程有效.?
  实际上反外挂的驱动能拦截的不过是API而已,?你能拦截?mov?eax,[xxxxxxx]?吗??
  别忘记,你在驱动中采取的手段越多,驱动的兼容性必定越差.?
  在家中的玩家还好说,可是面对目前主要的玩家多数在网吧上网的情况,你不的不考虑各种网吧管理软件.?
  这样的情况,不谈兼容性光是你的驱动到底有没有机会被加载还是个问题....?
  即使是在家中上网的玩家,你难道要告诉使用?Vista?或者?Windows?7?的普通用户:?请关闭你的UAC?
  好吧,再这样写下去简直没完没了.?综上所述,?驱动反外挂,?这只是看起来很美而已.?
  怎么办??
  二.?如何有效的阻止外挂?
  前言中提到,要有效的反外挂,必先了解外挂如何运作.?在前文中,也描述了当前外挂主要的运作模式.?现在外挂已不是要求什么三步瞬移,格位刺杀之类的特殊功能了,对于工作室.?
  他们的需要仅仅是稳定的机器人,如果游戏提供的话,他们常常还需要能够把挂机角色上的金钱物品邮寄或者交易给某个账号的功能.?那么制作一个这样的机器人至少需要的是什么??
  1.?游戏角色的生命值,魔法值之类的数据?
  2.?游戏角色的物品数据?
  3.?游戏角色周围的怪物数据?
  4.?移动函数?
  5.?热键函数?[假如客户端接受?SendMessage?模拟键盘这样的消息,这不需要]?
  6.?选中怪物函数?
  7.?打开NPC函数?
  8.?打开仓库函数?
  9.?交易或邮寄函数?
  相关解决方案