Вы должны войти, чтобы создавать сообщения и темы.

извлечь ресурсы из dat-файлов [Решено]

Страница 1 из 3► 3

ещё раз всем доброго, друзья-форумчане. в предыдущей теме о декомпиляторе я рассказал об игре "tubesim". это аудиоигра для слепых, являющая собой симулятор лондонского метро. в папке с игрой помимо исполняемого файла находятся три файла с расширением dat, в которых видимо и находятся все звуковые ресурсы игры. а звуки там, я скажу, просто великолепны. и вот у меня возник вопрос: как можно извлечь звуковые, да и другие ресурсы из dat-файлов. друзья-форумчане, пособите пожалуйста советом! заранее огромное спасибо! 🙂 P.S. вот скриншот папки с игрой: игра портативная.
.

Добрый вечер.

Расширение .dat в большинстве случаев условно, от слова data - данные. 
Это может быть и обычный переименованный zip-архив и всё что угодно, смотря что захотел разработчик.

Лайкнули Удаленный пользователь, Удаленный пользователь и Psydiant
Удаленный пользовательУдаленный пользовательPsydiant
Голова дана человеку не для того, чтобы кушать, а для того, чтобы думать.

Приветствую.
Завтра как будет время посмотрю, что там.

Лайкнули Удаленный пользователь и Удаленный пользователь
Удаленный пользовательУдаленный пользователь

андрей, adler, спасибо огромное! 🙂 андрей, точно не архив. я пробовал открыть эти dat-файлы архиватором, у меня 7zip, но он выдал ошибку. adler, вот официальный сайт разработчика: http://www.ndadamson.com

Привет, Тимофей Игнатов 🖐
Так на этой странице наверное есть те звуки которые Тебе нужны. Вот скриншот.

привет, саша. нет, то, что на этой странице- это кастомные звуки, которые можно добавлять в папку sounds, кажется, если я не ошибаюсь. у меня этой папки нету, поскольку я её удаляю за ненадобностью, но по умолчанию при распаковке архива она есть, и она пуста. там звуков совсем немного, лишь на некоторые события.

Приветствую.
Посмотрел этот .dat. Судя по всему, это набор склеенных подряд ogg файлов. Вручную "порезать" их вряд ли получится, по крайней мере не взорвав себе мозг. 
Возможно я это смогу автоматизировать, но нужно малость разобраться со структурой ogg файла, а для остального есть наработки.

P.S. Не нужно даже с самим ogg разбираться (там еще тот взрыв мозга). Сама структура файла dat очень простая и распарсить его не составит труда. Нужно лишь немного времени.

Лайкнули Mikhail, Сибирь и ещё 3
MikhailСибирьУдаленный пользовательУдаленный пользовательАлик

ВОТ

Лайкнули Mikhail, Удаленный пользователь и ещё 3
MikhailУдаленный пользовательУдаленный пользовательPsydiantАлик

adler, спасибо огромное! я в восторге! я вами восхищаюсь! 🙂

Лайкнул Удаленный пользователь
Удаленный пользователь

Всего понадобилось чуть чуть кода написанного на коленке:

Спойлер

