首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六)
2014
05-06

Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六)


感谢今天某大神(既然是大神名子我当然要保密喽)告诉我Disunity更新了,不然我还不知道。以前很多人都说用Disunity提取出了Unity3D资源,但是我在Mac上从来没有成功过,一直在报错。https://github.com/ata4/disunity/releases 在这里可以看到Disunity3.0是19天以前更新的,新版本真的是太好用了,我不得不赞一下 嘿嘿。 不过记得要在MAC上装好jdk7

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 在这里可以下载mac os 的。

接着找一个Unity3d做的游戏,这里我在补充一下如何辨认某个游戏是用u3d做的。

1.在网上随便下载一个游戏.ipa,并且解压到本地。

2.找到xxx/xxx.app,右键显示包内容,打开Data文件夹。

3.如果发现文件夹中包含 unity default resources 文件,那么恭喜你这个游戏就是用unity3d做的。

Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 1

再看看这里几个比较重要的文件。

level0 / leve1 ….   图中0-5一共有6个文件,这表示这个游戏用了6个游戏场景。

sharedassets0/sharedassets1 …. 图中0-6一共有7个文件,它的数量永远比场景的数量多一个,可见它和场景有关联性,可以用工具把它解开看看。

Managed:这个文件夹下放的都是dll ,unity自己写的脚本编译成dll后就放在这里,还有其他第三方的dll也放在这里。

resources.assets:这个东西就比较重要了,他游戏里面所有放在resources文件夹下的东西都会放在这里,我们提取也主要在这里提取。

Raw:如果游戏在StreamingAssets文件夹下放东西,那么就会出现一个Raw文件夹。

PS:我个人觉得最好不要在StreamingAssets文件夹下放东西,因为ipa一解开就能看到里面放的啥东西了。如果真的要放,我觉得最好不要放.assetbundle 文件。 因为你需要用www.LoadFromCacheOrDown 这样第一次它会把StreamingAssets下的assetbundle 解压到本地的cache文件夹中,那么StreamingAssets文件夹又是一个只读的文件夹,也就是说你只能读取不能删除,结果就会造成容量过大  因为 解压后的文件 和没有解压的文件都保存在本地。。 所以assetbundle最好直接从服务器上下载,那么这样本地就不会多出来一个assetbundle。

回到正题,说说怎么提取资源。

https://github.com/ata4/disunity/releases 

先把DisUnity3.0版本下载到本地然后解压。 确保本地装了jdk7以后打开终端运行。

java -jar /Users/MOMO/Desktop/disunity_v0.3.0/disunity.jar  extract /Users/MOMO/Desktop/Data/resources.assets 

一个是disunity.jar的路径,另外一个是resources.assets的路径,根据你电脑的路径来配置就可以了。 嘿嘿嘿各种资源就呼呼呼的解开啦。。如下图所示,它会在resources.assets的同级目录自动创建一个resources的文件夹。

AudioClip:这里是解开的游戏全部声音文件,可以直接播放。

Mesh:这里解开的游戏全部模型文件,他的格式是.obj 你需要在3dmax或者maya中打开,然后转成FBX就可以在u3d里面看到了,嘿嘿。

Shader:这里解开游戏 全部用的shader文件,可以直接使用。

TextAsset:这里解开的是游戏中全部用的text文本文件,如果文本不加密,这里就全都会看到的 嘿嘿呵。

Texture2D:这里放的就是游戏中用到的所有图片,一般是由tga或者 ktx组成,tga可以直接在电脑上查看,但是.ktx需要借助工具来看。

Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 2

 

 嘿嘿,这里我把Hello Hero这个游戏的图集解开了。如下图所示,这是它用的一个UI图集。

Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 3

但是模型的贴图怎么解开呢?HelloHero的所有模型贴图都是.ktx格式的。

我们首先要下载一个神一样的工具,嘿嘿。

 

http://community.imgtec.com/developers/powervr/installers/

 下载 PowerVR Tools & SDK v3.3 – MacOS X Installer

下载以后需要安装,安装的时候有一个打开文件的类型,你可以勾选一下.ktx

安装完以后,运行文件的路径很深 

/Applications/Imagination/PowerVR/GraphicsSDK/PVRTexTool/GUI/OSX_x86

双击打开就可以。如下图所示,把ktx的图片拖进来就可以看到它的原图了。。

Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 4

