用户
搜索
  • TA的每日心情
    擦汗
    2016-10-1 11:07
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    i春秋-脚本小子

    Rank: 2

    2

    主题

    14

    帖子

    227

    魔法币
    收听
    0
    粉丝
    2
    注册时间
    2016-6-5
    发表于 2018-4-21 21:22:53 814479
    本帖最后由 奶权 于 2018-4-21 21:43 编辑

    利用Python做绝地科学家(外挂篇)

    作者:奶权

    前言

    Text 玩吃鸡时间长的鸡友们 应该都知道现在的游戏环境非常差 特别在高端局 神仙满天飞 搞得很多普通玩家非常没有游戏体验

    Text 因为吃鸡的火爆 衍生出了一条巨大的外挂利益链 导致市面上出现了各式各样的外挂http://news.17173.com/z/pubg/content/12072017/144924727.shtml

    正是因为现在的神仙满天飞 像我这种菜逼实在没办法生存下去 我的报复欲促使我开始了科学研究

    Text 先给大家介绍一下现在市面上的外挂种类

    • 传统外挂

      fps游戏都有一个共同的特点,大部分计算都是本地完成的,不可能每一个动作都和服务器交互,有几个原因:
      • 会造成服务器负荷过大,提高运营成本
      • 在对枪杀人时,几十ms的延迟可能会扭转战局
      • 会极大影响游戏体验
      由于大量的计算都是在本地完成的,而游戏又是运行在内存中,那么导致了我们有很多种方法进行利用。最简单的就是用CE修改内存里的数据,常规的有注入和Hook,还有各种奇淫技巧。单以注入为例,就有五花八门的注入技术。下面是《游戏外挂攻防艺术》一书中的提到的一些方法:
      • 注册表注入
      • 远线程注入
      • 依赖可信进程注入
      • APC注入
      • 消息钩子注入
      • 导入表注入
      • 劫持进程创建注入
      • LSP劫持注入
      • 输入法注入
      • ComRes注入
    • 修改本地文件的PUBG外挂

      本篇文章就是基于这种方法实现的,原理是通过修改本地游戏资源(*.pak),来实现的各种功能,而PUBG采用BattlEye来实现反外挂,游戏运行时后台有个叫BEservice.exe的进程,进游戏后打开任务管理器就能看到两个很明显的PUBG logo的进程,另外一个叫TslGame.exe是游戏的进程。BEservice.exe对PAK修改的检测十分严格,而且不断在更新,这也是各种辅助有时在游戏更新后会失效的一个主要原因。而基本上一个外挂失效,也只用更新下过检测(BEservice.exe),就能满血复活了。

    外挂介绍来自:https://bbs.ichunqiu.com/thread-37371-1-1.html?from=timeline&isappinstalled=0

    科学研究

    Text 上面说了基本上通过修改pak文件的外挂失效只需要更新一下过检测就行了

    自从前几天的游戏大更后 市面上很多过检测的方法都已经失效了 查了很多资料实验了很多次后 找到了个目前来说还算是稳定的方法:

    1. 复制一份PUBG目录 以下称bypass目录
    2. 将PUBG目录重命名为PUBG1
    3. 使用mklink命令创建bypass目录的软链接命名为PUBG
    4. 使用mklink命令创建功能pak文件的软链接 将其放入PUBG这个软链接中的paks目录
    5. 登steam 随便开一局游戏 上飞机后 删除第四步在paks目录里创建的软链接
    6. 删除第三步创建的PUBG软链接
    7. 将PUBG1目录重命名回PUBG

    Text 这样就大功告成了 前4步是初始化 后3步才算是过检测 复制完的bypass目录在不进行大更新的情况下可以不删除 也就是说如果你退出了游戏 就需要从第2步重新开始

    发明科技

    Text 要完成这个科技其实非常简单 只需要一些简单的文件操作基础即可 这里就不多bb了 直接上成品

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @ Author : NNNNNaiquan
    @ Mail   : misitenq@gmail.com
    """
    import config
    import os
    import shutil
    
    class bypass():
       def __init__(self, steamapps_path):
           self.steamapps_path = steamapps_path
           self.pubg_path      = steamapps_path + 'PUBG'
           self.bypass_path    = steamapps_path + 'bypass'
           if not os.path.exists(self.bypass_path):
               l('Info',unicode('正在初始化','utf-8').encode('gbk'))
               shutil.copytree(self.pubg_path,self.bypass_path)                    #step 1
           shutil.move(self.pubg_path,self.steamapps_path + 'PUBG1')               #step 2
           l('Info',unicode('初始化完成','utf-8').encode('gbk'))
    
       def make_link(self, ):
           pubg_pak_path = self.pubg_path + '\\TslGame\\Content\\Paks\\TslGame-WindowsNoEditor_ui1.pak'
           l('Info',unicode('正在创建软链接','utf-8').encode('gbk'))
           os.popen('mklink /j "' + self.pubg_path + '" "' + self.bypass_path + '"')       #step 3
           os.popen('mklink  "' + pubg_pak_path + '" "' + config.FUNC_PAK_PATH + '"')      #step 4
           l('Info',unicode('软链接创建成功','utf-8').encode('gbk'))
    
       def clean(self, ):
           bypass_pak_path = self.bypass_path + '\\TslGame\\Content\\Paks\\TslGame-WindowsNoEditor_ui1.pak'
           l('Info',unicode('正在过检测','utf-8').encode('gbk'))
           os.remove(bypass_pak_path)                                          #step 5
           os.popen('rd /s /q "' + self.pubg_path + '"')                       #step 6
           shutil.move(self.steamapps_path + 'PUBG1',self.pubg_path)           #step 7
           l('Info',unicode('成功过检测 开始奔放吧','utf-8').encode('gbk'))
    
    def l(s,message):
       print '[%s] %s'%(s,message)
    
    def main():
       steamapps_path = config.STEAM_PATH + 'steamapps\\common\\'
       if os.path.exists(steamapps_path + 'PUBG'):
           obj = bypass(steamapps_path)
           obj.make_link()
           l('Info',unicode('上飞机后切回来按任意键开始过检测','utf-8').encode('gbk'))
           os.system('pause')
           obj.clean()
       else:
           l('Warning',unicode('请检查配置文件中的游戏目录是否正确','utf-8').encode('gbk'))
    
    if __name__ == '__main__':
       main()

    Text 运行脚本前需要在同目录下创建一个config.py文件 里面需要放steam与功能pak的路径 格式:STEAM_PATH = '...\\Steam\\',FUNC_PAK_PATH = '...\\*.pak'

    科学实验

    Text 用了个主播无后的pak来测试

    Text

    Text

    最后

    这里我就不提供带功能的pak给大家了 虽然有心的话是能找到的 另外本人不敢保证不会封号 也不提倡大家使用外挂 就这样

    下期预告:我相信现在大部分玩家的Rank分都挺高的 进几把前十再吃几次鸡 Rank就差不多到1500-1600这样了 然后再要对枪对赢人就没那么容易了 毕竟大家的分都差不多实力也就差不多 这时候掉分的作用就来了 掉到鱼塘分段 体验炸鱼的乐趣 敬请期待 利用Python做绝地科学家(掉分篇)

    v2-0f81c5f93556aed5a00277f244f9fd38_hd.jpg

    评分

    参与人数 3魔法币 +41 收起 理由
    MAX丶 + 20 老铁无后座求私聊
    dusty11 + 1 用python写外挂也是厉害,了!
    Vulkey_Chen + 20 感谢你的分享,i春秋论坛有你更精彩!.

    查看全部评分

    本帖被以下淘专辑推荐:

    • · 思路|主题: 27, 订阅: 2
    发表于 2018-4-22 12:05:43
    没看懂 能讲讲原理嘛?
    使用道具 举报 回复
    大兄弟给力呀 python写外挂
    使用道具 举报 回复
    我比较好奇的是 l('Info',unicode('正在过检测','utf-8').encode('gbk')) 楼主能解释下这个l是啥日志输出嘛,我上面的包都导了,但是,没发现这个方法
    使用道具 举报 回复
    发表于 2018-4-23 11:35:09
    卧槽。除了牛逼,我不知道说什么了
    使用道具 举报 回复
    好喜欢你的表情包
    使用道具 举报 回复
    啊实打实大苏打
    使用道具 举报 回复
    发表于 2018-5-1 15:46:05
    卧槽,666
    使用道具 举报 回复
    发表于 2018-5-16 10:47:10
    卧槽有点6啊表哥
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册