【Unity游戏破解】外挂原理分析

article/2025/10/1 20:09:52

文章目录

  • 认识unity
    • 打包目录结构
  • 游戏逆向流程
  • Unity游戏攻击面
    • 可被攻击原因
      • mono的打包
    • 建议方案
      • 锁血
      • 飞天
      • 无限金币
      • 攻击力翻倍
    • 以上统称内存挂
      • 透视
      • 自瞄
      • 压枪
      • 瞬移
      • 内购破解
  • Unity游戏防御
    • 开发时注意数据安全
    • 接入第三方反作弊系统
    • 外挂检测思路
      • 狠人自爆
  • 实战
    • 查看目录结构
      • 用il2cpp dumper
    • 例子2-森林
    • who is he
  • 后记

认识unity

打包目录结构

在这里插入图片描述
dll一般很大,因为里面是所有的游戏功能编译成的二进制码

游戏逆向流程

开发人员代码被编译打包到GameAssembly.dll中

使用il2ppDumper工具,并借助游戏名
_Data\il2cpp_data\Metadata\global-metadata.dat恢复符号

使用IDA对该dII进行反编译

分析核心逻辑实现的代码(相对Mono困难)

根据分析结果对代码进行patch,实现某种变态功能.

Unity游戏攻击面

数值修改
锁血
飞天
无限金币
攻击力翻倍
离谱功能
透视
自瞄
压枪
瞬移
内购破解

可被攻击原因

Unity引擎打包方式成为了外挂开发的帮凶!

mono的打包

C# 是解释型的语言–支持反射-----这个缺陷,可以非常容易恢复打包的函数名,变量名

建议方案

锁血

CE来搜索数值,去确定血量的变量
然后把他固定

用IDA分析血量减(sub)的指令,给他nop掉,就不会扣血

飞天

管人物的高是z这个变量,不停修改人物处在的位置,CE 走坡,走底,锁定Z的变量

无限金币

数字修改,就是内存挂
大同小异,和前面的
去覆盖金币的变量

攻击力翻倍

找到攻击力是哪个变量,去更改攻击力

以上统称内存挂

内存就比如说无后,X特效,广角,不过内存都容易封

透视

去读内存里的数据

自瞄

去找人物的骨骼系统,把准星设置到骨骼就是自瞄了

压枪

看枪后座的实现,可能是一个浮点类型的变量,根据手按左键的时间影响弹道轨迹

瞬移

存在传送的功能,实现了一个传送的函数,调用了就可以

有的直接修改人物坐标

内购破解

找到联网支付的模块在那里,根据返回值判断是否购买,把相应的那一块做一下patch
这是以前的方法,比如滑雪大冒险一样的游戏

Unity游戏防御

开发时注意数据安全

接入第三方反作弊系统

TP
EAC(Easy Anti Cheat)
VAC(Valve AntiCheat)-----------CSGO用
Battleye Anticheat

easy-anticheat 好像是直接扫内存吧

在这里插入图片描述
在这里插入图片描述

外挂检测思路

符号混淆
变量值混淆
文件完整性校验
调试器检测、阻止调试器附加—无法动态分析了
检测内存编辑工具(Cheat Engine等)
基于签名的内存完整性检测
检测dII注入----常见,外挂都是写成个DLL
检测APIHook----比如透视,hook 一下图形API的函数,可以通过检测常用的函数是否被hook
封锁内存读写----不让在应用层读写内存,上驱动保护的那种
统计异常检测------统计一段时间内游戏崩溃多少次

狠人自爆

在这里插入图片描述

实战

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看目录结构

在这里插入图片描述
看到unityplayer

猜测打包方式,看Data里面猜测是il2cpp

用il2cpp dumper

把游戏拖进去

在这里插入图片描述
搜索getflag
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
用框架脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mono打包方式
在这里插入图片描述

例子2-森林

在这里插入图片描述
用il2cppDumper去分析

who is he

mono打包方式,就跟源码差不多
相当于看到源码
在这里插入图片描述

后记

推荐阅读:r3kapig:校园明星ctf 战队的奇幻养成之旅


🌸I could be bounded in a nutshell and count myself a king of infinite space.
 特别鸣谢:木芯工作室
特别鸣谢:木芯工作室 、Ivan from Russia



http://chatgpt.dhexx.cn/article/pqYmPMWK.shtml

相关文章

AssetStudio/UnityStudio UABE等 破解Unity游戏

使用AssetStudio/UnityStudio UABE等 破解Unity游戏 前言工具准备前期处理替换图片资源替换配置表/TextAsset替换界面文字/界面UI描述从签名/打包安装/测试 前言 用于研究,学习 工具准备 UABE: 地址:github地址AssetStudio/UnityStudio 地址&#xff…

unity3d手游破解(一)

重点知识: 1. \assets\bin\Data\Managed\Assembly-CSharp.dll扔进Reflectorreflexil环境 2.libs\libmono.so的mono_image_open_from_data_with_name函数 MonoImage *mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, Mon…

【Unity3D】初学加密技巧(反破解)

