Add some simple judgment

This commit is contained in:
Perfare 2017-06-22 05:29:51 +08:00
parent fe6b7760b0
commit 65a13e97c4
4 changed files with 238 additions and 201 deletions

View File

@ -13,6 +13,7 @@ namespace Unity_Studio
public string filePath; public string filePath;
public string fileName; public string fileName;
public int fileGen; public int fileGen;
public bool valid;
public string m_Version = "2.5.0f5"; public string m_Version = "2.5.0f5";
public int[] version = new int[4] { 0, 0, 0, 0 }; public int[] version = new int[4] { 0, 0, 0, 0 };
public string[] buildType; public string[] buildType;
@ -149,12 +150,11 @@ namespace Unity_Studio
public AssetsFile(string fullName, EndianStream fileStream) public AssetsFile(string fullName, EndianStream fileStream)
{ {
//if (memFile != null) { Stream = new EndianStream(memFile, endianType); }
//else { Stream = new EndianStream(File.OpenRead(fileName), endianType); }
a_Stream = fileStream; a_Stream = fileStream;
filePath = fullName; filePath = fullName;
fileName = Path.GetFileName(fullName); fileName = Path.GetFileName(fullName);
try
{
int tableSize = a_Stream.ReadInt32(); int tableSize = a_Stream.ReadInt32();
int dataEnd = a_Stream.ReadInt32(); int dataEnd = a_Stream.ReadInt32();
fileGen = a_Stream.ReadInt32(); fileGen = a_Stream.ReadInt32();
@ -163,20 +163,20 @@ namespace Unity_Studio
switch (fileGen) switch (fileGen)
{ {
case 6://2.5.0 - 2.6.1 case 6: //2.5.0 - 2.6.1
{ {
a_Stream.Position = (dataEnd - tableSize); a_Stream.Position = (dataEnd - tableSize);
a_Stream.Position += 1; a_Stream.Position += 1;
break; break;
} }
case 7://3.0.0 beta case 7: //3.0.0 beta
{ {
a_Stream.Position = (dataEnd - tableSize); a_Stream.Position = (dataEnd - tableSize);
a_Stream.Position += 1; a_Stream.Position += 1;
m_Version = a_Stream.ReadStringToNull(); m_Version = a_Stream.ReadStringToNull();
break; break;
} }
case 8://3.0.0 - 3.4.2 case 8: //3.0.0 - 3.4.2
{ {
a_Stream.Position = (dataEnd - tableSize); a_Stream.Position = (dataEnd - tableSize);
a_Stream.Position += 1; a_Stream.Position += 1;
@ -184,19 +184,19 @@ namespace Unity_Studio
platform = a_Stream.ReadInt32(); platform = a_Stream.ReadInt32();
break; break;
} }
case 9://3.5.0 - 4.6.x case 9: //3.5.0 - 4.6.x
{ {
a_Stream.Position += 4;//azero a_Stream.Position += 4; //azero
m_Version = a_Stream.ReadStringToNull(); m_Version = a_Stream.ReadStringToNull();
platform = a_Stream.ReadInt32(); platform = a_Stream.ReadInt32();
break; break;
} }
case 14://5.0.0 beta and final case 14: //5.0.0 beta and final
case 15://5.0.1 - 5.4 case 15: //5.0.1 - 5.4
case 16://??.. no sure case 16: //??.. no sure
case 17://5.5.0 and up case 17: //5.5.0 and up
{ {
a_Stream.Position += 4;//azero a_Stream.Position += 4; //azero
m_Version = a_Stream.ReadStringToNull(); m_Version = a_Stream.ReadStringToNull();
platform = a_Stream.ReadInt32(); platform = a_Stream.ReadInt32();
baseDefinitions = a_Stream.ReadBoolean(); baseDefinitions = a_Stream.ReadBoolean();
@ -220,21 +220,51 @@ namespace Unity_Studio
switch (platform) switch (platform)
{ {
case -2: platformStr = "Unity Package"; break; case -2:
case 4: platformStr = "OSX"; break; platformStr = "Unity Package";
case 5: platformStr = "PC"; break; break;
case 6: platformStr = "Web"; break; case 4:
case 7: platformStr = "Web streamed"; break; platformStr = "OSX";
case 9: platformStr = "iOS"; break; break;
case 10: platformStr = "PS3"; break; case 5:
case 11: platformStr = "Xbox 360"; break; platformStr = "PC";
case 13: platformStr = "Android"; break; break;
case 16: platformStr = "Google NaCl"; break; case 6:
case 19: platformStr = "CollabPreview"; break; platformStr = "Web";
case 21: platformStr = "WP8"; break; break;
case 25: platformStr = "Linux"; break; case 7:
case 29: platformStr = "Wii U"; break; platformStr = "Web streamed";
default: platformStr = "Unknown Platform"; break; break;
case 9:
platformStr = "iOS";
break;
case 10:
platformStr = "PS3";
break;
case 11:
platformStr = "Xbox 360";
break;
case 13:
platformStr = "Android";
break;
case 16:
platformStr = "Google NaCl";
break;
case 19:
platformStr = "CollabPreview";
break;
case 21:
platformStr = "WP8";
break;
case 25:
platformStr = "Linux";
break;
case 29:
platformStr = "Wii U";
break;
default:
platformStr = "Unknown Platform";
break;
} }
int baseCount = a_Stream.ReadInt32(); int baseCount = a_Stream.ReadInt32();
@ -249,16 +279,25 @@ namespace Unity_Studio
int memberCount = a_Stream.ReadInt32(); int memberCount = a_Stream.ReadInt32();
var cb = new List<ClassMember>(); var cb = new List<ClassMember>();
for (int m = 0; m < memberCount; m++) { readBase(cb, 1); } for (int m = 0; m < memberCount; m++)
{
readBase(cb, 1);
}
var aClass = new ClassStruct() { ID = classID, Text = (baseType + " " + baseName), members = cb }; var aClass = new ClassStruct() { ID = classID, Text = (baseType + " " + baseName), members = cb };
aClass.SubItems.Add(classID.ToString()); aClass.SubItems.Add(classID.ToString());
ClassStructures.Add(classID, aClass); ClassStructures.Add(classID, aClass);
} }
else { readBase5(); } else
{
readBase5();
}
} }
if (fileGen >= 7 && fileGen < 14) { a_Stream.Position += 4; }//azero if (fileGen >= 7 && fileGen < 14)
{
a_Stream.Position += 4; //azero
}
int assetCount = a_Stream.ReadInt32(); int assetCount = a_Stream.ReadInt32();
@ -268,11 +307,20 @@ namespace Unity_Studio
for (int i = 0; i < assetCount; i++) for (int i = 0; i < assetCount; i++)
{ {
//each table entry is aligned individually, not the whole table //each table entry is aligned individually, not the whole table
if (fileGen >= 14) { a_Stream.AlignStream(4); } if (fileGen >= 14)
{
a_Stream.AlignStream(4);
}
AssetPreloadData asset = new AssetPreloadData(); AssetPreloadData asset = new AssetPreloadData();
if (fileGen < 14) { asset.m_PathID = a_Stream.ReadInt32(); } if (fileGen < 14)
else { asset.m_PathID = a_Stream.ReadInt64(); } {
asset.m_PathID = a_Stream.ReadInt32();
}
else
{
asset.m_PathID = a_Stream.ReadInt64();
}
asset.Offset = a_Stream.ReadUInt32(); asset.Offset = a_Stream.ReadUInt32();
asset.Offset += dataOffset; asset.Offset += dataOffset;
asset.Size = a_Stream.ReadInt32(); asset.Size = a_Stream.ReadInt32();
@ -356,6 +404,11 @@ namespace Unity_Studio
shared.fileName = sharedFileName.Replace("/", "\\"); shared.fileName = sharedFileName.Replace("/", "\\");
sharedAssetsList.Add(shared); sharedAssetsList.Add(shared);
} }
valid = true;
}
catch (Exception e)
{
}
} }
private void readBase(List<ClassMember> cb, int level) private void readBase(List<ClassMember> cb, int level)