static void Main(string[] args)
        {
            try
            {
                if (args.Length != 1)
                {
                    Console.WriteLine("Не указан файл для извлечения");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
                var file = args[0];
                if (!File.Exists(file))
                {
                    Console.WriteLine($"Файл {file} не существует");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
                var fpath = Path.GetDirectoryName(file);
                var fname = Path.GetFileNameWithoutExtension(file);
                var ogg_path = Path.Combine(fpath, fname);
                if (!Directory.Exists(ogg_path)) Directory.CreateDirectory(ogg_path);
                int i = 0;
                using (var fs = new FileStream(file, FileMode.Open))
                {
                    using (BinaryReader r = new BinaryReader(fs))
                    {
                        fs.Seek(16, SeekOrigin.Begin);
                        while (fs.Position < fs.Length)
                        {
                            long pos = fs.Position;
                            var sig = r.ReadBytes(4);
                            if (sig.SequenceEqual(new byte[] { 0x53, 0x46, 0x50, 0x76 }))
                            {
                                var name_size = r.ReadUInt64();
                                var ogg_size = r.ReadInt32();
                                var ogg_name = System.Text.Encoding.Default.GetString(r.ReadBytes((int)name_size));
                                var ogg = r.ReadBytes(ogg_size);
                                var save_ogg = Path.Combine(ogg_path, ogg_name + ".ogg");
                                Console.WriteLine("№ " + i++ + "\r\nSig position: " + pos.ToString("X4") + "\r\nName size: " + name_size.ToString() + "\r\nOGG size: " + ogg_size.ToString() + "\r\nOGG name: " + ogg_name + "\r\n" + save_ogg + "\r\n");
                                File.WriteAllBytes(save_ogg, ogg);
                            }
                        }
                    }
                }
                Console.WriteLine((i - 1).ToString() + " ogg extracted!");
                Console.ReadKey();
            }
            catch (Exception ex)
            { Console.WriteLine(ex.ToString()); Console.ReadKey(); }
        }

 

Лайкнули Aleksey, Удаленный пользователь и ещё 4
AlekseyУдаленный пользовательУдаленный пользовательPsydiantАликВладимир

Здравствуйте, даа, это классная игра и звуки там отличные, слушал их в архиве и в реальной игре, потому как сам незрячий и играл в эту игруху. есть ещё одна интересная игра называется:  Survive the Wild, хоть и всё меню и интерфейс на английском, но звуки хорошие. они там тоже с расширением dat упокованы.  если можно и получится, помогите,пожалуйсто их достать?  вот звуковой пакет заранее благодарю за ответ

Цитата: Adler от 05.02.2022, 11:16

Всего понадобилось чуть чуть кода написанного на коленке:

Спойлер

Приветствую! имеются тоже файлы,в гугле тишина. файлы DAT аудио(звуки в машине) 
можно ли вас попросить помочь,или как применить код?
 
 
 
static void Main(string[] args)
{
try
{
if (args.Length != 1)
{
Console.WriteLine("Не указан файл для извлечения");
Console.ReadKey();
Environment.Exit(0);
}
var file = args[0];
if (!File.Exists(file))
{
Console.WriteLine($"Файл {file} не существует");
Console.ReadKey();
Environment.Exit(0);
}
var fpath = Path.GetDirectoryName(file);
var fname = Path.GetFileNameWithoutExtension(file);
var ogg_path = Path.Combine(fpath, fname);
if (!Directory.Exists(ogg_path)) Directory.CreateDirectory(ogg_path);
int i = 0;
using (var fs = new FileStream(file, FileMode.Open))
{
using (BinaryReader r = new BinaryReader(fs))
{
fs.Seek(16, SeekOrigin.Begin);
while (fs.Position < fs.Length)
{
long pos = fs.Position;
var sig = r.ReadBytes(4);
if (sig.SequenceEqual(new byte[] { 0x53, 0x46, 0x50, 0x76 }))
{
var name_size = r.ReadUInt64();
var ogg_size = r.ReadInt32();
var ogg_name = System.Text.Encoding.Default.GetString(r.ReadBytes((int)name_size));
var ogg = r.ReadBytes(ogg_size);
var save_ogg = Path.Combine(ogg_path, ogg_name + ".ogg");
Console.WriteLine("№ " + i++ + "\r\nSig position: " + pos.ToString("X4") + "\r\nName size: " + name_size.ToString() + "\r\nOGG size: " + ogg_size.ToString() + "\r\nOGG name: " + ogg_name + "\r\n" + save_ogg + "\r\n");
File.WriteAllBytes(save_ogg, ogg);
}
}
}
}
Console.WriteLine((i - 1).ToString() + " ogg extracted!");
Console.ReadKey();
}
catch (Exception ex)
{ Console.WriteLine(ex.ToString()); Console.ReadKey(); }
}
static void Main(string[] args) { try { if (args.Length != 1) { Console.WriteLine("Не указан файл для извлечения"); Console.ReadKey(); Environment.Exit(0); } var file = args[0]; if (!File.Exists(file)) { Console.WriteLine($"Файл {file} не существует"); Console.ReadKey(); Environment.Exit(0); } var fpath = Path.GetDirectoryName(file); var fname = Path.GetFileNameWithoutExtension(file); var ogg_path = Path.Combine(fpath, fname); if (!Directory.Exists(ogg_path)) Directory.CreateDirectory(ogg_path); int i = 0; using (var fs = new FileStream(file, FileMode.Open)) { using (BinaryReader r = new BinaryReader(fs)) { fs.Seek(16, SeekOrigin.Begin); while (fs.Position < fs.Length) { long pos = fs.Position; var sig = r.ReadBytes(4); if (sig.SequenceEqual(new byte[] { 0x53, 0x46, 0x50, 0x76 })) { var name_size = r.ReadUInt64(); var ogg_size = r.ReadInt32(); var ogg_name = System.Text.Encoding.Default.GetString(r.ReadBytes((int)name_size)); var ogg = r.ReadBytes(ogg_size); var save_ogg = Path.Combine(ogg_path, ogg_name + ".ogg"); Console.WriteLine("№ " + i++ + "\r\nSig position: " + pos.ToString("X4") + "\r\nName size: " + name_size.ToString() + "\r\nOGG size: " + ogg_size.ToString() + "\r\nOGG name: " + ogg_name + "\r\n" + save_ogg + "\r\n"); File.WriteAllBytes(save_ogg, ogg); } } } } Console.WriteLine((i - 1).ToString() + " ogg extracted!"); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.ReadKey(); } }
 
static void Main(string[] args)
        {
            try
            {
                if (args.Length != 1)
                {
                    Console.WriteLine("Не указан файл для извлечения");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
                var file = args[0];
                if (!File.Exists(file))
                {
                    Console.WriteLine($"Файл {file} не существует");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
                var fpath = Path.GetDirectoryName(file);
                var fname = Path.GetFileNameWithoutExtension(file);
                var ogg_path = Path.Combine(fpath, fname);
                if (!Directory.Exists(ogg_path)) Directory.CreateDirectory(ogg_path);
                int i = 0;
                using (var fs = new FileStream(file, FileMode.Open))
                {
                    using (BinaryReader r = new BinaryReader(fs))
                    {
                        fs.Seek(16, SeekOrigin.Begin);
                        while (fs.Position < fs.Length)
                        {
                            long pos = fs.Position;
                            var sig = r.ReadBytes(4);
                            if (sig.SequenceEqual(new byte[] { 0x53, 0x46, 0x50, 0x76 }))
                            {
                                var name_size = r.ReadUInt64();
                                var ogg_size = r.ReadInt32();
                                var ogg_name = System.Text.Encoding.Default.GetString(r.ReadBytes((int)name_size));
                                var ogg = r.ReadBytes(ogg_size);
                                var save_ogg = Path.Combine(ogg_path, ogg_name + ".ogg");
                                Console.WriteLine("№ " + i++ + "\r\nSig position: " + pos.ToString("X4") + "\r\nName size: " + name_size.ToString() + "\r\nOGG size: " + ogg_size.ToString() + "\r\nOGG name: " + ogg_name + "\r\n" + save_ogg + "\r\n");
                                File.WriteAllBytes(save_ogg, ogg);
                            }
                        }
                    }
                }
                Console.WriteLine((i - 1).ToString() + " ogg extracted!");
                Console.ReadKey();
            }
            catch (Exception ex)
            { Console.WriteLine(ex.ToString()); Console.ReadKey(); }
        }

 

Здравствуйте! тоже есть файлы DAT аудио, три штучки. как их могу открыть? или код ваш применить. Буду благодарен любой помощи!

Цитата: Алексей от 24.02.2023, 12:03

Здравствуйте! тоже есть файлы DAT аудио, три штучки. как их могу открыть? или код ваш применить. Буду благодарен любой помощи!

Приветствую
Если файлы тоже от tubesim, то тут ссылка на уже извлеченные оттуда. Если это какие-то  другие файлы, то выложите куда нибудь, что бы на них посмотреть.

Страница 1 из 3► 3