首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏奋飞安全

    Unity IL2CPP 游戏分析入门

    现在工作这么难找,所以大家都采取第二种玩法了,使用IL2CPP方式打包,就没有Assembly-CSharp.dll。这样就不会让人轻易攻破了。 这时候就需要召唤出IL2CPP界的Decompiler了。 Metadata Version: 27 Initializing il2cpp file... Applying relocations... Il2Cpp Version: 27 Searching... Change il2cpp version to: 27.1 CodeRegistration : 205f9c8 MetadataRegistration : 205ff3c Dumping...

    4K31编辑于 2022-11-15
  • 来自专栏爱打音游的大A

    Il2cpp逆向:global-metadata解密

    前言   关于Il2cpp的资料网上有很多,简而言之,Il2cpp就是unity用来代替原来的基于Mono虚拟机的一种新的打包方式,它先生成IL(中间语言),然后再转换成Cpp文件,提高运行效率的同时增加了安全性 原本基于Mono的打包方式极其容易被逆向,现在市面上的新游戏基本上都是用Il2cpp的方式打包的,当然Il2cpp的逆向教程也很多,但是都是千篇一律,教你用国内大佬写的Il2cppDumper去dump 因此打算学习一下Il2cpp相关的攻防技术,于是在网上找了一个Il2cpp的CTF题来练手。题目来源:n1ctf-2018 baby unity3d   题目要求很明确,输入正确的flag即可。 ::Init -> il2cpp::vm::MetadataCache::Initialize -> il2cpp::vm::MetadataLoader::LoadMetadataFile files Unity之IL2CPP解析 Baby unity3D Il2cpp源码

    21.8K32编辑于 2023-02-14
  • 来自专栏Unity3d程序开发

    Unity3d:c#,Mono,IL2CPP,托管代码,AOT,JIT

    支持运行时代码执行 必须将代码发布成托管程序集(.dll 文件 , 由mono或者.net 生成 ) Mono VM在各个平台移植异常麻烦,有几个平台就得移植几个VM(WebGL和UWP这两个平台只支持 IL2CPP ) Mono版本授权受限,C#很多新特性无法使用 iOS仍然支持Mono , 但是不再允许Mono(32位)应用提交到Apple Store IL2CPP 相比Mono, 代码生成有很大的提高 可以调试生成的 Engine code stripping)来减少代码的大小 程序的运行效率比Mono高,运行速度快 多平台移植非常方便 相比Mono构建应用慢 只支持AOT(Ahead of Time)编译 IL2CPP 概括: Mono将c#翻译成IL IL2CPP得到IL转变为C++代码 再由各个平台C++编译器编译成可执行机器码

    1.2K11编辑于 2023-08-24
  • 来自专栏U3D技术分享

    Unity底层如何处理C#

    本篇章内容总结自网上公开课 ---- 目录 Mono虚拟机 IL2CPP Mono虚拟机 Mono:在微软开放.NET后,Mono是其平台下的.NET项目,支持Linux,Windows和Mac,Android Unity在以前为什么会选择Mono虚拟机:因为Mono支持夸平台发布 IL2CPP Unity为什么在Mono之后又推出了IL2CPP 1、Mono.Net的版权问题 2、Mono虚拟机解释执行.NET 字节码,运行效率相对较差 3、IOS等部分平台不允许内置.NET虚拟机 4、如果有新的计算平台出现,且Mono不支持,那么Unity就很难搞 IL:.NET字节码,IL2CPP,即把.NET字节码转换为 .net字节码,然后用IL2CPP转换成C++代码 3、开发IL2CPP VM以支持类似于C#垃圾回收机制等特性 结构层次: IL2CPP优势 (1)解决跨平台可移植性问题。 如果有新的平台出现,Unity直接一直IL2CPP即可,解决了.NET的版本问题。 (2)性能获得提升。.NET是解释执行字节码,而C++是本地的Native代码。

    76030编辑于 2022-10-05
  • 来自专栏进步集

    【Unity逆向】玩游戏遇到的“飞天锁血”是怎么实现的?

    Unity外挂攻防概述 典型游戏 现实应用 Unity开发流程 Unity工作界面 打包发布方式 Mono Mono跨平台原理 JIT方式 优点: 因此后期Unity发布了il2CPP Mono 打包目录结构 逆向流程 IL2CPP AOT方式 特点 打包目录结构 逆向流程 前言 什么是外挂? 工程建设与数字城市 汽车开发 Unity开发流程 创建项目 导入资源 搭建场景 添加组件 编写逻辑 程序测试 打包发布 Unity工作界面 打包发布方式 两种脚本后端 Mono IL2CPP java都是解释型语言,都要通过虚拟机来做事,来调用虚拟机的函数,每个平台都要重新翻译成哪个平台的机器语言,来匹配 Mono版本授权受限,很多C#新的特性无法使用 后期收费了 因此后期Unity发布了il2CPP Assembly-CSharp.dll里面 常规C#逆向流程 使用dnSpy对该DLL进行反编译—支持动调调试 分析核心逻辑实现代码,约等于对着源码阅读 根据分析下结果对代码进行patch,实现某种变态功能 patch–打补丁 IL2CPP

    1.7K50编辑于 2023-03-11
  • 来自专栏Technology Share

    Unity引擎与C#脚本简介

    因此,Unity在5.3.4版本中引入了il2cpp技术。 2.3 il2cpp原理 顾名思义,il2cpp就是把中间语言转换成cpp代码的工具。 [ 图七:il2cpp工作原理示意图 ] il2cpp会先读取.NET二进制文件,解析其中的符号,然后将其中C#方法转换成对应的C方法。 虽然名为il2cpp,但其实它只用到了很少部分的C++特性,绝大多数转换后的代码都是C函数。 ? [ 图八:il2cpp转换后的代码示例 ] 在游戏运行前,il2cpp会启动一个小的虚拟机,用于动态解析C方法。 method) { il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetMissingMethodException(name

    5.2K90发布于 2018-03-01
  • 来自专栏walterlv - 吕毅的博客

    Unity3D (Mono/IL2CPP) 中 P/Invoke 平台调用代码应该如何传委托

    IL2CPP does not support marshaling delegates that point to instance methods to native code. Unity 编译的时候可以选择脚本后端是 Mono 还是 IL2CPP。 - walterlv 在编译时不会有什么问题,但是在运行时会发生异常(如果你去捕捉,或者用 VS 调试就可以看到): 1 2 3 4 5 NotSupportedException: IL2CPP lpEnumFunc, Lsj.Util.Win32.BaseTypes.LPARAM lParam) at Win32WindowExtensions.FindVisibleWindows () “IL2CPP 修正代码 Mono/IL2CPP 要求封送到本机的代码必须是静态方法,且必须标 MonoPInvokeCallback 特性。

    1.5K30编辑于 2023-10-22
  • 来自专栏Unity3d程序开发

    Unity性能调优手册11PlayerSettings:脚本运行环境,代码裁剪

    github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/ PlayerSettings 脚本运行环境 Unity允许您在Mono和IL2CPP 我们建议选择IL2CPP,性能会有所提高。 此外,将脚本后端更改为IL2CPP也将更改c++可选择“Compiler Configuration 编译器配置”。

    1.2K11编辑于 2023-11-27
  • 来自专栏walterlv - 吕毅的博客

    Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包

    选 Mono 那么使用 Mono 虚拟机运行,选 IL2CPP 那么会编译 IL 到静态的 cpp 文件不依靠 Mono VM。 你可以通过 Unity将来时:IL2CPP是什么? - 知乎 简单了解 IL2CPP 是什么。 使用第三方 NuGet 包管理器——NuGetForUnity 特别注意:反射需要额外支持 如果你前面的脚本后端(Script Backend)选择了 IL2CPP,那么小心 dll 的元数据会丢失,依赖于反射的功能也将崩溃 System.Linq.Expressions.Interpreter.LightLambda" preserve="all" /> </assembly> </linker> 这将确保 Unity 的字节码剥离过程在导出到 IL2CPP

    6.1K20编辑于 2023-10-22
  • 来自专栏【腾讯云开发者】

    一文搞定手游内存优化

    最后再将堆栈按照GameCore和IL2CPP Managed进行归类,就可以统计出GameCore和IL2CPP Managed内存。 经过以上的数据处理,我们将游戏整体划分为了 Heap + GameCore + IL2CPP Managed + IOAccelerator 4个大模块。 3、细分数据 最后就是对Heap + GameCore + IL2CPP Managed + IOAccelerator 这4个模块进行细分。 3)IL2CPP Managed内存 这块内存之前很难处理。 我们都知道Unity MemoryProfiler工具可以按照对象类别将IL2CPP Managed内存进行分类,并且可以查到内存对象的依赖关系。

    93510编辑于 2025-07-02
  • 黑神话上线了,想起来学Lua了?

    ,从而支持跨平台,Mono 采用 JIT 方式执行代码;IL2CPP 则是将 C# 脚本编译的 IL 转化为 C++,再编译成本地机器码进行跨平台和利用各平台对 C++ 的优化从而提高性能,IL2CPP Mono 的脚本编译流IL2CPP 的脚本编译流 在一定程度上,IL2CPP 可以理解为 Mono 的 AOT 模块,HybridCLR 则第三方实现了 Mono 的 interpreter 模块,进行解释执行代码 ,补充了 IL2CPP AOT 动态性不足的问题。 由于对泛型的完美支持,使得因为AOT泛型问题跟il2cpp不兼容的库现在能够完美地在il2cpp下运行,支持一些il2cpp不支持的特性,如__makeref、 __reftype、__refvalue IL2CPP VM 下反射 dll 代码的管理、GC 及性能优化,以及 dll Release 混淆后能否跑通。

    75210编辑于 2024-08-24
  • 来自专栏DevOps持续交付

    Unity转向通用的.NET CoreCLR

    二、IL2CPP方案:从中间语言到原生编译的转变 随着游戏规模的增大和性能要求的提高,单一的跨平台方案已经不能满足所有的需求。 IL2CPP是Unity为了解决性能和平台兼容性问题而开发的一种新的中间语言。IL2CPP将C#代码转换为C++代码,再编译成本地机器码,提供更高的执行效率和更好的平台兼容性。

    1.9K10编辑于 2024-01-13
  • 来自专栏壹种念头

    Unity手游实战:从0开始SLG——ECS战斗(六)Unity面向数据技术栈(DOTS)

    目前默认的是Mono和IL2CPP两个编译选项。 Mono Mono就不用说了,是Unity跨平台的基础,也是赖以起家的手段。为Unity服务了这么多年,目前已经到了退役的阶段。 IL2CPP是目前满足条件的唯一选择。 IL2CPP IL2CPP看名字就看出来,这是一个将IL语言转换为CPP语言的工具,看下它的执行方式: ? 可以看到下面红色的部分,IL2CPP会将编译好的IL代码重写成CPP的代码,这样在使用每个平台的原生编译器,编译为原生平台的可执行文件,由于抛弃了虚拟机,并被原生编译器优化过,所以极大的提升了程序性能。 注意,我刚才其实有说IL2CPP抛弃了虚拟机,但是在上面的执行过程图里仍然有I2CPP VM的过程,这是因为C#本身是基于托管代码设计的语言,IL本身也是托管代码执行的,所以IL2CPP即使将IL转为了 所以IL2CPP要起一个VM来管理内存,以及分配线程等管理工作。与其说是一个VM其实描述为一个管理器更加贴合。

    3K10发布于 2020-07-10
  • 来自专栏烙馅饼喽的技术分享

    用ECMAScript4 ( ActionScript3) 实现Unity的热更新

    即使环境不提供JIT功能(例如Unity在IOS上,或者IL2CPP打包的安卓系统上)也同样不受影响。 热更新项目提供了一个Unity插件包和一个SDK文件夹。 测试环境均为无法jit的il2cpp打包手机环境实测。测试手机为魅蓝NOTE5 ? 简易使用入门 使用前先确认安装如下环境:  FlashDevelop。这是一个开源的IDE,可以用来开发脚本。 可以用il2cpp打包到安卓手机上查看效果。

    1.8K40发布于 2018-05-02
  • 来自专栏walterlv - 吕毅的博客

    杂谈 System.Drawing.Common 的跨平台性(关键词:libgdiplus / .NET Core / Mono / Win32 / Linux / ……)

    Unity 有两种不同的 C# 脚本后端可选:Mono 和 IL2CPP。 System.Drawing.Common 组合1 Mono .NET 4.x ✔️ ❌相当于没引用 组合2 Mono .NET Standard 2.0 ❌相当于没引用 ❌第三方 NuGet 包管理器会拷贝错误的 dll 组合3 IL2CPP .NET 4.x ❌可在编辑器运行,但打包后会出现异常 ❌未引用任何库 组合4 IL2CPP .NET Standard 2.0 ❌相当于没引用 ❌第三方 NuGet 包管理器会拷贝错误的 dll IL2CPP 里在编辑器里可以正常使用(当然能正常,因为编辑器又没用 IL2CPP),打包后出现的异常如下(所有的 System.Drawing 方法调用都有异常): 1 2 NotSupportedException

    3.9K60编辑于 2023-10-22
  • 来自专栏【腾讯云开发者】

    黑神话上线了,想起来学Lua了?

    ,从而支持跨平台,Mono 采用 JIT 方式执行代码;IL2CPP 则是将 C# 脚本编译的 IL 转化为 C++,再编译成本地机器码进行跨平台和利用各平台对 C++ 的优化从而提高性能,IL2CPP Mono 的脚本编译流 IL2CPP 的脚本编译流 在一定程度上,IL2CPP 可以理解为 Mono 的 AOT 模块,HybridCLR 则第三方实现了 Mono 的 interpreter 模块, 进行解释执行代码,补充了 IL2CPP AOT 动态性不足的问题。 由于对泛型的完美支持,使得因为AOT泛型问题跟il2cpp不兼容的库现在能够完美地在il2cpp下运行,支持一些il2cpp不支持的特性,如__makeref、 __reftype、__refvalue IL2CPP VM 下反射 dll 代码的管理、GC 及性能优化,以及 dll Release 混淆后能否跑通。

    1.5K42编辑于 2024-08-21
  • 黑神话上线了,想起来学Lua了?

    ,从而支持跨平台,Mono 采用 JIT 方式执行代码;IL2CPP 则是将 C# 脚本编译的 IL 转化为 C++,再编译成本地机器码进行跨平台和利用各平台对 C++ 的优化从而提高性能,IL2CPP Mono 的脚本编译流IL2CPP 的脚本编译流 在一定程度上,IL2CPP 可以理解为 Mono 的 AOT 模块,HybridCLR 则第三方实现了 Mono 的 interpreter 模块,进行解释执行代码 ,补充了 IL2CPP AOT 动态性不足的问题。 由于对泛型的完美支持,使得因为AOT泛型问题跟il2cpp不兼容的库现在能够完美地在il2cpp下运行,支持一些il2cpp不支持的特性,如__makeref、 __reftype、__refvalue IL2CPP VM 下反射 dll 代码的管理、GC 及性能优化,以及 dll Release 混淆后能否跑通。

    77910编辑于 2024-08-24
  • 来自专栏程序员叨叨叨

    Unity开发踩坑记录

    位的包,需要替换成64位: Unity Editor - Project Settings - Player - Android - Other Settings: Scripting Backend选择IL2CPP Ref: http://c.biancheng.net/view/4124.html # WebCamTexture + ARM64在部分机型上闪退的问题 用IL2CPP + ARM64打出来的包,在小米

    1.2K30编辑于 2021-12-06
  • 来自专栏林德熙的博客

    考古 dotnet 的不同版本

    的一个实现,这两个实现是前后继承的关系,在 .NET 6 准备开始切为 CrossGen2 实现,使用 CrossGen2 可以提供在开发者构建时,将一部分逻辑提前加上本机代码构建,用来提升启动性能 IL2CPP 在 Unity3D 上大量采用 IL2CPP 技术 以上就是大部分开发者熟悉的版本,下面是一些大家很少听过的版本 Rotor 也是 Shared Source CLI 版本,这是基于教育和学术的目的开放的版本

    1K30发布于 2021-05-27
  • 来自专栏咩嗒

    puerts偿还了xLua哪些技术债

    xLua的开发是在2015年初,那时苹果刚要求应用提交64位版本,unity刚为此做了il2cppil2cpp早期占用空间大,而同期iOS应用的允许的代码段却很小(ios7以前版本40M,ios7是60M),去掉引擎本身的占用应用捉襟见肘,那时作为一个第三方库体积是很关键的。

    1.7K30发布于 2021-11-10
领券