From 97aac515f6b66af5fec84366b3c60abad3a7b7a9 Mon Sep 17 00:00:00 2001 From: morkt Date: Tue, 10 Apr 2018 22:17:38 +0400 Subject: [PATCH] another AbogadoPowers archive format. --- ArcFormats/Abogado/ArcPAK.cs | 125 ++++++++++++++++++++++++++++++++ ArcFormats/Abogado/keytable.dat | Bin 0 -> 32768 bytes ArcFormats/ArcFormats.csproj | 4 + 3 files changed, 129 insertions(+) create mode 100644 ArcFormats/Abogado/ArcPAK.cs create mode 100644 ArcFormats/Abogado/keytable.dat diff --git a/ArcFormats/Abogado/ArcPAK.cs b/ArcFormats/Abogado/ArcPAK.cs new file mode 100644 index 00000000..0a828425 --- /dev/null +++ b/ArcFormats/Abogado/ArcPAK.cs @@ -0,0 +1,125 @@ +//! \file ArcPAK.cs +//! \date 2018 Apr 10 +//! \brief AbogadoPowers resource archive. +// +// Copyright (C) 2018 by morkt +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.IO; + +namespace GameRes.Formats.Abogado +{ + internal class Fs8Archive : ArcFile + { + public Fs8Archive (ArcView arc, ArchiveFormat impl, ICollection dir) + : base (arc, impl, dir) + { + } + } + + [Export(typeof(ArchiveFormat))] + public class PakOpener : ArchiveFormat + { + public override string Tag { get { return "PAK/ABOGADO"; } } + public override string Description { get { return "AbogadoPowers resource archive"; } } + public override uint Signature { get { return 0; } } + public override bool IsHierarchic { get { return false; } } + public override bool CanWrite { get { return false; } } + + public override ArcFile TryOpen (ArcView file) + { + int count = file.View.ReadInt16 (0); + if (!IsSaneCount (count)) + return null; + int encryption = file.View.ReadInt16 (2); + if (encryption < 0 || encryption > 1) + return null; + + uint index_offset = 4; + var dir = new List (count); + for (int i = 0; i < count; ++i) + { + var name = file.View.ReadString (index_offset, 0x40); + if (string.IsNullOrWhiteSpace (name)) + return null; + var entry = FormatCatalog.Instance.Create (name); + entry.Offset = file.View.ReadUInt32 (index_offset+0x40); + entry.Size = file.View.ReadUInt32 (index_offset+0x44); + if (!entry.CheckPlacement (file.MaxOffset)) + return null; + dir.Add (entry); + index_offset += 0x48; + } + if (encryption != 0) + return new Fs8Archive (file, this, dir); + else + return new ArcFile (file, this, dir); + } + + public override Stream OpenEntry (ArcFile arc, Entry entry) + { + var input = arc.File.CreateStream (entry.Offset, entry.Size); + if (!(arc is Fs8Archive)) + return input; + var enc_offset = entry.Offset + entry.Size; + int key = arc.File.View.ReadInt32 (enc_offset); + if (key < 0 || key >= DefaultKeys.Value.Length) + return input; + using (input) + { + var data = input.ReadBytes ((int)entry.Size); + FsDecrypt (data, DefaultKeys.Value[key]); + return new BinMemoryStream (data, entry.Name); + } + } + + void FsDecrypt (byte[] data, byte[] key) + { + for (int i = 0; i < data.Length; ++i) + { + data[i] = key[data[i]]; + } + } + + static readonly Lazy DefaultKeys = new Lazy (LoadKeys); + + static byte[][] LoadKeys () + { + using (var input = EmbeddedResource.Open ("keytable.dat", typeof (PakOpener))) + { + if (null == input) + return Array.Empty(); + var keys = new List (128); + for (int i = 0; i < 128; ++i) + { + var k = new byte[256]; + if (input.Read (k, 0, 256) != 256) + break; + keys.Add (k); + } + return keys.ToArray(); + } + } + } +} diff --git a/ArcFormats/Abogado/keytable.dat b/ArcFormats/Abogado/keytable.dat new file mode 100644 index 0000000000000000000000000000000000000000..f68cf544fcdd5774aa10b617cd672e7b0558d0d5 GIT binary patch literal 32768 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

`#x&6pe1=h{Zrf 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 XlbkVsFhXFxDvg1!cBE+p6JxYp{1L;l literal 0 HcmV?d00001 diff --git a/ArcFormats/ArcFormats.csproj b/ArcFormats/ArcFormats.csproj index f0d56322..46027ae0 100644 --- a/ArcFormats/ArcFormats.csproj +++ b/ArcFormats/ArcFormats.csproj @@ -89,6 +89,7 @@ + @@ -138,8 +139,10 @@ + + @@ -660,6 +663,7 @@ +