Fix UTF table decryptor

This commit is contained in:
Skyth 2018-01-16 08:29:02 +00:00
parent 72cc15b402
commit b31d8b6f3e
2 changed files with 31 additions and 27 deletions

View File

@ -1,29 +1,33 @@
# Sonic Audio Tools # Sonic Audio Tools
Tools for editing CriMw / CriWare file formats. (CSB / CPK / ACB / AWB) A set of tools to modify CRIWARE file formats.
## Releases
[On the AppVeyor page.](https://ci.appveyor.com/project/blueskythlikesclouds/sonicaudiotools/build/artifacts) # Releases
AppVeyor builds every commit automatically, so you can get the executables from the link above. 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) 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: 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` 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.) 2. Open the solution in Visual Studio. (Visual Studio 2017 or later is required.)
3. Install the missing NuGet packages. 3. Install the missing NuGet packages.
4. Build the solution. 4. Build the solution.
## Projects # Projects
To see more information about projects, visit the [wiki](https://github.com/blueskythlikesclouds/SonicAudioTools/wiki). If you wish to see more detailed information about the projects, visit the [wiki](https://github.com/blueskythlikesclouds/SonicAudioTools/wiki) page.
### [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.
## License ## [Sonic Audio Library](https://github.com/blueskythlikesclouds/SonicAudioTools/tree/master/Source/SonicAudioLib)
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. This is the main library of the solution. Contains classes for IO and file formats.
For more details, see [LICENSE](https://github.com/blueskythlikesclouds/SonicAudioTools/blob/master/LICENSE)
## [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.

View File

@ -1,4 +1,4 @@
using System; using System;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -65,13 +65,13 @@ namespace SonicAudioLib.CriMw
{ {
public static void FindKeys(byte[] signature, out uint xor, out uint xorMultiplier) 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 // 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 // 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 // Matched the second byte, now make sure the other bytes match as well
if ((signature[1] ^ (byte)(x * m)) == CriTableHeader.SignatureBytes[1]) if ((signature[1] ^ (byte)(x * m)) == CriTableHeader.SignatureBytes[1])
@ -81,7 +81,7 @@ namespace SonicAudioLib.CriMw
bool allMatches = true; bool allMatches = true;
for (int i = 2; i < 4; i++) for (int i = 2; i < 4; i++)
{ {
_x *= m; _x = (byte)(_x * m);
if ((signature[i] ^ _x) != CriTableHeader.SignatureBytes[i]) if ((signature[i] ^ _x) != CriTableHeader.SignatureBytes[i])
{ {
@ -93,8 +93,8 @@ namespace SonicAudioLib.CriMw
// All matches, return the xor and multiplier // All matches, return the xor and multiplier
if (allMatches) if (allMatches)
{ {
xor = x; xor = (uint)x;
xorMultiplier = m; xorMultiplier = (uint)m;
return; 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) public static void Mask(Stream source, Stream destination, long length, uint xor, uint xorMultiplier)