View File

@ -149,7 +149,7 @@ namespace Unity_Studio
{ {
var bytes = new List<byte>(); var bytes = new List<byte>();
byte b; byte b;
while ((b = ReadByte()) != 0) while (BaseStream.Position != BaseStream.Length && (b = ReadByte()) != 0)
bytes.Add(b); bytes.Add(b);
return Encoding.UTF8.GetString(bytes.ToArray()); return Encoding.UTF8.GetString(bytes.ToArray());
} }

View File

@ -131,26 +131,12 @@ namespace Unity_Studio
foreach (var memFile in b_File.MemoryAssetsFileList) //filter unity files foreach (var memFile in b_File.MemoryAssetsFileList) //filter unity files
{ {
bool validAssetsFile = false;
switch (Path.GetExtension(memFile.fileName))
{
case ".assets":
case ".sharedAssets":
validAssetsFile = true;
break;
case "":
validAssetsFile = (memFile.fileName == "mainData" ||
Regex.IsMatch(memFile.fileName, "level.*?") ||
Regex.IsMatch(memFile.fileName, "CustomAssetBundle-.*?") ||
Regex.IsMatch(memFile.fileName, "CAB-.*?") ||
Regex.IsMatch(memFile.fileName, "BuildPlayer-.*?"));
break;
}
StatusStripUpdate("Loading " + memFile.fileName); StatusStripUpdate("Loading " + memFile.fileName);
//create dummy path to be used for asset extraction //create dummy path to be used for asset extraction
memFile.fileName = Path.GetDirectoryName(bundleFileName) + "\\" + memFile.fileName; memFile.fileName = Path.GetDirectoryName(bundleFileName) + "\\" + memFile.fileName;
AssetsFile assetsFile = new AssetsFile(memFile.fileName, new EndianStream(memFile.memStream, EndianType.BigEndian)); AssetsFile assetsFile = new AssetsFile(memFile.fileName, new EndianStream(memFile.memStream, EndianType.BigEndian));
if (assetsFile.valid)
{
if (assetsFile.fileGen == 6 && Path.GetFileName(bundleFileName) != "mainData") //2.6.x and earlier don't have a string version before the preload table if (assetsFile.fileGen == 6 && Path.GetFileName(bundleFileName) != "mainData") //2.6.x and earlier don't have a string version before the preload table
{ {
//make use of the bundle file version //make use of the bundle file version
@ -158,8 +144,6 @@ namespace Unity_Studio
assetsFile.version = Array.ConvertAll((from Match m in Regex.Matches(assetsFile.m_Version, @"[0-9]") select m.Value).ToArray(), int.Parse); assetsFile.version = Array.ConvertAll((from Match m in Regex.Matches(assetsFile.m_Version, @"[0-9]") select m.Value).ToArray(), int.Parse);
assetsFile.buildType = b_File.versionEngine.Split(AssetsFile.buildTypeSplit, StringSplitOptions.RemoveEmptyEntries); assetsFile.buildType = b_File.versionEngine.Split(AssetsFile.buildTypeSplit, StringSplitOptions.RemoveEmptyEntries);
} }
if (validAssetsFile)
{
b_assetsfileList.Add(assetsFile); b_assetsfileList.Add(assetsFile);
} }
assetsfileandstream[assetsFile.fileName] = assetsFile.a_Stream; assetsfileandstream[assetsFile.fileName] = assetsFile.a_Stream;

View File

@ -149,7 +149,7 @@ The quick brown fox jumps over the lazy dog. 1234567890</value>
<value>636, 17</value> <value>636, 17</value>
</data> </data>
<data name="openFileDialog1.Filter" xml:space="preserve"> <data name="openFileDialog1.Filter" xml:space="preserve">
<value>Unity asset files|level*; globalgamemanagers; mainData; CustomAssetBundle-*; CAB-*; BuildPlayer-*; *.assets; *.sharedAssets|Unity bundle files|*.unity3d; *.unity3d.lz4; *.assetbundle; *.bundle; *.bytes|Unity asset files|*.*|Unity bundle files|*.*</value> <value>Unity asset files|*.*|Unity bundle files|*.*|Unity asset files|level*; globalgamemanagers; mainData; CustomAssetBundle-*; CAB-*; BuildPlayer-*; *.assets; *.sharedAssets|Unity bundle files|*.unity3d; *.unity3d.lz4; *.assetbundle; *.bundle; *.bytes</value>
</data> </data>
<data name="openFolderDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing"> <data name="openFolderDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing">
<value>169, 17</value> <value>169, 17</value>