因为这几天碰到一个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 反编译破解游戏 简单示例 使用ildasm反编译DLL修改然后重新编译DLL相关推荐

  1. NET程序集反编译/破解

    NET程序集反编译/破解 作者: Tomex Ou .NET程序在执行时,会先编译成中介语言IL,再转成Native执行,因此中间IL阶段就很容易被反编译,甚至修改后达到程序破解目的.您可以参考文献# ...

  2. 《旅行青蛙》反编译/破解过程

    Copyright@M4x, 小学生 from 10.0.0.55 原文地址: 这篇博客是应学姐之邀给学弟学妹写的扫盲教程,较为基础 前言 破解旅行青蛙的初衷很简单,女朋友想养青蛙,三叶草长得太慢,作 ...

  3. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

  4. 安卓反编译就这么简单

    学习Android开发的过程中,你会向别人学习应用软件是如何开发出来的,那些漂亮的动画和复杂的布局可能让你爱不释手,作为开发者,你可能真的想知道的是如何实现这样的界面效果.现在,您可以通过安卓修改大师 ...

  5. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  6. 软件破解简单示例演示

    通过破解一个简单的密码验证程序来让大家更加通俗易懂的理解破解的原理,以及熟悉对多个工具的使用,我这儿使用的是 吾爱破解的一个工具库,我这儿的环境 win10+vs2010,程序为release.好了, ...

  7. 【破解利器】反汇编工具 and 反编译(Decompilers)

    今天给大家放上 破解利器 之 反汇编工具 and 反编译(Decompilers) 篇 反汇编工具 IDA Pro IDA Pro是DataRescue开发的专业反汇编工具, IDA Pro是一款专业 ...

  8. Android中怎么破解游戏之修改金币数

    我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...

  9. Andriod应用破解越发简单

    Andriod应用破解越发简单  梆梆网CTO 陈彪  梆梆网CTO陈彪介绍了Android平台上比较常见的游戏破解技术,包括逆向工程.调试技术.存档破解等,随之产生了相应的保护技术,如代码混淆.JN ...

最新文章

  1. 【C语言】三种不同方法实现简易整型计算器 (三个方法递增优化)
  2. 剑指offer 平衡二叉树
  3. Linux awk+uniq+sort 统计文件中某字符串出现次数并排序
  4. 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件
  5. Java基础03 构造器与方法重载
  6. css学习笔记(三)——布局模型
  7. jpg , png 图片转SVG格式(资源篇)
  8. Linux学习-X Server 配置文件解析与设定
  9. 让系统自动登录的方法
  10. 论文查重 降重复度?
  11. 百度磁盘搜索和git、ssh的试用
  12. FME实现CAD文件复杂注记
  13. 可载客,可远程驾驶,广州的智能网联道路测试可能出乎你的意料
  14. p0f - 被动探测操作系统工具
  15. 易语言 计算机取用户名,易语言GetUserNameA获取系统当前用户名
  16. excel群发邮件 支持html,怎么给excel表格中的邮箱群发邮件
  17. 嵌入式主板在数控机床领域的应用
  18. MMA格斗包含UFC与ONE
  19. 怎么才能把windows里的文件复制到虚拟机的linux中去
  20. 浙大计算机科学与技术专业分数线,浙江大学数学系分数线

热门文章

  1. oppo手机如何找android,OPPO手机相册中的图片不见了怎么找回?
  2. 机器视觉之图像基础知识,让计算机去理解获取数字图像与视频中的信息
  3. conda executable path is empty
  4. java基础学习IO流之字节流 十一 -4
  5. ESA Sentinel-2 视角下的 US Aircraft Carrier
  6. 线上教育相较于传统线下教育的优点
  7. (易懂)负数的二进制表示方法
  8. app与手机网站的四点区别
  9. 如何转载别人的文章(请标明出处)
  10. 【Python Onramp】 0. 卷首语:项目导向,或Learn by doing