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
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.

View File

@ -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)