在Unity项目中,unity会按照脚本在项目中的位置生成四个预定义程序集(Assembly-CSharp-firstpass,Assembly-CSharp-Editor-firstpass,Assembly-CSharp,Assembly-CSharp-Editor),其编译顺序是按插件->
因为我们对“修改游戏逻辑”感兴趣,而不是去搞乱Unity游戏引擎本身,所以我们要“研究”的是用户的Unity"脚本"。方便的是,这些脚本通常被编译到一个叫做"Assembly-CSharp.dll"或"Assembly-CSharp-firstpass.dll"文件中。在我们正在研究的 198X 游戏中,可以在以下位置找到它们:Steam\SteamApps\common\198X\198X_Data...
其中的firstPass就表示先编译,Editor表示放在Editor文件夹下的脚本。 下面以C#脚本为例。如果工程中只有C#脚本,不考虑为VS和MonoDevelop各自生成工程的差异性,我们可以得到4个工程文件: Assembly-CSharp-firstpass-vs.csproj Assembly-CSharp-Editor-firstpass-vs.csproj Assembly-CSharp-vs.csproj Assembly-CSharp-Edito...
Assembly-CSharp-firstpass.csproj 对于这些项目中的每一个而言,创建的重复项目都会附加 -VS,例如 Assembly-CSharp-vs.csproj。如果 Visual Studio 是您的代码编辑器,就会使用这些项目,并且会将它们从 Unity 添加到您的导出项目中,用于在 Visual Studio 解决方案中调试特定平台。 其他项目服务于同一目的,但会使用 Un...
这样,这些不常改动的代码就会从 Assembly-CSharp 这个程序集移动到 Assembly-CSharp-firstpass 这个程序集里,这些代码只会在项目启动的时候编译一次,后续在业务开发的时候,没有改动到这些代码,也就不会编译这些代码,大大减少重复编译的时间。 优化编译时间效果比对(编译重载时间受缓存等环境影响,取的只是单次值,没有...
尽管可以通过动态分析改源码刷机或hook libc.so中的execve函数来绕过该保护方案,但本文主要讲解如何从内存中获取Assembly-CSharp.dll和Assembly-CSharp-firstpass.dll文件。绕过保护后,启动GameGuardian,在游戏Logo出现时附加到游戏上,并在登录页面通过内存搜索值的方式搜索PE文件Dos头的特征码。记录下第一...
Assembly-CSharp-Editor.csproj Assembly-CSharp-firstpass.csproj 对于这些项目中的每一个而言,创建的重复项目都会附加 -VS,例如 Assembly-CSharp-vs.csproj。如果 Visual Studio 是您的代码编辑器,就会使用这些项目,并且会将它们从 Unity 添加到您的导出项目中,用于在 Visual Studio 解决方案中调试特定平台。
<AssemblyName>Assembly-CSharp-firstpass</AssemblyName> <TargetFramework>netstandard2.1</TargetFramework> <BaseDirectory>.</BaseDirectory> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> <DebugType>full</Debug...
The command “”C:\\Export\UWP\Unity\Tools\SerializationWeaver\SerializationWeaver.exe” “C:\\Export\UWP\GeneratedProjects\UWP\Assembly-CSharp-firstpass\bin\x64\Debug\Unprocessed\Assembly-CSharp-firstpass.dll” “-pdb” “-verbose” “-unity-engine=C:\\Export\UWP\Lonely Shadows\Unprocessed\Unit...
在之前的开发环境准备章节中,我们下载了dnSpy,这是一个非常好用的反编译工具,我们查看游戏的逻辑可以使用这个工具。在Unity游戏中,默认情况下,游戏的逻辑都会被编译到XXXGame_Data/Managed/Assembly-CSharp.dll这个dll里面,当然偶尔也会有特殊情况,比如装机模拟器,他的逻辑编译到了Assembly-CSharp-firstpass.dll。