热更新

编程入门 行业动态 更新时间:2024-10-28 04:22:17

热更新

热更新

我计划通过Hack代码的方法,修改libmono.so[注1],拦截unity3d加载asset的Assembly-CSharp.DLL[注2],注入保存在sd卡上的更新的DLL。从而实现代码热更新,无需第三方库,无需更改项目,把C#进行到底。
注1:mono运行时 注2:脚本程序集

先上主角! unity3d mono的源代码,这是取自unity3d官方的github库,亲自苦寻google的结果,有源代码就不用分析汇编了(弱项)。
地址:



下载(注意tag版本与开发用的unity3d版本要相同)直接下Zip包就行了,解包,运行脚本编译,需要perl运行库。

编译出了完全能跑的libmono.so,另外还编译出了mono.dll这个 Windows 平台的同等品。
那么开始着手修改源代码了。我猜测能够找到读取Assembly-CSharp.dll这个文件的函数。一旦找到,改变这个函数的流程,去读sd卡上新更新的Assembly-CSharp.dll,就能达到目的。
我运气不错,mono.dll居然能在windows中用vs.net单步调试。
经过跟踪和分析,找到关键函数:
=======================================================
Image* mono_image_open_from_data_full(char* data, ...)
char* data就是Assembly-CSharp.dll在内存中的影像,改变指针吧。(此刻你就是hacker)
=======================================================
unity3d 加载脚本的流程已经显而易见了:
读取assets\bin\Data\Managed\Assembly-CSharp.dll到缓冲,调用libmono.so中的这个函数。
各位看懂了吗,在这个时候,改变char*的指向,搞定。

更多推荐

热更新

本文发布于:2023-06-14 23:46:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/716202.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!