欢迎访问网易云社区,了解更多网易技术产品运营经验。

手游外挂入侵

随着各种爆款手游的风靡,目前手机游戏的占比用户已经形成一个巨大的市场,市场上你争我夺,有将PC版本移植到手机中,也有新模式手游的推出。随着市场的扩大,除了手游产业的兴起壮大,也滋生出了手游的各种外挂产业。

现在市面上流行的手游外挂,总的来说包括了模拟触摸类、加速器、修改器,基于这些外挂涵盖的功能,就能实现目前绝大部分外挂的能力,如自动打怪升级做任务、血量无限、金币自设置、游戏速度加减等等;除了这些工具党常用的手段外,一些“专业人士”也参与了进来,针对不同游戏有不同的做法,大体可以概括成以下破解手段,注入游戏Hook相关逻辑函数、调试进程、静态篡改资源文件和代码逻辑等等,这些操作需要相关的专业知识,涉及逆向、重打包、脱壳等操作,经过这些操作可以实现更有定制化功能的外挂。接下来就分享两个在手游保护过程中所遇到的典型案例。

破解游戏下载商店

(1)案例介绍

该案例遇到的是一个专业的团队,他们负责破解游戏,向游戏中植入他们的加速器等插件,然后重打包上传到他们的应用商店中,玩家只需要下载他们的应用商店,从中找到需要的游戏,安装进入后自带各种外挂玩游戏,畅通无阻。进入游戏的界面会多一个辅助插件的窗口,提供了加减速的功能,因此需要深入分析植入的原理并找到加减速的实现。

商店页面展示

(2)案例原理分析

