12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 276|回复: 0

以某款防封为基础对LXL检测的展开分析

[复制链接]

312

主题

312

帖子

634

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
634
发表于 2020-9-17 18:19:20 | 显示全部楼层 |阅读模式
0x0 须知
      文章内容无任何不正当目的与非法企图, 仅仅是为了公开交换学习!


0x1 准备工作

      我的调试情况: Windows 10-1809
      技术支持(非自愿): 小冰雹防封软件
      我用到的工具: 1. x32dbg  2. PCHunter(一款强大的ARK工具, 缺点: 作者长时间未更新, 现已不支持1809往后的新系统).

0x2 进入正题

小冰雹防封
      出处: *群下载的
      开辟语言: 易语言
      重要功能:
      1. 针对对两款主流脚本(HanBOT, GE)的过检测, 使用者可以配合脚本在LXL游戏中实现自动走A, 连招, 躲避而不被封号.
      2. 躲避机器码封禁, 使用者可以在已经被T*P封禁的电脑设备上正常游戏.


      未发现小冰雹加载驱动, 全部功能均在应用层完成.


      注入姿势: 将其焦点功能Dll释放到游戏目录, 以hid.dll定名
      补充: hid是一个系统Dll的名字, 位于系统盘Windows\\System32\\目录下. LXL游戏进程在启动初期会尝试载入一次同目录下的hid.dll文件, 而且载入机遇十分早, 在T*P保护未覆盖游戏时就已将hid.dll载入内存.


      Step1. 观察其对机器码封禁检测的处理方式
      在开始之前, 我们要对游戏的机器码封禁检测有个基本构思, 首先IP地址显然不可能作为判定机器封禁的依据, 那么只能是玩家进行游戏的本机设备信息了, 例如硬盘, CPU, 网卡, 键盘鼠标这一系列设备的信息, LXL玩家众多, 考虑到要防止误封的情况, 必然是要收罗多个设备的信息综合判定, 而若是在R3层面完成这些信息的获取, 无疑就是使用Win32 API获取. 而防封软件无非就是使用Hook, 阻止游戏调用相关API大概将获取后的缓冲区中的设备信息随机化再作返回. 而Hook位置则可以选为相关API函数处, 或是在返回的T*P检测模块调用处. 而显然是在API函数处Hook更省力, 由于API函数所在地址可以通过GetProcAddress获取到, 可视为固定地址, 而若是在游戏相关模块内存地址作处理, 在这些模块更新后我们都要重新找到对应偏移, 且还会触发其CRC, 是吃力不讨好的方式.
      如上, 我们应先观察防封对API的Hook情况, 但是假如逐个跳转至API函数头部查看是否被Hook显然十分低效且可能会遗漏, 这时我们可以借助PCHunter工具中的进程应用层钩子扫描功能, 可以快速查看指定进程中模块内存的Hook情况, 某些加壳的模块和非可实行代码的区域(例如数据段)这些位置的数据改变是无法侦测的, 但对API函数所在系统模块的钩子扫描是绝对没有题目的.


      如上图, 可以看到大量的API函数头部被Hook了, 使用x32dbg附加游戏进程, 任意转到到其中一个被Hook API函数ReadFile的头部


      可以看到ReadFile函数头部被改为jmp了, 跳转至到防封的hid.dll内了, 在他的函数内处理完后在返回出去, 标准的Hook流程.


      这些API函数都是十分常用的而且网上资料丰富, 不作过多叙述, 下面我会演示其中两个比较复杂的API函数用法和Hook后的处理方式


      1. SetupDiGetDeviceInstanceIDA    功能: 检索指定设备实例Id
      此函数原型:
[C++] 纯文本查看 复制代码BOOL WINAPI SetupDiGetDeviceInstanceIdA(    HDEVINFO         DeviceInfoSet, // 设备信息集合的句柄    PSP_DEVINFO_DATA DeviceInfoData, // SP_DEVINFO_DATA结构体的指针    PSTR             DeviceInstanceId, // 用于接收返回的设备Id字符串, 此参数为我选取的处理点    DWORD            DeviceInstanceIdSize, // 缓冲区大小    PDWORD           RequiredSize // 接收返回Id的实际大小)

      以下是我写的该函数调用例子:
[C++] 纯文本查看 复制代码void Test(){    HDEVINFO hDevInfo = SetupDiGetClassDevsA(&GUID_DEVCLASS_NET, nullptr, nullptr, DIGCF_PRESENT);     cout

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-25 10:28 , Processed in 0.125000 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表