参考文章: Unity3D研究院之Android加密DLL与破解DLL .SO(八十一) | 雨松MOMO程序研究院 Unity3D研究院之Android二次加密.so二次加密DLL(八十二) | 雨松MOMO程序研究院 Unity 2019.4.0 Mono 编译以及加密 windows版…

2021Unity教程:Unity官方中文版免费下载方法(黑皮肤可选)无需破解!

首先科普两个知识点: 1. Unity官方支持个人免费版,新的学习者和初创公司员工(公司财务规模低于10万美元一年)均可以使用。黑皮肤免费(Unity2019.3以上的版本),基本功能齐全,无需破解…

Unity官方支持中文版啦!!!附教程——无需破解!

Chinar blog :www.chinar.xin Unity安装官方中文版教程 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —…

Unity游戏逆向及破解方法介绍

背景介绍 随着手游的发展,Unity3D引擎逐渐成为主流的游戏开发解决方案,传统cocos的2D游戏逐渐被取代,一些公司在Unity3D游戏方面的产出也越来越多,如天天飞车,天天来战,全民破坏神,全民偶像&am…

java之成员变量(实例成员变量和静态成员变量)

类的成员 类的成员可以包含以下:字段、方法、代码块、内部类和接口等。此处我们重点介绍字段. 1.1字段/属性/成员变量 在类中, 但是方法外部定义的变量. 这样的变量我们称为 "字段" 或 "属性" 或 "成员变量"(三种称呼都可以, 一般…

java成员变量的调用_java中对象调用成员变量与成员的方法介绍

java中对象调用成员变量与成员的方法介绍 发布时间:2020-05-06 10:03:53 来源:亿速云 阅读:838 作者:小新 今天小编给大家分享的是java中对象调用成员变量与成员的方法介绍,相信很多人都不太了解,为了让大家…

局部变量和成员变量

局部变量和成员变量的区别: 定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中作用范围不一样【重点】 局部变量:只有在方法当中才可以使用,出了方法就不能再用了 成…

C++之静态成员变量

一、静态成员变量 1)static修饰的静态成员 静态成员变量、静态成员函数 静态成员变量: 1、static声明为静态的,称为静态成员,不管这个类创建了多少对象,静态成员只有一个拷贝,但是类的其他所有成员共享…

静态成员-静态成员变量

静态成员 静态成员都是用static修饰,它的特点是不论创建多少个对象,程序都只创建一个静态成员。 最主要的特点:共享 什么是共享呢? 例如:统计超市中所有商品数量的总和,商品数量的总和是随着每一个数量…

成员变量和成员方法

成员变量 1、成员变量的分类 实例变量:没有static修饰,也叫对象属性(实例变量),属于某个对象的,通过对象来使用 类变量:有static修饰,也叫类变量,属于整个类的&#x…

Python——成员变量和类变量

类中的变量分为两种类型:一种是成员变量(实例属性),另一种是类变量(类属性)。 成员变量是在构造方法__init__()中定义的,通过 self 参数引用; 类变量是在类中方法之外定义的变量。 在类的外部,成员变量属于对象,只能通过对象名访问; 类变量属于类,既可以通过类名访问,又可以…

成员变量[详解]

我是认为"成员变量包含实例变量和静态变量(静态变量也是类变量)",但学习过程中遇到说"成员变量仅仅指实例变量",所以下面具体研究一下成员变量的定义、包含关系 1、认同"成员变量包含实例变量和静态变量"的说法汇总 说法一 java中,成员变量是指…

基于MediaPlayer实现视频播放

一、概述 一个简单的视频播放器,满足一般的需求。使用原生的 MediaPlayer 和 TextureView来实现。 功能点: 获取视频的首帧进行展示,网络视频的首帧会缓存视频播放,本地视频或者网络视频感知生命周期,页面不可见自动…

玩转 Android MediaPlayer之Media Proxy

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 本文是在《Android MediaPlayer与Http Proxy结合之提高篇》基础上,进一步优化代理服务器,支持了Http的302、301重定向,获取Http Request和Http Response的文…

MediaPlayer播放assets文件夹下的音频

一、先放张图,MediaPlayer的生命周期图如下: 二、mediaPlayer方法 setDataSource() //设置要播放的音频文件的位置 prepare() //在开始播放之前调用这个方法完成准备工作 start() //开始或继续播放音频 pause() //暂停播放音频 reset() //将MediaPlayer…

Android openGL+MediaPlayer播放视频

在Android平台折腾了好多次openGL MediaPlayer播放视频的事情,openGL本身是套API规范,其身后的计算机图形学还是比较难缠,但只是播放视频用不了太多东西,没有过多的坐标转换、简单2D纹理展示,实现起来还是比较简单&am…

Android-MediaPlayer播放网络音频

官方文档&#xff1a;https://developer.android.google.cn/reference/android/media/MediaPlayer 运行截图&#xff1a; 主布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.a…

深入Android MediaPlayer的使用方法详解

1&#xff09;如何获得MediaPlayer实例&#xff1a; 可以使用直接new的方式&#xff1a; MediaPlayer mp new MediaPlayer(); 也可以使用create的方式&#xff0c;如&#xff1a; MediaPlayer mp MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了 2) 如…