Page 9 of 11

Re: List of Unity games

Posted: Fri Jul 03, 2015 2:26 am
by JONATHANTKB
997R8V10 wrote:Hello and thanks a ton for the tutorial!!! I love the Porsche models and found a lot of them online but I wanted the Cayman GT-4 to convert into rFactor. I successfully extracted it and have it now! :D

A Question: Does anyone know of any other 3d car configurators out there? The ones I found are just images :( I really want them if they are there!

Thanks again,
997R8V10
https://www.facebook.com/997CarFactory

no all configurator are pictures

Re: List of Unity games

Posted: Thu Oct 29, 2015 8:49 pm
by Chipicao
Could you guys shout out some Unity 5 games, for testing purposes?
Any platform, as many as possible, and only names or official links please.

Re: List of Unity games

Posted: Thu Oct 29, 2015 9:46 pm
by chrrox
Sure here you go Idolmaster.
http://storage.game.starlight-stage.jp/ ... etmanifest
then just paste this to download a file
chara_002_00_base.unity3d.lz4
becomes
http://storage.game.starlight-stage.jp/ ... nity3d.lz4

Re: List of Unity games

Posted: Fri Oct 30, 2015 12:43 am
by Chipicao
Thanks! So far so good...
Image

May I ask how you managed to intercept this file manifest?
Did you use a network sniffer or did you hack the iOS app somehow?

I'm interested because many mobile apps download additional files after installation.

Re: List of Unity games

Posted: Fri Oct 30, 2015 1:10 am
by chrrox
yeah I just set up a proxy server and logged the url's.
Did you have the basic unity structure layout I have some of the structure just looking for the linking It would save me a lot of time.

Re: List of Unity games

Posted: Fri Oct 30, 2015 1:42 am
by Chipicao
Yes, I think I have all of it covered. What exactly do you need, main file structure?

Re: List of Unity games

Posted: Fri Oct 30, 2015 3:22 am
by chrrox
Yeah I saw another program use those set id's based on the unity version.
Can you post how the basic structure is read and those are combined then i think the rest should go quick.
i hope what I said makes sense :P

Re: List of Unity games

Posted: Fri Oct 30, 2015 7:50 am
by Chipicao
Hmm, maybe you've seen it in my MaxScript, which also had the ability to parse any and all Unity versions :D

Here's the complete structure of assetfiles (mainData, level#, .assets, .sharedAssets, CustomAssetBundle, BuildPlayer)
Note that unity 5 still needs further testing

As of yesterday, Unity Studio is also on GitHub: https://github.com/RaduMC/UnityStudio

Code: Select all

public AssetsFile(string fileName)
        {
            EndianStream fileStream = new EndianStream(File.OpenRead(fileName), EndianType.BigEndian);

            int tableSize = fileStream.ReadInt32();
            int dataEnd = fileStream.ReadInt32();
            int fileGen = fileStream.ReadInt32();
            int dataOffset = fileStream.ReadInt32();

            bool baseDefinitions = false;

            switch (fileGen)
            {
                case 6:
                    {
                        fileStream.Position = (dataEnd - tableSize);
                        fileStream.Position += 1;
                        break;
                    }
                case 7://Unity 3 beta
                    {
                        fileStream.Position = (dataEnd - tableSize);
                        fileStream.Position += 1;
                        m_Version = fileStream.ReadStringToNull();
                        break;
                    }
                case 8:
                    {
                        fileStream.Position = (dataEnd - tableSize);
                        fileStream.Position += 1;
                        m_Version = fileStream.ReadStringToNull();
                        platform = fileStream.ReadInt32();
                        break;
                    }
                case 9:
                    {
                        fileStream.Position += 4;//unknown zero
                        m_Version = fileStream.ReadStringToNull();
                        platform = fileStream.ReadInt32();
                        break;
                    }
                case 14:
                case 15://not fully tested!
                    {
                        fileStream.Position += 4;//unknown zero
                        m_Version = fileStream.ReadStringToNull();
                        platform = fileStream.ReadInt32();
                        baseDefinitions = fileStream.ReadBoolean();
                        break;
                    }
                default:
                    {
                        //MessageBox.Show("Unsupported Unity version!", "Unity Studio Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
            }

            if (platform > 255 || platform < 0)
            {
                byte[] b32 = BitConverter.GetBytes(platform);
                Array.Reverse(b32);
                platform = BitConverter.ToInt32(b32, 0);
                fileStream.endian = EndianType.LittleEndian;
            }

            /*Platform list:
               -2:  unitypackage
                4:  OSX
                5:  PC
                6:  Web
                7:  Web_streamed
                9:  iOS
                10: PS3(big)
                11: Xbox360(big)
                13: Android
                16: Google_NaCl
                21: WP8
                25: Linux
            */

            int baseCount = fileStream.ReadInt32();
            for (int i = 0; i < baseCount; i++)
            {
                if (fileGen < 14)
                {
                    int baseType = fileStream.ReadInt32();
                    readBase();
                }
                else { readBase5(baseDefinitions); }
            }

            if (fileGen >= 7 && fileGen < 14) { fileStream.Position += 4; }//unknown zero

            int assetCount = fileStream.ReadInt32();

            for (int i = 0; i < assetCount; i++)
            {
                if (fileGen >= 14) { fileStream.AlignStream(4); }

                AssetPreloadData asset = new AssetPreloadData();
                if (fileGen < 14) { asset.m_PathID = fileStream.ReadInt32(); }
                else { asset.m_PathID = fileStream.ReadInt64(); }
                asset.Offset = fileStream.ReadInt32();
                asset.Offset += dataOffset;
                asset.Size = fileStream.ReadInt32();
                asset.Type1 = fileStream.ReadInt32();
                asset.Type2 = fileStream.ReadUInt16();
                fileStream.Position += 2;
                if (fileGen >= 15) { byte unknownByte = a_Stream.ReadByte(); }
                
                preloadTable.Add(asset.m_PathID, asset);
            }
            
            if (fileGen >= 14)
            {
                //this looks like a list of assets that need to be preloaded in memory before anytihng else
                int someCount = a_Stream.ReadInt32();
                for (int i = 0; i < someCount; i++)
                {
                    int num1 = a_Stream.ReadInt32();
                    a_Stream.AlignStream(4);
                    long m_PathID = a_Stream.ReadInt64();
                }
            }

            int sharedFileCount = fileStream.ReadInt32();
            for (int i = 0; i < sharedFileCount; i++)
            {
                string aName = fileStream.ReadStringToNull();
                fileStream.Position += 20;
                string sharedFileName = fileStream.ReadStringToNull(); //relative path
            }
        }

        private void readBase() //recursive
        {
            string baseFormat = fileStream.ReadStringToNull();
            string baseName = fileStream.ReadStringToNull();
            fileStream.Position += 20;
            int childrenCount = fileStream.ReadInt32();
            //Debug.WriteLine(baseFormat + " " + baseName + " " + childrenCount);
            for (int i = 0; i < childrenCount; i++) { readBase(); }
        }

        private void readBase5(bool baseDefinitions)
        {
            int baseType = fileStream.ReadInt32();
            if (baseType < 0) { fileStream.Position += 16; }
            fileStream.Position += 16;

            if (baseDefinitions)
            {
                int varCount = fileStream.ReadInt32();
                int stringSize = fileStream.ReadInt32();

                fileStream.Position += varCount * 24;
                string varStrings = Encoding.UTF8.GetString(fileStream.ReadBytes(stringSize));

                //can skip this
                fileStream.Position -= varCount * 24 + stringSize;
                for (int i = 0; i < varCount; i++)
                {
                    ushort num0 = fileStream.ReadUInt16();
                    byte level = fileStream.ReadByte();
                    bool isArray = fileStream.ReadBoolean();

                    ushort varTypeIndex = fileStream.ReadUInt16();
                    ushort test = fileStream.ReadUInt16();
                    string varTypeStr;
                    if (test == 0) //varType is an offset in the string block
                    { varTypeStr = varStrings.Substring(varTypeIndex, varStrings.IndexOf('\0', varTypeIndex) - varTypeIndex); }//substringToNull
                    else //varType is an index in an internal strig array
                    { varTypeStr = baseStrings[varTypeIndex] != null ? baseStrings[varTypeIndex] : varTypeIndex.ToString(); }

                    ushort varNameIndex = fileStream.ReadUInt16();
                    test = fileStream.ReadUInt16();
                    string varNameStr;
                    if (test == 0) { varNameStr = varStrings.Substring(varNameIndex, varStrings.IndexOf('\0', varNameIndex) - varNameIndex); }
                    else { varNameStr = baseStrings[varNameIndex] != null ? baseStrings[varNameIndex] : varNameIndex.ToString(); }

                    int size = fileStream.ReadInt32();
                    int index = fileStream.ReadInt32();
                    int num1 = fileStream.ReadInt32();

                    for (int t = 0; t < level; t++) { Debug.Write("\t"); }
                    //Debug.WriteLine(varTypeStr + " " + varNameStr + " " + size);
                }
                fileStream.Position += stringSize;
            }
        }

Re: List of Unity games

Posted: Fri Oct 30, 2015 11:48 am
by Csimbi
Here. Free online game.
Buggy as hell but comes close to fun.

Re: List of Unity games

Posted: Fri Oct 30, 2015 2:00 pm
by Trishty
chrrox wrote:yeah I just set up a proxy server and logged the url's.
Did you have the basic unity structure layout I have some of the structure just looking for the linking It would save me a lot of time.
I have tried and get the urls. Thank you very much.

Final Fantasy 7 G-Bike
bike_001_018 model
http://app.cache.finalfantasy7-gbike.co ... 0000000005

Mahouka Koukou No Rettousei Lost Zero
http://cache.lostzeromagichs.jp/assets/ ... f23df797f6

But I didn't see manifest list of files in the urls :(

Re: List of Unity games

Posted: Sat Oct 31, 2015 12:27 pm
by Ares722
Another unity3d 5 game similar to Idolmaster and plenty of 3d models:

jap name:コエスタ - アイドル 声優 育成 RPG

link android: https://play.google.com/store/apps/deta ... sta1&hl=ja
(there is also an ios version on jap itunes)

Re: List of Unity games

Posted: Sat Oct 31, 2015 1:27 pm
by Mrtest
Chipicao,
Which program to compile files?

Re: List of Unity games

Posted: Sun Nov 01, 2015 7:22 pm
by chrrox

Re: List of Unity games

Posted: Sun Nov 01, 2015 8:32 pm
by Chipicao
Thanks!

I have made progress with Unity 5 and found some more information about the structure of asset files. Will be posting shortly.

Re: List of Unity games

Posted: Sun Nov 01, 2015 9:59 pm
by chrrox
Need to find the function for encrypting and decrypting the content for games
http://docs.unity3d.com/Manual/protectingcontent.html
seems to be using this.