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

Цитата: Андрей от 04.02.2022, 21:54Добрый вечер.
Расширение .dat в большинстве случаев условно, от слова data - данные.
Это может быть и обычный переименованный zip-архив и всё что угодно, смотря что захотел разработчик.
Добрый вечер.
Расширение .dat в большинстве случаев условно, от слова data - данные.
Это может быть и обычный переименованный zip-архив и всё что угодно, смотря что захотел разработчик.
Цитата: Adler от 04.02.2022, 22:00Приветствую.
Завтра как будет время посмотрю, что там.
Приветствую.
Завтра как будет время посмотрю, что там.
Цитата: --- НЛО --- от 04.02.2022, 22:31андрей, adler, спасибо огромное! 🙂 андрей, точно не архив. я пробовал открыть эти dat-файлы архиватором, у меня 7zip, но он выдал ошибку. adler, вот официальный сайт разработчика: http://www.ndadamson.com
андрей, adler, спасибо огромное! 🙂 андрей, точно не архив. я пробовал открыть эти dat-файлы архиватором, у меня 7zip, но он выдал ошибку. adler, вот официальный сайт разработчика: http://www.ndadamson.com
Цитата: --- НЛО --- от 04.02.2022, 22:43Привет, Тимофей Игнатов 🖐
Так на этой странице наверное есть те звуки которые Тебе нужны. Вот скриншот.
Привет, Тимофей Игнатов 🖐
Так на этой странице наверное есть те звуки которые Тебе нужны. Вот скриншот.
Цитата: --- НЛО --- от 04.02.2022, 23:25привет, саша. нет, то, что на этой странице- это кастомные звуки, которые можно добавлять в папку sounds, кажется, если я не ошибаюсь. у меня этой папки нету, поскольку я её удаляю за ненадобностью, но по умолчанию при распаковке архива она есть, и она пуста. там звуков совсем немного, лишь на некоторые события.
привет, саша. нет, то, что на этой странице- это кастомные звуки, которые можно добавлять в папку sounds, кажется, если я не ошибаюсь. у меня этой папки нету, поскольку я её удаляю за ненадобностью, но по умолчанию при распаковке архива она есть, и она пуста. там звуков совсем немного, лишь на некоторые события.
Цитата: Adler от 05.02.2022, 09:28Приветствую.
Посмотрел этот .dat. Судя по всему, это набор склеенных подряд ogg файлов. Вручную "порезать" их вряд ли получится, по крайней мере не взорвав себе мозг.
Возможно я это смогу автоматизировать, но нужно малостьразобраться со структурой ogg файла, а для остального есть наработки.P.S. Не нужно даже с самим ogg разбираться (там еще тот взрыв мозга). Сама структура файла dat очень простая и распарсить его не составит труда. Нужно лишь немного времени.
Приветствую.
Посмотрел этот .dat. Судя по всему, это набор склеенных подряд ogg файлов. Вручную "порезать" их вряд ли получится, по крайней мере не взорвав себе мозг.
Возможно я это смогу автоматизировать, но нужно малость разобраться со структурой ogg файла, а для остального есть наработки.
P.S. Не нужно даже с самим ogg разбираться (там еще тот взрыв мозга). Сама структура файла dat очень простая и распарсить его не составит труда. Нужно лишь немного времени.
Цитата: --- НЛО --- от 05.02.2022, 11:11adler, спасибо огромное! я в восторге! я вами восхищаюсь! 🙂
adler, спасибо огромное! я в восторге! я вами восхищаюсь! 🙂
Цитата: Adler от 05.02.2022, 11:16Всего понадобилось чуть чуть кода написанного на коленке:
[spoiler title=""]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(); } }
[/spoiler]
Всего понадобилось чуть чуть кода написанного на коленке:
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(); }
}
Цитата: Владимир от 16.10.2022, 22:28Здравствуйте, даа, это классная игра и звуки там отличные, слушал их в архиве и в реальной игре, потому как сам незрячий и играл в эту игруху. есть ещё одна интересная игра называется: Survive the Wild, хоть и всё меню и интерфейс на английском, но звуки хорошие. они там тоже с расширением dat упокованы. если можно и получится, помогите,пожалуйсто их достать? вот звуковой пакет заранее благодарю за ответ
Здравствуйте, даа, это классная игра и звуки там отличные, слушал их в архиве и в реальной игре, потому как сам незрячий и играл в эту игруху. есть ещё одна интересная игра называется: Survive the Wild, хоть и всё меню и интерфейс на английском, но звуки хорошие. они там тоже с расширением dat упокованы. если можно и получится, помогите,пожалуйсто их достать? вот звуковой пакет заранее благодарю за ответ
Цитата: Алексей от 24.02.2023, 12:01Цитата: Adler от 05.02.2022, 11:16Всего понадобилось чуть чуть кода написанного на коленке:
[spoiler title=""]Приветствую! имеются тоже файлы,в гугле тишина. файлы 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(); } }
[/spoiler]
Цитата: 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(); } }
Цитата: Алексей от 24.02.2023, 12:03Здравствуйте! тоже есть файлы DAT аудио, три штучки. как их могу открыть? или код ваш применить. Буду благодарен любой помощи!
Здравствуйте! тоже есть файлы DAT аудио, три штучки. как их могу открыть? или код ваш применить. Буду благодарен любой помощи!
Цитата: Adler от 25.02.2023, 10:16Цитата: Алексей от 24.02.2023, 12:03Здравствуйте! тоже есть файлы DAT аудио, три штучки. как их могу открыть? или код ваш применить. Буду благодарен любой помощи!
Приветствую
Если файлы тоже от tubesim, то тут ссылка на уже извлеченные оттуда. Если это какие-то другие файлы, то выложите куда нибудь, что бы на них посмотреть.
Цитата: Алексей от 24.02.2023, 12:03Здравствуйте! тоже есть файлы DAT аудио, три штучки. как их могу открыть? или код ваш применить. Буду благодарен любой помощи!
Приветствую
Если файлы тоже от tubesim, то тут ссылка на уже извлеченные оттуда. Если это какие-то другие файлы, то выложите куда нибудь, что бы на них посмотреть.