深入分析跟进,发现游戏进程在启动时,会加载多个新的动态库,其中包括了libsubstrate.so(此为一个著名的Hook框架,接着分析找到了他通过调用框架Inline Hook了libmono.so导出的两个方法,Hook的方法mono源码参考如下:

通过启动进程后附加,获取到Hook调用的函数,通过分析得知,mono_class_from_name函数是mono在解析DLL方法时会经过的一个函数,hook此函数后,在调用前,对参数中方法名、命名空间进行判断,最终通过调用mono_class_get_method_from_name获取到UnityEngine.Time.set_timeScale方法,该方法的作用便是设置游戏时间的流速。

Hook代码(IDA反编译):

再通过hook的第二个函数mono_runtime_invoke,进行调用该方法,将设置的参数传入,通过对游戏时间流速的更改设置,达到加速器的作用。

Hook代码(IDA反编译):

外挂接口服务提供商

(1)案例介绍

随着手游市场的崛起,外挂的增多,外挂市场的商人们似乎也意识到外挂开发者也在大量的涌进,绝大多数都能够写点脚本开发外挂,那么商人们就开始着手底层,通过找寻到的“专业人士”开发底层框架,提供接口供上层开发者调用,把逻辑的实现交给他们。

某外挂框架介绍

在最近的客户反馈中,一个游戏遇到了一个框架类定制的外挂,外挂作者通过该框架实现了一套自动化点击的脚本,完全无需人工进行操作。这类方式的实现,将底层深入的原理实现进行了封装,最后以API的形式提供给玩家,玩家仅需要一定的编程基础便可以掌握进行二次开发。

(2)案例原理分析

深入分析该框架类软件,发现它使用ROOT权限启动了一个疑似输入的可执行文件(/data/data/my.apk/app_data/input),从该路径下提取该可执行文件进行分析,从中找到了它使用app_process命令执行了一个名为input.jar的文件。

以下为IDA解析出来的伪代码,作为参考。

使用工具打开jar包查看,代码没有混淆,很轻易的就找到了关键的实现函数(具体实现原理可以参考《
 Android中模拟点击类软件实现原理探究》,这里提到过同样实现的方法):

通过jar包实现了模拟点击,与上层使用socket和其他进程进行通信,用户通过lua脚本控制代码逻辑,整个框架流程大致如此。

手游外挂辅助产业链兴起

案例介绍

收到了来自一些游戏的反馈,发现了手游外挂辅助的产业已经在阴暗的角落处开始萌芽,这些地方可能来自QQ群、贴吧、论坛、某宝等等,他们中有通过传授工具外挂使用方法达到目的的,有通过破解篡改游戏代码逻辑实现的,甚至有提供框架API调用完成的。

QQ群搜索查找

网络售卖破解版

可以看到,从Q群到淘宝,无论是工具党还是专业人士,都开始向手游市场下手,都想在这块市场获取利益。从相关游戏处了解到,不同游戏都或多或少有定制化的外挂存在。

在不断与外挂的攻防对战中,网易云易盾一直在加强巩固我们的手游加固产品对抗外挂的功能,总结了不同外挂的特性和攻击手段,在对已知外挂的抵御功能之上,推出了针对新型外挂的感知功能,做到寓攻于守、攻守兼备,新的反外挂系统,除了有新型外挂的感知功能,还有对使用外挂的用户、设备机型、外挂类型及详细特征等等进行定位,更好地对恶意用户进行取证和清理。可以
免费试用

相关文章:
【推荐】 JavaScript 如何工作:渲染引擎和性能优化技巧
【推荐】 3分钟掌握一个有数小技能:制作导航页面
【推荐】 “货品未动,数据先行”,德邦快递与网易云联合打造“智能物流”

Android手游外挂入侵----寓攻于守,方能破敌的更多相关文章

  1. Android手游《》斗地主完整的源代码(支持单机和网络对战)

    Android手游<斗地主>完整的源代码(支持单机和网络对战)下载.一个很不错的源代码. 斗地主掌游是一个独特的国内社会斗地主棋牌游戏,之后玩家可以下载网上斗地主和全世界.掌游斗地主特点: ...

  2. Python制作回合制手游外挂简单教程(上)

    引入: 每次玩回合制游戏的时候,反反复复的日常任务让人不胜其烦 玩问道的时候,我们希望能够自动刷道,玩梦幻希望能自动做师门.捉鬼等等 说明: 该外挂只能模拟鼠标键盘操作,并不能修改游戏数据 我这里使用 ...

  3. Python制作回合制手游外挂简单教程(下)

    引入: 接着上篇的博文,今天我们讲如何实现助人为乐 前期准备: 如何获取图片中指定文字的坐标? 我的思路是截取一个小区域,再根据小区域左上角的坐标获取中央坐标 例如: 获取坐上角的x和y坐标,测量x到 ...

  4. 某Android手游的lua源码逆向分析与还原

    近日分析某一款Android上面的手游,反编译后再起asset目录下可以看到加密过的脚本,lib目录下发现lua的so 初步怀疑其使用lua脚本实现的 解密函数定位 动态跟踪解密函数流程 静态分析解密 ...

  5. 破解者是如何篡改游戏内数值的,揭秘Android手游破解全过程

    由于Android系统的开放性,让人人都是开发者成为可能,也正因如此,手机APP遭受破解和盗版问题长期存在,且愈演愈烈.尤其是手游 行业,如刀塔传奇.植物大战僵尸.2048等知名游戏被破解的案例不胜枚 ...

  6. Python制作回合制手游外挂简单教程(中)

    接着上篇的博文,今天我们讲如何实现自动组队刷道 引入: 自动组队刷道的流程是先点击刷道按钮.再点击前往按钮.再点击便捷组队······ 这些操作上篇博文已经告诉我们怎么做了,利用picpick丈量坐标 ...

  7. Android手游2048核心功能

    private void swipeUp(){ //向上滑动函数 for (int x = 0; x < 4; x++) { //行从上到下 for (int y = 0; y < 4; ...

  8. 腾讯WeTest《2017中国移动游戏质量白皮书》开放预约,再为国内手游把把脉

    产品为王,质量先行.如果说2016年是爆款手游相继崛起的一年,那么2017年则更像是打磨精品.建立生态的高手切磋之年.守住一个游戏的质量生命线,方能建立健康生态,方能在如火如荼的行业竞争中角逐到最后. ...

  9. 新手做2D手游该用哪些工具?

    全球手游行业规模将突破250亿美元,越来越多的开发者开始进入手游研发领域,而作为一名菜鸟,很多时候,如果没有其他开发者的建议,会走很多弯路.一开始进入游戏研发领域的时候,你很难知道该选择什么工具.什么 ...

随机推荐

  1. loj 6485 LJJ学二项式定理 —— 单位根反演

    题目:https://loj.ac/problem/6485 先把 \( a_{i mod 4} \) 处理掉,其实就是 \( \sum\limits_{i=0}^{3} a_{i} \sum\lim ...

  2. snmpwalk用法

    snmpwalk语法:snmpwalk 交换机或路由器IP地址 -c SNMP读密码 -v 1或2(代表SNMP版本) OID(对象标示符) 用法举例:1.snmpwalk -c public -v ...

  3. java代码实现通讯录实例,我不知道这有什么用。,

    运行显示: Friend:zl,Address:武大樱花美Colleagues:蔡依林,Department:麻城市人民政府 题目: 1.任务描述 完善上面通讯录名片的例子. 2.技能要点 掌握类继承 ...

  4. ThreadPoolTaskExecutor的配置解释

    ThreadPoolTaskExecutor的配置在网上找了很多解释没找到,看了下ThreadPoolExecutor的配置,名字差不多,应该含义也差不多.只不过ThreadPoolTaskExecu ...

  5. malloc 动态分配内存

    很久没有学习C了,复习下,有时候觉的C特别优美,学习算法和数据结构最佳选择. #include "stdafx.h" #include<stdlib.h> int ma ...

  6. 国际化---demo1---bai

    login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  7. Python-使用unrar库时Couldn't find path to unrar library的解决办法

    在Pycharm安装完unrar后,还要安装rar官方的库 不然运行的时候会抛出Couldn't find path to unrar library的错误 Windows: 下载rarlib的库文件 ...

  8. 使用Ping命令解析主机名解析出来的是IPv6

    如果你经常使用ping命令,并身处局域网,那么你肯定会有这样一个疑问:Ping计算机名为何是IPv6地址? 问这个问题的人很少见,大多都是对网络知识稍有了解的人,所以才会闻到关于ping的问题,而且在 ...

  9. c++primer-p101.ex3.24

    要求使用迭代器 读入一组整数并把它们存入一个vector对象 1. 将相邻每对整数和输出 2. 先输出第一个和最后一个数的和,然后是第二个和倒数第二个...等等 自己写的: #include<i ...

  10. sys模块 进度条百分比

    用于提供对Python解释器相关的操作: sys.argv           命令行参数List,第一个元素是程序本身路径 sys.exit(n)        退出程序,正常退出时exit(0) ...