打开.ktx的图以后,可以在把它导出成可以直接在电脑上预览的图片了。。嘿嘿嘿嘿,是不是很简单哈?

http://blog.csdn.net/delguoqing/article/details/22619711 另外这篇文章可以推荐大家看看

 

我在补充一下, 这两个工具都是跨平台的, windows linux mac都可以使用的。

我在补充一下,如果你解开的哪个游戏里面没有resources.assets 那么有可能它游戏里面 没有Resources这个文件夹。有可能它是通过assetbundle下载的。。

java -jar /Users/MOMO/Desktop/disunity_v0.3.0/disunity.jar  extract /Users/MOMO/Desktop/Data/*.assets

你可以执行,把所有的.assets都解开。因为有些东西他可以预制在场景里面,不需要通过Resources.Load。

你最好在反编译一下它的代码, 看看它的assetbundle的下载地址是多少。。 

 

 

感谢小伙伴的留言。。 大家试试下面的方法,把KTX批量转成PNG。。。
BlueEffie

终于实现了批量转换,要先把ktx转换成pvr,然后在转换成png
@echo off
path %path%;”D:\Program Files (x86)\TexturePacker\bin”
path %path%;”D:\Program Files (x86)\PVRTexTool\CLI\”

for /f “usebackq tokens=*” %%d in (dir /s /b *.ktx) do (
PVRTexToolCLI.exe -f PVRTC1_4_RGB -i “%%d” -o “%%~dpnd.pvr”
TexturePacker.exe –opt RGBA8888 –sheet “%%~dpnd.png” “%%~dpnd.pvr”
del %%~dpnd.pvr
)

 

6月13日补充。

#你好Unity3D#@露易娘 小伙伴说:游戏中二次下载的Assetbundle,用同步推类似的软件把Caches文件夹下的资源把文件从手机拷贝到电脑上后缀名改成.assets 然后用disUnity也可以解开它的资源? 我试了锁链战记没能成功,我现在网络不太行,还有谁这样解包成功的吗?或者帮我试试别的游戏?感谢!!

手动玩加载到游戏目录Library/UnityCache/Shared的文件是这样的,一个CAB-e9d01bf34cfb5469d8376ce93af95fb7,一个__info文件,__info文件内容-1 1402631011 1 CAB-e9d01bf34cfb5469d8376ce93af95fb7,那么CAB那个文件改成assets可以利用jar提取出素材以及文本

上面的内容是一个微博好友给我的留言,因为现在有些游戏是需要下载assetbundle来完成资源的加载。 我试了一下确实把后缀名改成.assets就可以解开资源, 但是不是所有游戏都可以。。

其实我觉得最好的办法,可以用越狱的手机 或者 root的手机 用嗅探器去分析一下它的协议, 因为游戏的assetbundle的下载地址可能就在进入游戏第一个协议里面。 有了下载地址就可以把资源下载下来,这样的方法应该会更好。。

 

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. [warning] FileCommand: Can’t process file ./yitumagic/Data/resources.assets, caused by java.io.EOFException at info.ata4.io.buffer.source.ReadableByteChannelSource.requestRead(ReadableByteChannelSource.java:114) at info.ata4.io.buffer.source.SeekableByteChannelSource.requestRead(SeekableByteChannelSource.java:150) at info.ata4.io.DataReader.readInt(DataReader.java:83) at info.ata4.unity.asset.AssetFile.loadMetadata(AssetFile.java:200) at info.ata4.unity.asset.AssetFile.load(AssetFile.java:136) at info.ata4.unity.asset.AssetFile.load(AssetFile.java:114) at info.ata4.disunity.cli.command.AssetFileCommand.handleFile(AssetFileCommand.java:53) at info.ata4.disunity.cli.command.FileCommand.processFile(FileCommand.java:35) at info.ata4.disunity.cli.command.MultiFileCommand.run(MultiFileCommand.java:54) at info.ata4.disunity.cli.DisUnityCli.run(DisUnityCli.java:117) at info.ata4.disunity.cli.DisUnityCli.main(DisUnityCli.java:131)报这个错,怎么回事呢 Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 1

  2. Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 1
    level0~5我是知道了是场景文件(所占空间也比较大)
    提取ipa图片方法,我写cocos2dx的时候也提取过
    但是因为我现在这个项目并无IPA,resource文件夹下毫无图片(人家项目,也不知道是不是有加密,主要是fbx,所以无素材图也正常)
    但是我想知道这些类似unicode的文件名是怎么回事(所占空间不规则,有些很大,想清除这些)
    有人知道这些文件是什么吗?急需,谢谢

  3. MOMO大神,我用diunity0.3.4版本解压游戏资源出现如下报错:
    [info] DisUnity v0.3.4
    [info] /Users/allen/Downloads/Vault/Payload/vault.app/Data/resources.assets
    [warning] FileCommand: Can’t process /Users/allen/Downloads/Vault/Payload/vault.app/Data/resources.assets, caused by info.ata4.unity.asset.AssetException: Unknown asset format 15
    at info.ata4.unity.asset.AssetFile.load(AssetFile.java:145)
    at info.ata4.unity.asset.AssetFile.load(AssetFile.java:105)
    at info.ata4.unity.asset.AssetFile.open(AssetFile.java:58)
    at info.ata4.unity.cli.cmd.AssetCommand.processAssetFile(AssetCommand.java:97)
    at info.ata4.unity.cli.cmd.AssetCommand.processFile(AssetCommand.java:90)
    at info.ata4.unity.cli.cmd.FileCommand.processPath(FileCommand.java:58)
    at info.ata4.unity.cli.cmd.FileCommand.run(FileCommand.java:76)
    at info.ata4.unity.cli.DisUnityCli.run(DisUnityCli.java:110)
    at info.ata4.unity.cli.DisUnityCli.main(DisUnityCli.java:123)

    请问这个要怎么解决呀[可怜]

  4. 亲。你好,我试着解开锁链战记的bdl文件时,其他图片,模型和声音等文件都可以正常解开,但animoation解开失败,提示[info] DisUnity v0.3.4[info] f:4l_breath_attack02_decode.bdl[info] Uncompressing asset bundle, this may take a while[info] f:4l_breath_attack02_decode.bdlCAB-cbe0ce2ca8d8545188f06e9f50ae4750[info] Standalone asset file detected, using structure from database[info] Loading struct database[warning] FieldTypeMap: Unprecise match for ClassID 142 (required: 4.5.1f31, available: 4.3.1f1)请问这个是说disunity的数据库不够新吗? 有什么办法解决呢?

  5. 大神能帮忙解释一下失败原因吗?[info] DisUnity v0.3.4[error] DisUnityCli: Fatal error, caused by java.nio.file.InvalidPathException:Illegal char <*> at index 15: FangDesktopa*.* at sun.nio.fs.WindowsPathParser.normalize(Unknown Source) at sun.nio.fs.WindowsPathParser.parse(Unknown Source) at sun.nio.fs.WindowsPathParser.parse(Unknown Source) at sun.nio.fs.WindowsPath.parse(Unknown Source) at sun.nio.fs.WindowsFileSystem.getPath(Unknown Source) at java.nio.file.Paths.get(Unknown Source) at info.ata4.unity.cli.converters.PathConverter.convert(PathConverter.java:24) at info.ata4.unity.cli.converters.PathConverter.convert(PathConverter.java:20) at com.beust.jcommander.JCommander.convertValue(JCommander.java:1284) at com.beust.jcommander.JCommander.parseValues(JCommander.java:759) at com.beust.jcommander.JCommander.parse(JCommander.java:281) at com.beust.jcommander.JCommander.parse(JCommander.java:264) at com.beust.jcommander.JCommander.parseValues(JCommander.java:783) at com.beust.jcommander.JCommander.parse(JCommander.java:281) at com.beust.jcommander.JCommander.parse(JCommander.java:264) at info.ata4.unity.cli.DisUnityCli.parse(DisUnityCli.java:81) at info.ata4.unity.cli.DisUnityCli.main(DisUnityCli.java:122)

  6. 大神想问下,我提取资源后,发现有xml 下载unity3d文件,我按路径下载了1.5M的unity3d文件,但提取出来后,发现是1.5M的txt文件,这个是什么来的,是不是用什么加密成txt文件

  7. cannot open file,as it does not exist at specified location has it been renamed,moved or deleted?either file is not a valid image or texture file,or is an unsupported format,if the file is a simple bitmap or texture file,you could try wrapping it as raw data?这个怎么破

  8. 老师你好,我按照您的方法一步一步试下来了,在最后cmd命令行下报出:Unrecognized option: -jar的错误~~不知道该怎么解决,求老是指点,谢谢~!~

  9. 按大神教的,已成功提取资源~ 这里谢谢大神~ 可是呢。。 提取出的shader都是u3d生成后的代码,很难读,而且直接加载这样的shader,部分会报没有subshader的情况,请问,这个有办法解决吗?或者有工具可以反解这个shader,将其还原为原来的样子?谢谢

  10. 求大神教学下,破解不出Mesh…..[warning] AssetExtractor: Can’t extract Object #38 (ClassID: 43, Class: Mesh), caused by java.lang.UnsupportedOperationException: Unity 4 format is supported only at info.ata4.unity.cli.extract.handler.MeshHandler.extract(MeshHandler.java:67) at info.ata4.unity.cli.extract.AssetExtractor.extract(AssetExtractor.java:167) at info.ata4.unity.cli.action.ExtractAction.processAsset(ExtractAction.java:53) at info.ata4.unity.cli.DisUnityProcessor.processAsset(DisUnityProcessor.java:234) at info.ata4.unity.cli.DisUnityProcessor.run(DisUnityProcessor.java:116) at info.ata4.unity.cli.DisUnityCli.main(DisUnityCli.java:51)这是要装unity4.0的版本才能破得出吗?

  11. 老师,我提取出来的tga怎么都是被拆分的,比如一个叫body.tga,提取出来被拆成了body_01.tga,body_02.tga…xxx 而且每个tga打开以后都特别小,感觉才一个像素就想看看人家的带透明通道的贴图咋处理的 Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 1

  12. 各位大神有遇到这种问题吗?只有模型提取不出来,求解[warning] AssetExtractor: Can’t extract Object #311 (ClassID: 43, Class: Mesh),caused by java.lang.Null Pointer Exception at info.ata4.unity.cli.extract.mesh.MeshData.read Vertex BufferMeshData.java:190) at info.ata4.unity.cli.extract.mesh.MeshData.(MeshData.java:66) at info.ata4.unity.cli.extract.mesh.MeshHandler.extract(MeshHandler.java:40) at info.ata4.unity.cli.extract.AssetExtractor.extract(AssetExtractor.java:168) at info.ata4.unity.cli.cmd.ExtractCmd.processAsset(ExtractCmd.java:43) at info.ata4.unity.cli.cmd.AssetCommand.processAssetFile(AssetCommand.java:100) at info.ata4.unity.cli.cmd.AssetCommand.processFile(AssetCommand.java:90) at info.ata4.unity.cli.cmd.FileCommand.processPath(FileCommand.java:58) at info.ata4.unity.cli.cmd.FileCommand.run(FileCommand.java:76) at info.ata4.unity.cli.DisUnityCli.run(DisUnityCli.java:110)

  13. java version “1.8.0” 但是还包这个错误java -jar /Users/MOMO/Desktop/disunity_v0.3.0/disunity.jar extract /Users/MOMO/Desktop/Data/resources.assets 输入命令行的时候 报这2个错Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.

  14. 我也遇到同样的问题了,不过报错是:[error] DisUnityCli: Fatal error, caused by java.lang.UnsupportedOperationException: Seeking not supported at info.ata4.io.IOBridge.getSeekable(IOBridge.java:68) at info.ata4.io.IOBridge.position(IOBridge.java:84)想问下,我的jdk版本是1.7.0_067-b01 ,你这个更新jdk,是指更新到那个版本

  15. 大神你好,我用你这个方法反编译Deemo的数据包,得到了一些素材图和音效文件,但是却没有封面图。Deemo是一个音乐打击游戏,每首歌都有一张封面图,我就是要这些封面图,但是捣弄好久了,没找到。

  16. 你好,请问动画文件可否破解的出来呢?我刚接触u3d按照你的教程破后有Mesh文件但是不清楚Animation文件在什么地方.望回复,谢谢!

  17. C:Windowssystem32>java -jar H:disunity_v0.3.1disunity.jar extract H:Dataresour.assets[info] DisUnity v0.3.1[info] Processing resour.assets[error] DisUnityProcessor: Can’t process H:Dataresour.assets, caused by java.io.IOException: Map failed at sun.nio.ch.FileChannelImpl.map(Unknown Source) at info.ata4.io.buffer.ByteBufferUtils.openReadOnly(ByteBufferUtils.java:156) at info.ata4.io.buffer.ByteBufferUtils.openReadOnly(ByteBufferUtils.java:170) at info.ata4.unity.asset.AssetFile.load(AssetFile.java:93) at info.ata4.unity.asset.AssetFile.open(AssetFile.java:58) at info.ata4.unity.cli.DisUnityProcessor.processAsset(DisUnityProcessor.java:239) at info.ata4.unity.cli.DisUnityProcessor.run(DisUnityProcessor.java:119) at info.ata4.unity.cli.DisUnityCli.run(DisUnityCli.java:119) at info.ata4.unity.cli.DisUnityCli.main(DisUnityCli.java:55)Caused by: java.lang.OutOfMemoryError: Map failed at sun.nio.ch.FileChannelImpl.map0(Native Method) … 9 more提取失败了,松大大求解

  18. 感谢楼主分享。我按照你说的方法,把锁链战记里的模型和贴图提出来了,但是disunity不能提取动作。我做了个实验,在unity3d中创建一个a.anim文件,然后disunity dump a.anim,得到:AnimationClip unsigned int m_ObjectHideFlags = 0 PPtr m_PrefabParentObject int m_FileID = 0 int m_PathID = 0 PPtr m_PrefabInternal。。。用disunity dump <锁链战记动作资源文件>,也能得到类似的输出。我猜,是不是可以想办法将这段文本反向生成.anim文件给Unity3D使用?(刚开始学习Unity3D,很多基本概念还不是很清晰,不知道问题描述清楚了没有= =)

  19. sharedassets0/sharedassets1 …. 图中0-6一共有7个文件,它的数量永远比场景的数量多一个,可见它和场景有关联性,可以用工具把它解开看看。 这个通过什么工具看啊! 这个文件到底是干什么的,存储了什么,完全不清楚啊!

  20. 请问一下,Texture2D解开以后,发现所有的ktx贴图都被上下颠倒且拉伸到2的指数像素了,要怎么把图片还原为原始尺寸(游戏中显示比例是正常的,所以应该可以找到调整的代码,但是我不懂代码……我只想扒拉几张图片做壁纸啊……)

  21. 请问一下,我解包文件后,怎样把编辑过的tga打包回去?然后就是我解包的时候有一个font的文件夹,里面是ttf文件,这个跟汉化有关系吗?

  22. @echo offpath %path%;”C:Program FilesCodeAndWebTexturePackerbin”path %path%;”C:ImaginationPowerVRGraphicsSDKPVRTexToolCLIWindows_x86_64″for /f “usebackq tokens=*” %%d in (dir /s/b *.ktx) do ( PVRTexToolCLI.exe -f PVRTC1_4_RGB -i “%%d” -o “%%~dpnd.pvr” TexturePacker.exe –opt RGBA8888 –sheet “%%~dpnd.png” “%%~dpnd.pvr” del “%%~dpnd.pvr”)话说这代码全角半角不分么= =||

  23. 这是提取本地的资源那么网络加载的资源怎么提取呢 我只发现library/unitycache/shared有很多文件

  24. java -jar /Users/MOMO/Desktop/disunity_v0.3.0/disunity.jar extract /Users/MOMO/Desktop/Data/resources.assets 输入命令行的时候 报这2个错Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.

    • mac-mini01s-Mac-mini:~ mac_mini01$ java -versionjava version “1.7.0_60″Java(TM) SE Runtime Environment (build 1.7.0_60-b19)Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)这个是java版本 Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 1 还是报错

  25. java -jar /Users/MOMO/Desktop/disunity_v0.3.0/disunity.jar extract /Users/MOMO/Desktop/Data/resources.assets 输入命令行的时候 报这2个错Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit. Unity3D研究院之mac上从.ipa中提取unity3D游戏资源(六十六) - 雨松MOMO程序研究院 - 1

  26. 贴图资源能解压出来,但是模型资源提示错误,assetExtractor Can’t extract Object unity 4 format is supported only 。这是为什么啊?怎么提取出模型呢

  27. 雨松大大好:windows下没问题,Mac下-jar/Users/Moon7/Desktop/disunity_v0.3.0/disunity.jarError: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit请问怎么回事啊?

  28. 支持雨松。 我安装了jdk8, 报错:[error] DisUnityCli: Fatal error, caused by java.nio.file.InvalidPathException, 纳闷。