当前位置:首页 » 编程软件 » unity反编译cs文件

unity反编译cs文件

发布时间: 2022-12-21 15:10:28

‘壹’ 如何防止Unity3D代码被反编译

根本的解决办法是:先对DLL加密,然后在Unity的源码中加载程序DLL之前进行解密。

这就需要通过逆向工程获得相应的Unity源码或者是直接向Unity购买Source Code License。

‘贰’ 如何反编译unityengine

首先从 https://github.com/ata4/disunity/releases 下载 DisUnity v0.3.1
也可以直接用工具下载 https://github.com/ata4/disunity/releases/download/v0.3.1/disunity_v0.3.1.zip
解压到了D:\disunity_v0.3.1 这个路径 大家根据自己的需求来选择自己的路径吧

步骤二:确保安装了 java JDK 7
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
检测是否安装成功 在cmd输入 java -version 可以打印出版本号 说明应该没问题了。如果没有成功这里就不详细介绍了 问下度娘或者google一下(虽然最近google有些杯具了),请大家见谅。

步骤三:获取可以破解的源文件 首先我们需要Android的 .apk 或者 IOS的 .ipa 或者网页游戏的.unity3d 和 .boundle 文件
Android: 先看看 Android 的 apk 安装包吧,把下好的文件后缀名.apk 直接改成 .rar 解压到单独的文件夹 可以反编译的文件的路径就在:解压后的文件夹\assets\bin\Data
IOS: ios的 ipa的安装包 也是同样的原理 把.ipa 改成 .rar 然后解压到单独的文件夹 可以反编译的文件的路径就在: 解压后的文件夹\Payload\godoflight.app\Data (这里我用的是神之光举例子 所以是 godoflight.app)
网页: 这个我们重点讲一下

下面我讲一下如何提取unity3d做的网页游戏的资源

首先我们先要下载 火狐浏览器 http://www.firefox.com.cn/ 这是官方网站 请大家自行下载吧。

然后安装 FireBug 插件 上图了

然后搜索 Firebug 找到后点安装

安装成功后这里会有个虫子的图标

准备工作完成了,下面我们找一个unity3d开发的网页游戏 这里我们用 《冰火破坏神》 来举例,算是给完美做广告了 虽然他们一定会恨我的(坏笑)。

先登录游戏,然后打开firebug 如图 点 [网络] -> [全部] 如果目前网页中有unity的资源的话 就会在下面的列表里出现

‘叁’ 如何防止Unity3D代码被反编译

加密原理(无需Unity源码):
1. IDA Pro打开libmono.so, 修改mono_image_open_from_data_with_name为
mono_image_open_from_data_with_name_0,
2. 替换实现mono_image_open_from_data_with_name,
extern mono_image_open_from_data_with_name_0(...);
mono_image_open_from_data_with_name(...) {
MonoImage *img = mono_image_open_from_data_with_name_0(...);
//发现数据文件头不是DLL前缀则解密 img->raw_data, 相应修改img->raw_data_len
return img;
}
3. 重新打包libmono.so; 替换Unity3D中的android下的版本.
4. 另外写个加密的工具,植入构建环境(MonoDeveloper或VS,添加一个打包后Build Phase来加密DLL); (IOS下禁用JIT固采用AOT编译,DLL中没有逻辑代码,所以无需操心);

从AndroidManifest.xml中可以看出,腾讯的改造应该是修改并替换了入口的classes.dex,把以前的入口 UnityPlayerProxyActivity替换为com.tencent.tauth.AuthActivity. 然后去加载了自定义的几个so: libNativeRQD.so. 周全考虑,为了防止第三方委托libmono去做解密而做了防护措施. 具体实现我还没做深入分析, 应该也是老套路.

libmono.so中的mono_image_open_from_data_with_name也被替换成了mono_image_open_from_data_with_name_0.

解密(android):
方法一: ROOT android系统(最好是一部手机,别搞模拟器,慢死), 挂载LD_PRELOAD的API hook来实现.

方法二: 内存特征码提取,简单高效无敌; 机器能读,你就能读;

‘肆’ Unity打包好的游戏可以反编译得到源码和资源吗

在Unity3D中,代码会编译到Assembly-CSharp.dll。基于以上两点,代码的保护有以下两种:
第一种是对代码进行混淆,诸如混淆软件CodeGuard、CryptoObfuscator、de4dot
第二种是对Assembly-CSharp.dll进行加密后,重新对mono进行编译。
Virbox Protector直接进行加壳后,无需手动编译mono,能防止反编译。

‘伍’ unity3d反编译能提取场景资源吗

