dll反编译 unity3d_unity3d dll反编译 - CSDN
精华内容
参与话题
  • 一、步骤实现 1、下载反编译工具,目前,我使用的是ILSpy,打开工具,得到如下界面 ... 3、单击 “打开” 按钮,选择Unity3d 安装目录下的dll文件,导入ILSpy中,... 到这,就可以完全实现unity3ddll文件的反编译

    一、步骤实现
    1、下载反编译工具,目前,我使用的是ILSpy,打开工具,得到如下界面

    2、点击File后得到如下界面
    这里写图片描述
    3、单击 “打开” 按钮,选择Unity3d 安装目录下的dll文件,导入ILSpy中,即可查看所有dll文件内容,截图如下
    这里写图片描述

    二、效果展示
    效果一
    这里写图片描述
    效果二
    这里写图片描述
    效果三
    这里写图片描述

    到这,就可以完全实现unity3d中dll文件的反编译。

    展开全文
  • Unity3D游戏框架之dll反编译和混淆

    千次阅读 2019-04-17 02:36:16
    借着这个契机,我有了重新整理框架的想法了,就是把框架编译成动态链接库dll,并且我把电脑系统还原了,所有的环境都将是最新的。 安装所有最新的环境 Visual Studio 2019正式版 Unity2018.3.10(现在不是最新...

    随着Visual Studio 2019正式版的发布,加上Unity2018.3.x版本的更新迭代,我又有了尝新的欲望了,哈哈哈!

    借着这个契机,我有了重新整理框架的想法了,就是把框架编译成动态链接库dll,并且我把电脑系统还原了,所有的环境都将是最新的。

     

    安装所有最新的环境

    • Visual Studio 2019正式版
    • Unity2018.3.10(现在不是最新的了)
    • JDK1.8.0
    • android-sdk-windows

     

    创建我的框架类库

    首先到官网下载最新版本的Visual Studio 2019,专业版和企业版的密钥网上自己搜。

    安装完成后,我选择类库模板创建我们的框架类库。

     

    然后引入UnityEngine.dll,UnityEngine.UI.dll,最后我把框架的代码都移植过来了。

     

    然后在类库的属性里选择目标框架为 .NET Framework 4.6,之前大家都是用3.5是因为Unity只支持3.5,现在Unity 2018.3的脚本运行时版本默认是4.x了。

     

    值得注意的是,在Unity2018.3.x打开C#脚本时,Visual Studio会弹出下面提示框,提示我们去下载.NET Framework 4.7.1版本的框架,我们选择第二个下载.NET Framework 4.7.1。

     

    选择.NET Framework 4.7.1的开发包下载。

     

    然后我遇到一个问题就是安装完之后再打开脚本还是提示我没有安装.NET Framework 4.7.1的框架,我搞了半天才知道怎么回事。原来这里下载的框架是电脑系统的.NET框架,然后Visual Studio也要有.NET Framework 4.7.1这个框架才可以,这是两个不同的环境,不要搞混了!

    接着我们在开始菜单中找到Visual Studio Installer,打开后点击修改按钮,进入到安装目录,切换到单个组件,勾上.NET Framework 4.7.1 SDK和.NET Framework 4.7.1 目标包,最后安装即可。所以我怀疑,Unity 2018.3.x是不是支持.NET Framework 4.7.1框架的动态链接库?我没试,你们可以试试看告诉我。

     

    这个步骤完成之后我们就可以编译了,然后把生成的dll复制Unity工程的Plugins文件夹里面。

     

    接着我尝试发布Unity安卓包,Scripting Runtime Version默认是.NET 4.x Equivalent,Api Compatibility Level设置为.NET 4.x。

    打包的时候出现了这个错误,原因是我在框架里面使用了UnityEditor.AssetDatabase.LoadAssetAtPath()函数,引入了UnityEditor.dll,注意!框架的dll不能引入UnityEditor.dll!后来我通过外部注入管理器的方式重写虚方法解决了这个问题,千万不要用宏来做,在Visual Studio里面定义的宏并不能像Unity那样动态识别,在编译成dll之前就已经是固定死了。

    最后成功发布到安卓包了,至于怎么写动态链接库和调用其实很简单,这里就不扯了。

     

    动态链接库反编译

    打开Visual Studio的管理拓展,在联机搜索ILSpy反编译工具并且安装,ILSpy是开源免费,至于.Net Reflector是收费,自己选择。

    安装完后,选择工具栏的ILSpy。

    然后打开框架的dll,可以直接反编译看到代码。

     

    动态链接库的混淆

    本来想用加密的方式来处理,但是需要在mono上做解密,有点麻烦,并且现在大多数都是用IL2CPP的方式打包了,所以我就直接用混淆的方式来处理dll好了。

    打开Visual Studio Installer,在工作负载上点击.NET桌面开发,勾上PreEmptive Protection - Dotfuscator之后安装。

    安装完成后打开工具栏的PreEmptive Protection - Dotfuscator。

     

    点击输入的加号按钮,添加我们的dll。

     

    然后点击重命名的排除,再点击添加类型,在名称上填写“+public”,表示所有public的变量和函数都不进行混淆,这样我们才可以通过外部去调用,注意,如果dll里的代码有用到Awake,Start,Update,OnDestory等Unity自带的函数,都必须改成public,否则这些函数将被混淆,导致不能自动调用。

     

    最后点击生成按钮,就会自动进行代码混淆。我们再打开ILSpy反编译工具查看刚才混淆过的dll,发现那些私有变量和函数的名字都重命名了,变得难以阅读。如果你想让你的dll变得更加难以反编译,可以购买pro版本,可以对dll的字符串加密,使其无法看到函数内部正确的逻辑,还可以进行控制流模糊处理,阻止反编译和增加反编译的复杂度。

     

    我们把自己的框架编译成混淆的dll,这样就不用担心自己的代码裸奔了,至少可以防止小白反编译,平时开发的时候用mono,编译速度快,发布正式版本的时候再用IL2CPP,代码执行效率高,还不容易反编译。最后,我们还可以再用360的加固软件加壳一下,但是对于逆向工程的大神来说,这都是小意思,各种反编译和脱壳防不胜防。

    展开全文
  • 因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码。这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全。

    因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码。这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全。


    首先我们新建一个工程,创建一个脚本,写一句很简单的代码:

    using UnityEngine;
    using System.Collections;
    
    public class crack1 : MonoBehaviour {
    
    	// Use this for initialization
    	void Start () {
    		Debug.Log("123");
    	}
    	
    	// Update is called once per frame
    	void Update () {
    	
    	}
    }
    

    代码逻辑就是输出一个字符串 "123" ,这次的目的就是修改掉 这个字符串,改成其它的。

    好了。先运行一下,让Unity把代码编译成DLL。



    很好,输出了代码中的字符串 123 。

    然后停掉游戏。我们来修改Unity 生成的DLL。


    Unity生成的DLL存储在

    \Library\ScriptAssemblies\Assembly-CSharp.dll

    打包之后存储在Data/Manager 文件夹。


    下面开始反编译&&破解&&重新编译


    反编译DLL

    在开始菜单找到Visual Studio,然后在子目录找到 开发人员命令提示 ,如下图:


    然后切换目录到 Unity 生成的 DLL 文件夹

    输入命令:

    cd C:\Users\Administrator\Documents\Crack\Library\ScriptAssemblies

    如下图:



    然后输入以下命令来反编译 DLL 为 il 文件:

    ildasm Assembly-CSharp.dll /output:Assembly-CSharp.il

    如下图:


    然后在我们的文件夹中可以看到生成的 il  文件和 res 文件


    OK,下面开始我们的破解步骤


    破解

    用文本编辑器打开生成的 il 文件 Assembly-CSharp.il

    内容如下:

    //  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
    
    
    
    
    // Metadata version: v2.0.50727
    .assembly extern UnityEngine
    {
      .ver 0:0:0:0
    }
    .assembly extern mscorlib
    {
      .publickeytoken = (7C EC 85 D7 BE A7 79 8E )                         // |.....y.
      .ver 2:0:5:0
    }
    .assembly 'Assembly-CSharp'
    {
      .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                                 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
      .hash algorithm 0x00008004
      .ver 0:0:0:0
    }
    .module 'Assembly-CSharp.dll'
    // MVID: {7D0848C2-160C-47E9-84F0-C61E5C59B615}
    .imagebase 0x00400000
    .file alignment 0x00000200
    .stackreserve 0x00100000
    .subsystem 0x0003       // WINDOWS_CUI
    .corflags 0x00000001    //  ILONLY
    // Image base: 0x00220000
    
    
    // =============== CLASS MEMBERS DECLARATION ===================
    
    .class public auto ansi beforefieldinit crack1
           extends [UnityEngine]UnityEngine.MonoBehaviour
    {
      .method public hidebysig specialname rtspecialname 
              instance void  .ctor() cil managed
      {
        // 代码大小       7 (0x7)
        .maxstack  8
        IL_0000:  ldarg.0
        IL_0001:  call       instance void [UnityEngine]UnityEngine.MonoBehaviour::.ctor()
        IL_0006:  ret
      } // end of method crack1::.ctor
    
      .method private hidebysig instance void 
              Start() cil managed
      {
        // 代码大小       11 (0xb)
        .maxstack  8
        IL_0000:  ldstr      "123"
        IL_0005:  call       void [UnityEngine]UnityEngine.Debug::Log(object)
        IL_000a:  ret
      } // end of method crack1::Start
    
      .method private hidebysig instance void 
              Update() cil managed
      {
        // 代码大小       1 (0x1)
        .maxstack  8
        IL_0000:  ret
      } // end of method crack1::Update
    
    } // end of class crack1
    
    
    // =============================================================
    
    // *********** 反汇编完成 ***********************
    // 警告: 创建了 Win32 资源文件 Assembly-CSharp.res
    

    如果代码很多而生成的这个 il 文件太大,可以直接搜索 类名 然后再到类里面查找 函数名

    我们看到 Start() 函数


    il 代码还是具有一定可读性,就算不写上注释大家也能把意思猜的一半,这段代码的 大意就是引用一个字符串,然后调用方法去输出。


    那么我们的目的就是修改 代码中指定的字符串 123 ,修改为其它的,这里就修改为 "you have been cracked!"。

    直接修改 。如下图


    重新编译为DLL

    保存下上面的修改,然后继续在 控制台中执行以下命令

    ilasm /dll /res:Assembly-CSharp.res Assembly-CSharp.il /out:Assembly-CSharp.dll

    编译DLL成功,会覆盖掉原来的 DLL。可以通过DLL的修改时间来判断。


    再次运行 游戏,查看输出的Log,发现已经被修改了。


    更多关于IL 指令的介绍:

    http://blog.csdn.net/huutu/article/details/46573435

    http://blog.csdn.net/huutu/article/details/46573417


    展开全文
  • 反编译Unity3D手机游戏

    2019-10-07 03:59:39
    现在大部分U3D手游都没有进行加密处理,要反编译其实很简单 APK是安卓的安装包,安卓是基于Linux的,Linux的安装包一般都是zip,所以我猜APK有可能其实就是zip之类的压缩格式,把后缀名改成zip后用压缩工具打开...

    【旧博客转移 - 2015年11月17日 10:08】

     

    现在大部分U3D手游都没有进行加密处理,要反编译其实很简单

    clipboard
    APK是安卓的安装包,安卓是基于Linux的,Linux的安装包一般都是zip,所以我猜APK有可能其实就是zip之类的压缩格式,把后缀名改成zip后用压缩工具打开
     

     

     
    一般用c#做unity脚本的,都会编译生成三个主要的dll
     
    1.Assembly-CSharp.dll
     
    Assembly-CSharp-Editor.dll
     
    Assembly-CSharp-firstpass.dll
     
    编译的顺序分别是
    firstpas s> CSharp>Editor
     
    这些dll一般存放在安装包中的 assets\bin\Data\Managed这个目录,直接去目录中找到dll,然后用c#反编译工具<NET.Reflector>试一下
     
     

     

     
    由于他们没混淆,直接就成功了。反编译出来的代码可读性还是很高的,可以学习下人家游戏的架构,跟一些核心技术
     
     
    反编译工具:Reflector、ILSpy这些都可以
     
    如果混淆了,可以用c#反混淆工具 de4dot
     

    转载于:https://www.cnblogs.com/lijiajia/p/6861292.html

    展开全文
  • 反编译Unity3D游戏--Android版

    千次阅读 2016-01-05 12:00:39
    1.Unity编译后最终会将代码编译在dll里面,无论是ios还是Android解开包以后都可以拿到dll,路径在Data/Managed/Assembly-CSharp.dll 2.IOS其实不用做代码混淆,应该是苹果帮我们做了,反编译以后只能看到变量名,...
  • Unity3d 反编译破解游戏 简单示例 使用ildasm反编译DLL修改然后重新编译DLL
  • Dll反编译查看工具

    2020-06-25 23:30:05
    Dll反编译工具 和另外的王者荣耀最新Dll一起 偷懒的可以直接用这个
  • 反编译unity3d发布apk

    千次阅读 2014-10-18 18:58:23
    郑重声明:本教程仅用于学习使用,从事任何商业用途非法行为与作者无关,请知晓! 本文目的:通过教会大家如何破解别人游戏的同时,也希望各位开发者能加强自身游戏的防破解能力! 1:到gitHub下载DisUnity v...
  • Unity3d-反编译C#和提取资源

    千次阅读 2015-01-30 09:51:08
    使用MonoDevelop查看代码  1.解压缩一个Ipa文件,找到如下目录 2.拖拽一个Assembly-CSharp.dll文件到MonoDevelop...其他C#反编译工具: .NET Reflector:http://www.red-gate.com/products/dotnet-development/r
  • Unity3d 各种反编译比较

    万次阅读 2017-02-17 18:21:14
    使用Reflector进行反编译 Reflector下载地址:http://www.liangchan.net/soft/softdown.asp?softid=6319 按照压缩包中的破解说明,即可破解 破解完成后,桌面上如果没有快捷图标,在开始菜单中搜索Reflector,...
  • 1.下载安装Reflector。...2.反编译存放源代码组件,下载组件Reflector.FileDisassembler.zip,解压后得到一些文件,其中 Reflector.FileDisassembler.dll是已经编译好的,其它是它源码。。。。 亲测可用
  • 我最近研究发现80%以上的Unity3D游戏都没有做代码混淆。而且我觉得反编译后的代码可阅读性更加好。今天把《锁链战记》的代码和资源都反编译出来了。 1.Unity编译后最终会将代码编译在dll里面,无论是ios还是...
  • 反编译unity3D游戏资源,源码

    千次阅读 2015-07-30 20:08:46
    首先解析游戏apk判断游戏引擎,然后解析图片资源,最后解析apk中C#源码
  • 如何防止Unity3D代码被反编译

    千次阅读 2018-11-28 15:22:34
    网易云易盾移动游戏安全技术专家陈士留在2018年Unity技术路演演讲内容中对这个问题有过比较详细的介绍,摘录如下:防止Unity3D代码被反编译其实就是常见的Unity手游风险中的破解风险。一、Unity面临的破解风险Unity...
  • 如果稍微关注过这方面知识的朋友,应该知道Unity3D做出来的项目是非常容易被反编译的,被反编译后你的所有资源和代码都将会毫无遮掩的呈现出来。由于.net本身没什么加密的措施,所以我们一般都是使用混淆代码的方式...
1 2 3 4 5 ... 20
收藏数 944
精华内容 377
关键字:

dll反编译 unity3d