Mono加密DLL也没用,借助IDA dump内存 直接提取解密后的DLL,反编译破解Unity游戏

之前有介绍过通过重新编译Mono 来加密DLL的方式,来避免Unity 游戏被反编译修改破解,然而这种方式只能防住一些小白玩家,稍微有技术的玩家分分钟就破解了,下面也介绍下一个Unity游戏是如何被破解的。

首先,对于没有重编Mono 进行加密的,直接找到DLL,反编译修改代码就搞定,详细请参照我之前写的文章

Unity3d 反编译破解游戏 简单示例 (使用ildasm反编译DLL修改然后重新编译DLL)

然后对于重编Mono进行加密过的,可以借助IDA来破解,如下:

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

1、首先去下载个IDA。

我这里以Win系统的游戏为例。

加密过的DLL拖到 .net reflector 中是无法反编译的

下面开始借助IDA进行破解

打开IDA,载入游戏

选择EXE文件载入

然后点击OK,开始载入游戏

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

稍等几分钟之后,IDA就对游戏反编译完成了,会自动断点到 Main 函数。

用 F9 往下走,会弹出 Exception ,不用管,点确定 。

这时候在 Modules 中就出现了 Mono.dll ,我们的目标就是在 Mono.dll 中获取解密后的DLL的数据。

双击 mono.dll ,就会列出 mono.dll 中的函数,ctrl+f 搜索 image

找到之前文章提到过的加密函数 mono_image_open_from_data_with_name

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

选中函数,按 F5进行反编译这个函数

左边是反编译出来的代码。

用反编译出来的代码与Mono源代码进行对比,找到最终传递解密数据的代码,找到DLL数据以及DLL数据长度的变量V10 V11.

在左边双击 v10 进入v10 的定义,得到 var_8

同样,得到v11 == arg_4转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

回到函数列表,右键 mono_image_open_from_data_with_name 函数,添加断点

添加断点后,坐标会有红色标记

好,一直F9往下走,中间会有各种 Exception,全部Yes ,一直往下走,直到走到了设置的断点处。

到了断点处之后,在左边往下翻,找到arg_4 和 var_8 连续出现的代码段落。

F2下断点,然后F9 运行到断点处。转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

寄存器 ECX 中存储了 DLL数据长度值!!!

然后 继续往下走。

EAX中存储了 DLL数据地址!!!!!

Shift+F2 调出脚本编辑器,输入脚本

auto fp, dexAddress;
fp = fopen("C:\\ass1.dll", "wb");
for ( dexAddress=0x0AF60020;dexAddress < 0x0AF60020+0x0027B400;dexAddress++ )
fputc(Byte(dexAddress), fp); 

点击Run 执行脚本,Dump出DLL的数据

这样就导出了解密后的DLL,剩下的就是反编译DLL为IL代码、修改IL代码、重新编译IL为DLL、重新打包APK等步骤了。

时间: 2024-10-19 10:55:33

Mono加密DLL也没用,借助IDA dump内存 直接提取解密后的DLL,反编译破解Unity游戏的相关文章

Unity3d 反编译破解游戏 简单示例 (使用ildasm反编译DLL修改然后重新编译DLL)

因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码.这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全. 首先我们新建一个工程,创建一个脚本,写一句很简单的代码: using UnityEngine; using System.Collections; public class crack1 : MonoBehaviour { // Use this for initialization void Start () { Debug

IDA dump 内存 idc 脚本

auto i,fp; fp = fopen("d:\\dump.dex","wb"); for(i=0x46B6D000;i<0x46B6f000;i++) fputc(Byte(i),fp);

内存是手游的硬伤——Unity游戏Mono内存管理与泄漏

WeTest导读 内存是游戏的硬伤,如果没有做好内存的管理问题,游戏极有可能会出现卡顿,闪退等影响用户体验的现象.本文介绍了在腾讯游戏在Unity游戏开发过程中常见的Mono内存管理问题,并介绍了一系列解决的策略和方法. 内存是手游的硬伤 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重.然而,90%以上的项目都存在不同程度的内存使用问题.就目前基于Unity引擎开发的移动游戏和移动VR游戏而言,内存的开销无外乎以下三大部分: 1.资源内存占用: 2.引擎模块自身内存占用: 3.托管堆内

Android Apk的反编译和加密

这几天在上海出差,忙里偷闲学习了一下Apk的反编译工具的基本使用.下面就简单介绍一下如何将我们从网上下载的Apk文件进行反编译得到我们想要获得的资源文件和源码. 一.Apk文件组成 Android的应用程序APK文件说到底也是一个压缩文件,那么可以通过解压缩得打里面的文件内容,不过很显然,当你去解压完去查看的时候,发现里面的很多东西和你想象中的不太一样.资源文件等xml文件基本打不开,即使打开了也都是乱码(而这正是Android进行加密过),有些应用会将图片资源等的也加密(如qq音乐). 而既然

教你如何反编译app,拿到加密方式

大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个 准备好反编译设备 1.一套越狱的ios手机 我的设备是iphone6 ios8.3 已越狱 2.一个mac系统 可以是vmware上的mac 黑苹果 或者直接用自己的mac电脑 我为了方便就用了黑苹果(如何搞黑苹果可以看我之前发表的博客) 给大家看下我的环境吧: 准备反编译环境 1. 越狱手机上 1.1 Cydia上面安装 OpenSSH 安装成功

[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护) 标签: .net加密产品c#dll工具 2011-03-24 21:06 27009人阅读 评论(13) 收藏 举报 分类: C#/.NET(4)  Decompile(6) 说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文章,如混淆.加密和强名称等,出于保护原作者的角度,所

使用Dotfuscator加密混淆程序以及如何脱壳反编译

混淆演示 首先介绍如何使用Dotfuscator对.net程序加密码混淆/加壳 C#或vb.net编写的应用程序或DLL. 这里随便创建了一个C#的命令行控制台程序.程序很简单,对当前的时间进行了AES的加解密并输出. 接下来使用Dotfuscator对程序进行混淆. 一,运行dotfuscator.exe 二,添加ConsoleApplication1.exe 三,对混淆选项进行一些配置 四,开始混淆. 五,查看混淆结果. 这里使用ILSPY工具,打开混淆后的程序.如图: 可以发现,代码被混淆

如何保护.net中的dll文件(防破解、反编译)

.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行.中间语言很容易被反编译,所以研究下如何有效的保护dll文件. 我大致的方法为 :强签名+混淆+加密. 强签名 强命名程序集,可以确保你的程序集唯一,而不被篡改.冒用等:即使相同名字的程序集如果签名也会不同. 强签名很简单,本站另一文章已经详细进行了讲解,请参考:http://www.cn-web.com/shtml/article/net/fxsj/2009/

几种工具反编译被编译好的DLL文件

我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果:本文将通过一个实例来演示如果完成一个简单的修改;我们将会用到以下几种工具: 1:反编译工具ILSpy.exe:是个很不错的反编译软件,而且是免费了: 2:微软的工具ildasm.exe:这个是把DLL生成IL文件的一个软件,是微软自带了:可以在C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin找到该软件: