UnityAPK反编译基础修改,C#反编译
前言
几年前做了一个项目是VR单机的,无需联网。最近接到需求,需要修改其中的版本号,版本号当时写到UI界面上了,没做版本管理。
再加上之前管理比较混乱导致最终版本的源码丢了,现在手头的工程里跟最终版本有点出入。
那么现在手里就一个apk安装包,如何修改其中的版本号?
想到之前有用到反编译的方式去查看源码,那时没总结流程,借此次机会总结下,防止后面遗忘。
方法
整套流程一共分三步:
- apk拆包
- 反编译DLL
- 封包签名
开始上手
apk拆包
什么是APK?
APK是Android Package的缩写,它是Android操作系统使用的一种应用程序包文件格式。APK文件相当于Windows中的.exe文件或Mac OS中的.app文件,它包含了运行Android应用程序所需的所有代码、资源、资产、库等。
找到apk。
将文件后缀apk
修改为zip
,此时可以看到apk包变成了压缩文件。
使用解压软件解压。可以看到内部文件结构。
APK文件本质上是一个压缩包,它使用了ZIP文件格式来打包Android应用程序的资源和代码。APK文件的结构类似于一个标准的ZIP文件,包含了一个清单文件(manifest)、应用程序代码(.dex文件)、资源文件(如图像、声音和布局)、以及其他必要的库文件。
每个目录的作用:
- assets:这个文件夹用来存放程序的所有资源文件,比如图像、音频、视频等。这些资源在应用程序中被引用,并且在运行时由应用程序访问。
- lib:这个文件夹存放应用程序所需的所有本地库(.so文件)。这些库通常是用C或C++编写的,用于提供应用程序的某些功能,比如图形渲染、物理引擎等。
- META-INF:这个文件夹用于存放一些元数据文件,比如证书和签名信息。这些文件对于验证应用程序的身份和完整性至关重要。
-
MANIFEST.MF
:一个清单文件,包含了APK的元数据,应用程序的版本号、签名证书等。
- res:这个文件夹存放应用程序的所有资源文件,这些资源是应用程序的用户界面构建的一部分。这些资源包括XML布局文件、图像、字符串和其他界面元素。
- AndroidManifest.xml:这是一个XML格式的文件,包含了应用程序的所有必需信息,如应用程序的包名、所需权限、定义的活动(Activities)、服务(Services)、广播接收器(BroadcastReceivers)和内容提供者(ContentProviders)。
- classes.dex:这个文件包含了应用程序的字节码。在Android中,Java源代码被编译成
.class
文件,然后这些.class
文件被转换成.dex
格式,最终打包成classes.dex
文件。这个文件是应用程序运行时执行的代码。
- resources.arsc:这是一个编译后的资源文件,包含了应用程序的所有字符串资源、尺寸定义、样式和其他资源定义。这个文件是由Android资源编译器从
res
文件夹中的原始资源文件生成的。
进入assets\bin\Data\Managed
,找到Assembly-CSharp.dll
,将Assembly-CSharp.dll
单独拷贝一份留作备份。
Assembly-CSharp.dll 是Unity在编译项目时默认生成的一个程序集,它包含了项目中所有的C#脚本。程序集是代码编译后的一个逻辑单元,它把相关的代码和类型组合在一起,生成PE文件(例如可执行文件.exe和类库文件.dll)在Unity中,如果没有进行自定义操作,所有在Assets文件夹中编写的脚本在编译时都会默认编译到Assembly-CSharp.dll中
接下来我们就要对这个Assembly-CSharp.dll
进行反编译。
反编译DLL
反编译C#、.Net的工具有很多,比如.Net Reflector
、dnSpy
、JetBrains dotPeek
这里我使用dnSpy
Dnspy地址:
https://github.com/dnSpy/dnSpy
仓库界面下载最后的Releases版本。
这里只有window平台的,选择64位的进行下载。
解压后双击dnSpy.exe
进入软件后将Assembly-CSharp.dll
文件拖拽进去。
可以看到DLL已经被导入,并且可以看到一些信息。
找到需要修改的脚本,因为我有旧的工程,很方便的就能知道修改哪个脚本。
需要修改的地方在Awake函数中。
右键编辑类(或者编辑方法也可以)
修改内容
最后点击编译。
到这里还没结束,需要将修改过的DLL进行保存,点击这个按钮。
确认路径,这里我直接保存到原来的Assembly-CSharp.dll
路径中。
可以看到时间是最新的。
反编译的操作就已经执行好了,下面进行打包和签名。
打包签名
修改好DLL后就可以将这个包还原成apk格式的了。
将文件夹打包成zip
压缩包
修改zip
为apk
格式
到这一步为止并没有完全成功,如果此时安装该程序,会提示
这是因为上面修改过程中破坏了原有的签名信息。APK文件的签名是Android系统用来验证应用来源和完整性的一种安全机制。当我们解压、修改并重新打包APK时,原有的签名会丢失,导致系统无法验证其安全性,因此会拒绝安装。
所以我们需要重新对修改后的apk进行签名。
这里用到Lucky Patcher
(幸运修改器)
Lucky Patcher 是一个为 Android 设备设计的第三方工具,它能够进行多种操作,包括但不限于去除广告、修改应用权限、备份和恢复应用、绕过高级应用的许可证验证等。
通俗点来说这个工具可以去广告,解锁一些简单的内购、重签名等服务。
下载地址:
https://github.com/AndroidAppz/LuckyPatcher/releases/tag/6.5.9
📢注意,需要ROOT权限。如果没有ROOT权限,那么使用模拟器进行操作。
将apk导入到Lucky Patcher
,选择重建
选择测试证书重签名
选择移除完整性检查和签名验证
,然后点击Re-sign
等待打包完成。
重签名成功,找到这个apk安装即可。
需要注意的
到这里,完成了一个基础的反编译apk,并且修改打包的流程,当然这套流程有很多条件。
- 只针对unity打包的apk进行反编译,如果是原生apk或者其他框架打包出来的另说。
- 只针对未加密、加壳的apk进行操作,如果是加密了,那反编译后有可能是乱码,甚至找不到DLL。
最后,本篇所用到的工具获取可以关注公众号,回复关键词:unity反编译
本篇仅供学习,请勿用于非法用途。
原文地址:https://blog.csdn.net/weixin_43935971/article/details/142992979
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!