当前位置: 代码网 > it编程>编程语言>Asp.net > Xcode编译libil2cpp.a静态库文件

Xcode编译libil2cpp.a静态库文件

2024年07月28日 Asp.net 我要评论
编译libil2cpp.a

global-metadata.dat文件加密

unity游戏包体逆向会用到global-metadata.dat,因此通过对它进行加密操作,然后在il2cpp代码中解密,从而完成app加密
这涉及到对il2cpp静态库的编译,分ios和android两种情况:

android
  • 直接修改il2cpp源码,unity打包
ios
  • 只能将il2cpp源码编译生成静态库libil2cpp.a文件,然后在xcode工程替换libil2cpp.a

xcode编译libil2cpp.a

  • 源码位置:/applications/unity/hub/editor/2019.4.28f1c1(your unity version)/unity.app/contents/il2cpp
    ###自己动手
    新建xcode static library工程,build setting修改:
  • search headers
  • other linker flags
  • 宏定义
神农尝百草

在unity 2019版本我摸索两天,一顿ai+google,竟然编译成功
然而,由于对c/c++和编译链接以及xcode使用知识的匮乏,甚至无法成功复现
最终我把整个工程给完整保存,以应对后续

参考链接:

换版本

然而,当切换到unity2021时,由于il2cpp代码结构的变化,导致原工程无法使用,仿照设置相关也不行
这次百般尝试有3天之久,仍然有很多诡异的问题,比如:
好端端的代码他不识别了

明明可以找到但就是无法include进来

甚至抱着电脑,找写c++比较多的同事协助,也是未果

虽然活不是很紧急,但是多一天搞不出来,心里多少有点负担,老是惦记

眼看又要到周末,总不能拖到下周吧?

编程生涯中的经常出现的“至暗时刻”——不知道咋办
####绝处逢生
保持耐心,继续求索

解决这种问题,ai能提供的帮助实在有限,只能靠前人在网上留下的蛛丝马迹

中英文同时搜索,换关键词,尽量精准…直到我在网页搜索结果看到:

点开看了内容:

直觉告诉我,有戏!

借力用力,为我所用

华佗(hybridclr)是一个unity c#热更方案,其原理涉及到修改il2cpp并重新编译

我可以从中找到我想要的那部分——仅编译il2cpp

既然自己生火做饭问题不断,不如直接把我的食材放到他的锅里,做好后我再取现成的

接下来:

  • 找到< v3.2.0的低版本
  • 找到编译il2cpp的模块
  • 借助ai研究一下他的build_libil2cpp.sh脚本和cmakefilelist,避免加料,确保编出来的是原汁原味的
  • 把我的il2cpp源码放到指定位置
  • 跑一下脚本,饭做好了很顺利,成功构建出苦求两天的libil2cpp.a文件
  • 放到xcode工程,额,报错:
undefined symbol: _systemnative_converterrorpaltoplatform
undefined symbol: il2cppcodegenwritebarrier(void**, void*)
undefined symbol: il2cppcodegenwritebarrierfortype(il2cpptype const*, void**, void*)
undefined symbol: il2cppcodegenwritebarrierforclass(il2cppclass*, void**, void*)
undefined symbol: il2cpp_codegen_get_generic_virtual_method_internal(methodinfo const*, methodinfo const*)
linker command failed with exit code 1 (use -v to see invocation)

又试了一下unity2022,还是报错:

undefined symbol: il2cppcodegenwritebarrier(void**, void*)
undefined symbol: il2cppcodegenwritebarrierfortype(il2cpptype const*, void**, void*)
undefined symbol: il2cppcodegenwritebarrierforclass(il2cppclass*, void**, void*)
undefined symbol: il2cpp_codegen_get_generic_virtual_method_internal(methodinfo const*, methodinfo const*)
linker command failed with exit code 1 (use -v to see invocation)

找源码瞅下,我发现不管有没有il2cpp_enable_write_barriers宏定义,这几个函数不是都有吗?

#if il2cpp_enable_write_barriers
void il2cppcodegenwritebarrier(void** targetaddress, void* object);
void il2cppcodegenwritebarrierfortype(const il2cpptype* type, void** targetaddress, void* object);
void il2cppcodegenwritebarrierforclass(il2cppclass* klass, void** targetaddress, void* object);
#else
inline void il2cppcodegenwritebarrier(void** targetaddress, void* object) {}
inline void il2cppcodegenwritebarrierfortype(const il2cpptype* type, void** targetaddress, void* object) {}
inline void il2cppcodegenwritebarrierforclass(il2cppclass* klass, void** targetaddress, void* object) {}
#endif
临门一脚

快下班了,还是没搞定,可能真的要拖到下周

但是感觉离成功不远了,再次发起场外求助

问下身边的大神,把我的报错以及报错相关的源代码给他看

一眼指出,加上il2cpp_enable_write_barriers这个宏试试

于是,成功了

看着app在我的手机上安装、启动、开屏、运行,此刻激动的心溢于言表

多巴胺迅速上头,一解几日来的“心头之患”

不抛弃,不放弃;苦心人天不负,百二秦关终属楚…

stop加戏,看下ai怎么解释的:

还学到了一个inline:

接着,换unity 2021,之前多出来的报错也不见了(不知为啥),同样成功

看来,我找到了能复现的编译libil2cpp.a静态库文件的方法,于是有了这篇,避免后人踩坑。

具体操作和源码请参考github工程,click me

(0)

相关文章:

  • C# 对dll文件的创建、反射、用dnspy软件直接查看与修改原码

    dll文件的创建、反射、用dnspy软件直接查看与编辑,使用C#的反射机制可以动态加载并调用dll文件中的类型和成员。可以使用Assembly类、Type类和MethodInfo类…

    2024年07月28日 编程语言
  • C#编程基础(万字详解,这一篇就够了)

    C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。C# 是由 Anders Hejlsberg 和他的团…

    2024年07月28日 编程语言
  • 使用C#自制一个Windows安装包的详细过程

    以前都在用installshield制作安装包,基本需求是能满足的,但也有一些缺点:1、界面不能完全定制2、不能直接调用代码里的功能平常使用一些其它软件,觉得安装界面挺炫的,类似下…

    2024年07月31日 编程语言
  • 八股文(C#篇)

    闭包是指有权访问另一个函数作用域中变量的函数(用lambda或匿名方法实现,可以捕获不属于其作用域的值)通过C#的拓展方法相关知识点进行添加闭包可能会捕获并持有外部作用域变量的引用…

    2024年07月28日 编程语言
  • C# BitConverter

    C# BitConverter

    返回的字符串中每个字节都被表示为一个两位的十六进制数,即使该字节的高四位都是零也会这样表示。在大端字节序中,最重要的字节(高位字节)存储在最低的内存地址处,而最... [阅读全文]
  • C# 与 Qt 的对比分析

    C# 与 Qt 的对比分析

    在软件开发领域,C# 和 Qt 是两种常用的技术栈,它们分别在.NET平台和跨平台桌面应用开发中占据重要位置。本文将深入探讨 C# 相对于 Qt 的一些优势,并... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com