From b31d8b6f3edc7309cfbdc156465a2eeef01a828d Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Tue, 16 Jan 2018 08:29:02 +0000 Subject: [PATCH] Fix UTF table decryptor --- README.md | 42 ++++++++++--------- .../SonicAudioLib/CriMw/CriTable.Internal.cs | 16 +++---- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 28bd1dd..f0b3e66 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,33 @@ # Sonic Audio Tools -Tools for editing CriMw / CriWare file formats. (CSB / CPK / ACB / AWB) -## Releases -[On the AppVeyor page.](https://ci.appveyor.com/project/blueskythlikesclouds/sonicaudiotools/build/artifacts) -AppVeyor builds every commit automatically, so you can get the executables from the link above. +A set of tools to modify CRIWARE file formats. + +# Releases +You can get the latest executables on the [AppVeyor page.](https://ci.appveyor.com/project/blueskythlikesclouds/sonicaudiotools/build/artifacts) Stable builds are planned to be published [here.](https://github.com/blueskythlikesclouds/SonicAudioTools/releases) -## Building +# Building If you still wish to build the solution yourself, this is what you should do: 1. Clone from [GitHub](https://github.com/blueskythlikesclouds/SonicAudioTools.git) `git clone https://github.com/blueskythlikesclouds/SonicAudioTools.git` 2. Open the solution in Visual Studio. (Visual Studio 2017 or later is required.) 3. Install the missing NuGet packages. 4. Build the solution. -## Projects -To see more information about projects, visit the [wiki](https://github.com/blueskythlikesclouds/SonicAudioTools/wiki). -### [Sonic Audio Library](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/SonicAudioLib) -Main class library of the solution. Contains classes for IO and file formats. -### [ACB Editor](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/AcbEditor) -Audio data replacer for ACB / AWB files. Supports really old ACB files as well, which stored CPK files instead of currently used AWB files. Usage is explained in the program. -NOTE: It doesn't extract cue names so every audio will have its id on extracted file name. -### [CSB Builder](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/CsbBuilder) -CSB file importer/builder. Allows you to fully edit CSB files, preview your changes, add/remove cues, etc. -### [CSB Editor](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/CsbEditor) -Audio data replacer for CSB / CPK files. It works like ACB Editor and is a lot simpler than CSB Builder. +# Projects +If you wish to see more detailed information about the projects, visit the [wiki](https://github.com/blueskythlikesclouds/SonicAudioTools/wiki) page. -## License -Sonic Audio Tools uses the MIT license, meaning you're able to use and modify the code freely, as long as you include the copyright notice. -For more details, see [LICENSE](https://github.com/blueskythlikesclouds/SonicAudioTools/blob/master/LICENSE) +## [Sonic Audio Library](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/SonicAudioLib) +This is the main library of the solution. Contains classes for IO and file formats. + +## [ACB Editor](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/AcbEditor) +This tool allows you to edit the audio content of an ACB file. +A more advanced version like CSB Builder is planned to be made soon. + +## [CSB Builder](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/CsbBuilder) +This tool allows you to create or edit CSB files. You can do things like adding/removing cues, editing real-time sound parameters, and more. + +## [CSB Editor](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/CsbEditor) +This tool allows you to edit the audio content of a CSB file. +It works like ACB Editor, and it is a lot simpler to use than CSB Builder. + +# License +See [LICENSE](https://github.com/blueskythlikesclouds/SonicAudioTools/blob/master/LICENSE) for details. diff --git a/Source/SonicAudioLib/CriMw/CriTable.Internal.cs b/Source/SonicAudioLib/CriMw/CriTable.Internal.cs index 44e4063..e6fae30 100644 --- a/Source/SonicAudioLib/CriMw/CriTable.Internal.cs +++ b/Source/SonicAudioLib/CriMw/CriTable.Internal.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Runtime.InteropServices; @@ -65,13 +65,13 @@ namespace SonicAudioLib.CriMw { public static void FindKeys(byte[] signature, out uint xor, out uint xorMultiplier) { - for (byte x = 0; x <= byte.MaxValue; x++) + for (int x = 0; x < 0x100; x++) { // Find XOR using first byte - if ((signature[0] ^ x) == CriTableHeader.SignatureBytes[0]) + if ((signature[0] ^ (byte)x) == CriTableHeader.SignatureBytes[0]) { // Matched the first byte, try finding the multiplier with the second byte - for (byte m = 0; m <= byte.MaxValue; m++) + for (int m = 0; m < 0x100; m++) { // Matched the second byte, now make sure the other bytes match as well if ((signature[1] ^ (byte)(x * m)) == CriTableHeader.SignatureBytes[1]) @@ -81,7 +81,7 @@ namespace SonicAudioLib.CriMw bool allMatches = true; for (int i = 2; i < 4; i++) { - _x *= m; + _x = (byte)(_x * m); if ((signature[i] ^ _x) != CriTableHeader.SignatureBytes[i]) { @@ -93,8 +93,8 @@ namespace SonicAudioLib.CriMw // All matches, return the xor and multiplier if (allMatches) { - xor = x; - xorMultiplier = m; + xor = (uint)x; + xorMultiplier = (uint)m; return; } } @@ -102,7 +102,7 @@ namespace SonicAudioLib.CriMw } } - throw new InvalidDataException("'@UTF' signature could not be found."); + throw new InvalidDataException("'@UTF' signature could not be found. Your file might be corrupted."); } public static void Mask(Stream source, Stream destination, long length, uint xor, uint xorMultiplier)