Unity - Apk包的代码与资源提取
最近在研究如何给Unity游戏进行加密,让别人不能轻易破解你的apk包,不过网上的加密方法都是有对应的破解方法~_~!!结果加密方法没找到好的,逆向工程倒会了不少。今天就来讲解如何提取一个没做任何保护的apk包中的资源和代码。
(1)打开apk包
首先,将你的apk包重命名为zip或者rar类型的文件,然后进行解压缩,如下:
重命名为
,然后进行解压缩,得到如下的目录内容:
各个部分的说明如下表:
| assets | Unity游戏里面的资源和代码 |
| lib | arm和x86需要的so文件 |
| META-INF | 信息包 |
| res | 存放icon等资源 |
| AndroidManifest.xml | 清单文件 |
| classes.dex | Android Dalvik字节码 |
| resources.arsc | 编译后的二进制资源文件 |
我们主要关注的是assets目录,里面有我们想要的资源和代码。
(2)提取代码
Unity把我们大部分的代码都放到了
这个dll文件中(当然还有其他代码放到了first-pass之类的代码,但不是主要的),我们可以在assets\bin\Data\Managed这个路径下找到所有需要的dll文件。要解析dll文件,我用到了
这个软件(自行百度下载),用该软件打开
得到以下这样的界面:

通过点击右键进行导出,选好导出目录,等待一会,就能得到以下的源代码:

我的测试项目就只写了一个Test.cs,可以看见上面已经成功导出了,打开一看:

我滴乖乖,完全和我写的一模一样,一点不变地导出来了。(由此可见代码混淆和加密的重要性了)
(3)提取资源
要提取资源,我们需要用到Unity Studio,可在下载地址他的Github上下载。
打开Unity Studio,点File/Load folder,选中assets\bin\Data该目录,然后就能得到如下界面:

其中Scene Hierarchy可以查看游戏里面场景的分布情况,而Asset List可以查看资源。
比如我的测试工程里面,只在空场景里放了一个汽车模型,可以从这个文件分析出我的场景结构如下:

而打开Asset List,可以找到我放进去的一张蓝色按钮贴图:

当然,除了贴图,像音频文件、xml文件、着色器等都能查看到,不过模型目测不能提取出来(这就要用disunity了)
总结:unity游戏太容易被分析出来了,如果项目十分重要,那代码混淆、加密等工作还是十分重要的。
Unity - Apk包的代码与资源提取的更多相关文章
- Unity3d项目入门之打Apk包
②结合Android Studio编译器打安卓包 在安卓官网下载AS,按照步骤正常安装编译器完毕,运行AS,点击右下图的图标打开SDK Manager, 选择下载安装相关的“SDK Platform” ...
- Flutter 发布APK时进行代码/资源混淆的坑
Flutter 发布APK时进行代码/资源混淆的坑 @author ixenos 1. 关键点 proguard是Java的代码混淆工具,但是当用第三方库的时候,必须要告诉proguard不要检查,因 ...
- UNITY 打APK是如何确定哪些资源有用哪些无用的
一切从build settings开始,它即是 构建列表,构建运行包当然从它开始. 1,只有在构建列表中的场景和场景引用资源才会被打进包里,其它资源除了2,3位置都不会被打包 2,streamming ...
- airtest前期准备(pocoSDK+unity打apk包+安装pocoui库)
只介绍unity的环境准备,cocos的可以参考官方文档 https://poco-chinese.readthedocs.io/zh_CN/latest/source/doc/integrat ...
- Android基础新手教程——1.10 反编译APK获代替码&资源
Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...
- Unity手游之路<十一>资源打包Assetbundle
http://blog.csdn.net/janeky/article/details/17652021 在手游的运营过程中,更新资源是比不可少的.资源管理第一步是资源打包.传统的打包可以将所有物件制 ...
- UE4 减少APK包的大小
本文依据官方文档 Reducing APK Package Size整理而来,不过我会陆续添加自己减少包大小的心得. ETC1 纹理 当使用ETC1打Android包时,注意ETC1是不会压缩带Alp ...
- Android Studio删除工程里面无用的代码和资源
如果你是一个经常开发android应用程序或者做android维护项目的人,我想说你对我谈论的这个话题,一定会感兴趣的. 因为只有做到了这两点,你的项目生成的apk包才会更小,而不是随着你的开发和维护 ...
- 使用混淆ProGuard压缩代码和资源/减少方法数量
ProGuard介绍 ProGuard是一个Java类文件压缩器,优化器,混淆器和预先文件验证器. 压缩步骤检测和删除未使用的类,字段,方法和属性. 优化步骤分析和优化方法的字节码. 混淆步骤使用短无 ...
随机推荐
- 在eclipse安装svn插件
1.在“帮助--安装新软件”中选中.我这个是中文版的,英文版的是“install new software”
- GruntJS学习(转)
GruntJS 是基于JavaScript的命令行构建工具,它可以帮助开发者们自动化重复性的工作.你可以把它看成是JavaScript下的Make或者Ant.它可以完成诸如精简.编译.单元测试.lin ...
- [转]DDD领域驱动设计基本理论知识总结
领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...
- NoSql数据库初探-mongoDB读操作
MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.B ...
- AC自动机专题
AC自动机简介:KMP是用于解决单模式串匹配问题, AC自动机用于解决多模式串匹配问题. 精华:设这个节点上的字母为C,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为C的节点.然后把当 ...
- EditText取消自动调用键盘事件(方法之一)
直接上代码,这只是其中一种方法: 重点在于是在该EditText的父空间中设置 <LinearLayout android:layout_width="match_parent&quo ...
- Rdeis 详解 小白
Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-v ...
- iOS中的单例
#import "Singleton.h" @implementation Singleton static Singleton *singleton = nil; + (Sing ...
- Windows安装程序 报错 “已安装了较新版本” 导致无法安装程序的解决方法
打开注册表 HKEY_CURRENT_USER\Software\Microsoft\Installer\Products ,“查找”程序名称 如果有程序名和安装程序相同的 ,删除整个 项 ! 然后就 ...
- 螺旋方阵(4x4)(java实现)
代码如下: public class N { public static void main(String[] args) { final int N=4; int a[][]=new int[N][ ...