下面我会从头介绍一下提取的全过程:

步骤一:首先下载 DisUnity v0.3.1
我解压到了D:\disunity_v0.3.1 这个路径 大家根据自己的需求来选择自己的路径吧

步骤二:确保安装了 Java JDK 7
检测是否安装成功 在cmd输入 java -version 可以打印出版本号 说明应该没问题了。如果没有成功这里就不详细介绍了 问下度娘或者google一下(虽然最近google有些杯具了),请大家见谅。

步骤三:获取可以破解的源文件 首先我们需要Android的 .apk 或者 IOS的 .ipa 或者网页游戏的.unity3d 和 .boundle 文件
Android: 先看看 Android 的 apk 安装包吧,把下好的文件后缀名.apk 直接改成 .rar 解压到单独的文件夹 可以反编译的文件的路径就在:解压后的文件夹\assets\bin\Data
IOS: ios的 ipa的安装包 也是同样的原理 把.ipa 改成 .rar 然后解压到单独的文件夹 可以反编译的文件的路径就在: 解压后的文件夹\Payload\godoflight.app\Data (这里我用的是神之光举例子 所以是 godoflight.app)
网页: 这个我们重点讲一下

下面我讲一下如何提取unity3d做的网页游戏的资源

首先我们先要下载 火狐浏览器 请大家自行下载吧。

然后安装 FireBug 插件 上图了

然后搜索 Firebug 找到后点安装

安装成功后这里会有个虫子的图标

准备工作完成了,下面我们找一个unity3d开发的网页游戏 这里我们用 《冰火破坏神》 来举例,

先登录游戏,然后打开firebug 如图 点 [网络] -> [全部] 如果目前网页中有unity的资源的话 就会在下面的列表里出现

这里我先清理了一下因为里面有很多不是unity的资源文件 列表清空了之后 我点 【进入游戏】 就进入了一个加载界面列表里开始加载新的资源

有.boundle 和 .unity3d 的资源 这就是我们需要的 至于其他的资源 我也是刚刚才尝试出来的估计就这两种有用的文件吧 如果不是还请大家补充 大家共同研究哈。

这里已经加载了不少资源了 然后就是蛋疼的下载 因为一直没有很好的批量下载的方法 我目前还是一个一个的下载 如果大家有好的方法的话 希望可以分享一下 感激不尽。

复制链接 然后我用工具下载下来就可以了(我用的QQ旋风)。

到此需要做的准备基本完成下面我们开始反编译。

步骤四: 打开cmd 进入步骤一中的 D:\disunity_v0.3.1 文件夹中

下面是disunity_v0.3.1中的目录结构

然后我们可以用命令 disunity extract 需要反编译的文件的路径\*.* 就可以了
我的反编译文件放在了E:\Downloads\szgPJB(jb51.net)\assets\bin\Data 这个文件夹中 用 *.* 就可以把里面的文件全部反编译 当然无法识别的文件是没法反编出来的

从.ipa和.apk中解压出来的资源 貌似只有 .assets 文件可以反编译出来

从网页上下载的.boundle和.unity3d 文件也可以放到一个文件夹 用上面的方法 反编译出来。
当然 单个文件的话 把*.* 替换成想要反编译的文件就可以了

‘陆’ Unity打包好的游戏可以反编译得到源码和资源吗

可以,80%以上的Unity游戏都根本没做代码混淆和资源加密,简直都对不起反编译三个字。直接拿来用就可以。
工具的话,看代码用reflector。
资源就是打好包的assetbundle,直接用就好了

‘柒’ 如何在unity中使用protobuf工具生成cs类

首先下载protobuf的.net库地址:http://download.csdn.net/detail/musicseli/9260723

然后把ProtoGen整个文件拷贝出来,放到我们的unity开发目录下

把FULL文件夹下的unity .net库拷贝到Asset文件夹下 plugin文件中(如果没有就新建一个)

此时我的目录结构是这样的

在ProtoGen里面新建个文件夹protos用于存放我们的proto文件

在跟Asset同级目录下编写generator.bat脚本,这样子就可以自动帮你生成这些cs文件

[ruby] view plain
@echo off
set out_path=%cd%/Assets/Game/Script/protobuf (这一段可以自定义路径,用于存放生成的cs文件)
cd ProtoGen
rem 查找文件
for /R "%cd%" %%i in (*.proto) do echo %%~ni
for /R "%cd%" %%i in (*.proto) do protogen -i:%%i -o:%out_path%/%%~ni.cs
pause

‘捌’ 如何将已经打包好的unity游戏反编译为工程文件夹(不是提取资源,是直接反编译成能用的工程文件夹)

首先想通过此方法完全复刻一个游戏工程,这是不可能的 不要想了

对于反编译脚本的话
1、基于il2cpp编译的 目前来说虽然可以 但是对于新手还是有点困难的
2、基于mono编译的 可以把dll文件推到反编译软件比如ilspy即可

‘玖’ 在unity中怎么运行.cs文件

一.准备工作:

调试工具
1.visual studio 工具配置:Edit - Preferences - External Tools
2.c#项目文件说明:详细链接

新创建的unity项目并没有这些文件,当在unity编辑器中,打开cs文件时或者点击Assets-open c# project时,就会启动visual studio工具,会自动创建 sln(solusion 解决方案) 和csproj项目文件。
其中的firstpass表示先编译,Editor表示放在Editor文件夹下的脚本。

根据官方的解释,它们的编译顺序如下:
(1)Assembly-CSharp-filepass.csproj:所有在Standard Assets、Pro Standard Assets或者Plugins文件夹中的脚本;
(2)Assembly-CSharp-Editor-filepass.csproj:所有在Standard Assets/Editor、Pro Standard Assets/Editor或者Plugins/Editor文件夹中的脚本产生工程文件;
(3)Assembly-CSharp.csproj:所有在Assets/Editor外面的,并且不在(1),(2)中的脚本文件(一般这些脚本就是我们自己写的非编辑器扩展脚本)会产生工程文件;
(4)Assembly-CSharp-Editor-vs.csproj:所有在Assets/Editor中的脚本产生一个工程文件。
登录后复制
他们是分别对应项目中4个不同代码存放位置的C#工程,被编译成dll后位于主目录下的\Library\ScriptAssemblies\

Assets目录

1、Resources
存放资源,Resources的所有内容都会打包到发布版中,资源会被压缩,使用Resources.Load()进行加载。

2、Editor
存放编辑器的扩展脚本,可以写一些辅助工具。Editor下的资源不会被打包到发布包中。

3、Plugins
存放插件,比如spine,tween,Plugins/Android、Plugins/iOS

‘拾’ 如何防止Unity3D代码被反编译

加密原理(无需Unity源码):
1. IDA Pro打开libmono.so, 修改mono_image_open_from_data_with_name为
mono_image_open_from_data_with_name_0,
2. 替换实现mono_image_open_from_data_with_name,
extern mono_image_open_from_data_with_name_0(...);
mono_image_open_from_data_with_name(...) {
MonoImage *img = mono_image_open_from_data_with_name_0(...);
//发现数据文件头不是DLL前缀则解密 img->raw_data, 相应修改img->raw_data_len
return img;
}
3. 重新打包libmono.so; 替换Unity3D中的android下的版本.
4. 另外写个加密的工具,植入构建环境(MonoDeveloper或VS,添加一个打包后Build Phase来加密DLL); (IOS下禁用JIT固采用AOT编译,DLL中没有逻辑代码,所以无需操心);
从AndroidManifest.xml中可以看出,腾讯的改造应该是修改并替换了入口的classes.dex,把以前的入口 UnityPlayerProxyActivity替换为com.tencent.tauth.AuthActivity. 然后去加载了自定义的几个so: libNativeRQD.so. 周全考虑,为了防止第三方委托libmono去做解密而做了防护措施. 具体实现我还没做深入分析, 应该也是老套路.
libmono.so中的mono_image_open_from_data_with_name也被替换成了mono_image_open_from_data_with_name_0.
解密(android):
方法一: ROOT android系统(最好是一部手机,别搞模拟器,慢死), 挂载LD_PRELOAD的API hook来实现.
方法二: 内存特征码提取,简单高效无敌; 机器能读,你就能读;

热点内容
海量数据的存储管理 发布:2025-07-15 17:16:51 浏览:658
安卓手机哪个版本适合玩游戏 发布:2025-07-15 17:12:31 浏览:57
安装flexlinux 发布:2025-07-15 16:35:47 浏览:372
网站模板php 发布:2025-07-15 16:22:47 浏览:248
编译简谱 发布:2025-07-15 16:16:37 浏览:813
编程口是什么 发布:2025-07-15 16:11:28 浏览:497
微博如何从账号和密码登录 发布:2025-07-15 15:59:02 浏览:123
解说电影需要哪些硬件配置 发布:2025-07-15 15:56:59 浏览:380
ftp快捷键搜索文件 发布:2025-07-15 15:51:44 浏览:459
苹果账号密码忘了怎么注销 发布:2025-07-15 15:30:50 浏览:200