动手
闲来无事拿款手游决定练练手;本次使用的环境是.Net Reflector & Reflexil。unity3d手游的运行顺序是libmono.so通过mono_image_open_from_data_with_name函数加载assets\bin\Data\Managed\Assembly-CSharp.dll,手游的逻辑代码和资源都是在Assembly-CSharp.dll。
本次不考虑Assembly-CSharp.dll的加密情况,有兴趣可以看参考资料(momo代码在加载Assembly-CSharp前先解密)。将Assembly-CSharp.dll直接拉入Reflector开始分析,反编译出来直接是C#代码。
根据自己修改的需求找相关的逻辑代码,确认好修改地方后点击”Tools”->”Reflexil” 打开Reflexil 准备修改。
Reflexil 显示的是IL中间语言类似Android 反编译后的smali代码。选中代码右键编辑
IL不懂怎么办?幸运的事Reflexil还提供了基于C#修改的方法:右键选中Replace all with code
调出C# 编辑窗口
代码修改之后,选中修改过的DLL,利用Reflexil 直接保存即可。需要注意,Reflexil修改过的代码不能直接在Reflector显示,需要保存后再打开才能显示修改过的代码。
本文仅作自己笔记,若侵删。