首页 > 编程知识 正文

il2cpp是什么,il2作用机制

时间:2023-05-05 07:35:21 阅读:228091 作者:1340

一、IL2CPP的原理(生成)机制:

Runtime库:

il2cpp相关的工具库在unity安装目录下:

D:Program FilesUnityEditorDatail2cpp

对于一个工程通过配置生成选项生成的CPP文件的临时目录是:

E:Work2019Q2UnityHotfixCalcTempStagingAreaIl2Cppil2cppOutput

接下来简单的看一下对于部分的运算所产生的前后对比文件:

1.1逻辑运算的处理:

对应的IL代码

产生的cpp文件:

1.2非逻辑运算的处理:

1.3 字符串的声明:

借鉴网上的一段说明:

字符串的定义

所有的函数都不是成员函数。也就是说函数的第一个参数永远都是“this”指针。对于托管代码中的静态函数而言,IL2CPP会传递NULL作为第一个参数的值。这么做的好处是可以让il2cpp.exe转换代码的逻辑更加简单并且让代理函数的处理变得更加容易。所有的函数还有一个额外的MethodInfo*参数用来描述函数的元信息。这些元信息是虚函数调用的关键。Mono使用和特定平台相关的方法来传递这些元信息。而IL2CPP出于可移植方面的考虑,并没有使用这些和平台相关的特定代码。所有的函数都被声明成了extern “C”,这样一来,在需要的时候我们就可以骗过C++编译器让其认为所有这些函数都是一个类型。

1.4 :il2cpp的框架结构:

二、IL2CPP的加载过程:

2.1对于metadata.data的解析以及读取:

根据这个函数获得所有的字符串信息;

2.2通过函数指针跟符号之间

接着看方法与这些字符串之间是怎么建立的联系:

SetupMethods方法结构的定义:

建立方法与metadate符号之间的联系,以及具体的GetMethodPointer结构:

三、IL2CPP的安全:

      虽然经过il2cpp以后,il转为cpp,从性能、平台的通用性等有了进一步的提高,但是通过上面的分析可以知道,会把所有相关的符号写到一个global-metadata.dat文件中,并且运行的时候通过解析这个符号文件与对应的函数文件指针绑定,这个时候就完成了函数的调用;同样从另一个角度来讲,这样就暴漏出来了安全问题,可以通过解析对应的global-metadata.dat文件找到对应的函数指针,对一些关键逻辑函数进行篡改,这样就完成了破解和对于逻辑的修改。

对于攻击者来说有时候不仅仅是进行篡改,其实还想得到友商的一些逻辑写法,因此这个时候对于so中的代码保护也显得非常的重要。

因此从安全的角度需要对这个.data文件以及so文件进行保护;

四、IL2CPP的保护:

4.1对“global-metadata.dat”进行整体的加密

对LoadMetadataFile函数进行hook,在加载解析前进行解密;

安全性:一般

4.2对于il2cpp文件的保护:

黑盒:so加壳

白盒:混淆、虚拟

4.3进阶保护:

global-metadata.dat细粒度的处理:对于global-metadata.dat进行加密,然后外层包装一层代码,在hook的时候读取出来。

so进行虚拟化保护(代码保护)

五、参考:

一、对于IL2CPP游戏的破解:

https://www.nevermoe.com/2016/09/08/%e8%bf%98%e5%8e%9f%e4%bd%bf%e7%94%a8il2cpp%e7%9a%84symbol%ef%bc%88%e4%ba%8c%ef%bc%89/

HTML div三边怎么加边框win7中qq截图快捷键是什么

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。