View previous topic :: View next topic |
Author |
Message |
thepoop555
Joined: 16 Sep 2007 Posts: 316 Location: Austin, TX
|
|
Back to top |
|
|
choseh
Joined: 29 Jul 2009 Posts: 8
|
Posted: Fri Jul 31, 2009 5:17 pm Post subject: |
|
|
gief! ;) |
|
Back to top |
|
|
thepoop555
Joined: 16 Sep 2007 Posts: 316 Location: Austin, TX
|
|
Back to top |
|
|
rob182
Joined: 05 May 2009 Posts: 5
|
Posted: Sat Aug 01, 2009 4:39 am Post subject: |
|
|
so hows the custom advancement by now? hope you can make it work soon you can do it man :P |
|
Back to top |
|
|
bnw33
Joined: 29 Mar 2008 Posts: 42
|
Posted: Sat Aug 01, 2009 4:40 am Post subject: |
|
|
There isn't really such thing as a multichannel mp3 file. It's just supposed to be stereo and mono. But the folks down at red octane decided to make their own. So we'll have to make our own way of interleaving the stereo mp3 streams into one mp3 file (that copies theirs).
Feel free to release the code thepoop, I'm kindof migrating towards the xbox side of ghwt customs. |
|
Back to top |
|
|
thepoop555
Joined: 16 Sep 2007 Posts: 316 Location: Austin, TX
|
Posted: Sun Aug 02, 2009 8:15 pm Post subject: |
|
|
Ok, I upload my decrpyter and encrypter.
INSTRUCTIONS:
You MUST extract your audio file's key of the song you want to replace, so that the decrypter can extract the key into a file.
1. Decrypt the a song's audio file no matter what.
2. Encrypt the audio file you want. It will look for filekey.bin to encrypt.
3. Replace that audio file for the song you decrypted.
4. IMPORTANT! DELETE THE FILEKEY.BIN. OTHERWISE YOU MAY ENCOUNTER PROBLEMS IN ECRYPTING IN THE FUTURE.
ENCRYPTER:
Code: | // xendecrypt.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "sys\stat.h"
#include "stdlib.h"
#include <cmath>
#define KEY_LEN 32
char SwapByteBits(unsigned char cInput)
{
unsigned char nResult=0;
for(int i=0; i<8; i++)
{
nResult = nResult <<1>> 1;
}
return (nResult);
}
/*
bool SearchKey(int pos, FILE * inFile, unsigned char* kBuffer)
{
fpos_t pos1;
fgetpos(inFile, &pos1);
//fsetpos(inFile, pos1);
fread(kBuffer, 4, 4, inFile);
return false;
}*/
int main(int argc, char* argv[])
{
int nError = 0;
struct _stat32 fileStat;
unsigned int nBufferSize = 0;
FILE* inFile = NULL;
FILE* outFile = NULL;
unsigned char* pBuffer;
unsigned char* kBuffer;
unsigned char* pInput;
//unsigned char* kInput;
unsigned int nLoopIdx = 0;
int platform = NULL;
//about a girl
//unsigned char fsbKey[4];
//unsigned char xorKey[4] = {'\x62', '\xCA', '\x42', '\x2C'};
unsigned char cpKey[32];/* =
{'\x48', '\x90', '\xE3', '\x01',
'\x47', '\x02', '\x88', '\x5F',
'\x3F', '\x04', '\x5B', '\x53',
'\xD0', '\xA0', '\xC4', '\xB4',
'\x5E', '\x30', '\xC1', '\x11',
'\x91', '\x59', '\x2C', '\x7E',
'\xFD', '\xFB', '\x4C', '\x7C',
'\x3A', '\xF9', '\x67'};
*/
//aggro
/*unsigned char cpKey[32] =
{'\xAD', '\x5B', '\x1D', '\x41',
'\x72', '\xA0', '\xE6', '\x41',
'\x43', '\xF5', '\xC8', '\x1D',
'\x03', '\xF5', '\x28', '\xDD',
'\x6E', '\x9B', '\x46', '\x01',
'\x1F', '\xCA', '\x5B', '\xCD',
'\xC1', '\x3D', '\xE0', '\xBB',
'\x99', '\xA6', '\x36'};
/*for(int i=0; i<KEY_LEN-1; i++)
{
cpKey[i] = (char)hexKey[i];
}*/
printf ("GHWT FSB Encryptor v1.0 by Invo -- Modified by bnw33, and then thepoop555\n");
printf ("--------------------------------\n");
printf ("\n");
// Check params
if (argc != 3)
{
printf ("Usage: %s <Input> <Output>\n"
"\n"
"\n", argv[0]);
return (1);
}
// if((argv[0][0] != '-') || (strlen(argv[0]) != 2)) {
// fprintf(stderr, "\nError: wrong command-line argument (%s)\n\n", argv[0]);}
// Get the file size
nError = _stat32(argv[1], &fileStat);
if (nError != 0)
{
printf ("Failed to get the input file size!\n");
return (1);
}
nBufferSize = fileStat.st_size;
// Allocate buffer
pBuffer = (unsigned char*)malloc(nBufferSize);
kBuffer = (unsigned char*)malloc(nBufferSize);
if (pBuffer == NULL)
{
printf ("Failed to allocate input buffer!\n");
return (1);
}
if (kBuffer == NULL)
{
printf ("Failed to allocate key buffer!\n");
return (1);
}
// Open and read the input
inFile = fopen(argv[1], "rb");
if (inFile == NULL)
{
printf ("Failed to open the input file!\n");
return (1);
}
//Since the key is different for every single .fsb file, and there is a padding of FFFF bytes (hopefully)
//at the end... The Preview files seem to not contain this structure...
printf ("Reading key... ");
FILE* KeyFile = fopen("filekey.bin", "rb");
fread(cpKey, 1, 31, KeyFile);
// fseek(inFile, 0, SEEK_SET);
printf ("Done!\n");
//Search through file for key...
/*
printf ("Reading Key... ");
fread(kBuffer, 1, nBufferSize, inFile);
fclose(inFile);
kInput = kBuffer;
for (int kLoopIdx=0; kLoopIdx<4; kLoopIdx++)
{
fsbKey[kLoopIdx] = *kInput ^ xorKey[kLoopIdx];
}
int i = 0;
for (int kLoopIdx=4; kLoopIdx<nBufferSize; kLoopIdx++)
{
if (SearchKey(kLoopIdx, inFile, kBuffer))
{
break;
}
}*/
printf ("Reading file (%d Bytes)... ", nBufferSize);
fread(pBuffer, 1, nBufferSize, inFile);
fclose(inFile);
printf ("Done!\n");
// Encrypt
printf ("Encrypting... ");
pInput = pBuffer;
for (int nLoopIdx=0; nLoopIdx<nBufferSize; nLoopIdx++)
{
//*pInput = SwapByteBits(*pInput ^ cpKey[nLoopIdx % (KEY_LEN-1)]);
*pInput = SwapByteBits(*pInput) ^ cpKey[nLoopIdx % (KEY_LEN-1)];
pInput++;
}
printf ("Done!\n");
// Open and write the output
outFile = fopen(argv[2], "wb");
if (outFile == NULL)
{
printf ("Failed to open the output file!\n");
return (1);
}
printf ("Writing file... ");
fwrite(pBuffer, 1, nBufferSize, outFile);
fclose (outFile);
printf ("Done!\n");
// The end...
return (0);
} |
DECRYPTER:
Code: | // xendecrypt.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "sys\stat.h"
#include "stdlib.h"
#include <cmath>
#define KEY_LEN 32
char SwapByteBits(unsigned char cInput)
{
unsigned char nResult=0;
for(int i=0; i<8; i++)
{
nResult = nResult <<1>> 1;
}
return (nResult);
}
/*
bool SearchKey(int pos, FILE * inFile, unsigned char* kBuffer)
{
fpos_t pos1;
fgetpos(inFile, &pos1);
//fsetpos(inFile, pos1);
fread(kBuffer, 4, 4, inFile);
return false;
}*/
int main(int argc, char* argv[])
{
int nError = 0;
struct _stat32 fileStat;
unsigned int nBufferSize = 0;
FILE* inFile = NULL;
FILE* outFile = NULL;
unsigned char* pBuffer;
unsigned char* kBuffer;
unsigned char* pInput;
//unsigned char* kInput;
unsigned int nLoopIdx = 0;
int platform = NULL;
//about a girl
//unsigned char fsbKey[4];
//unsigned char xorKey[4] = {'\x62', '\xCA', '\x42', '\x2C'};
unsigned char cpKey[32];/* =
{'\x48', '\x90', '\xE3', '\x01',
'\x47', '\x02', '\x88', '\x5F',
'\x3F', '\x04', '\x5B', '\x53',
'\xD0', '\xA0', '\xC4', '\xB4',
'\x5E', '\x30', '\xC1', '\x11',
'\x91', '\x59', '\x2C', '\x7E',
'\xFD', '\xFB', '\x4C', '\x7C',
'\x3A', '\xF9', '\x67'};
*/
//aggro
/*unsigned char cpKey[32] =
{'\xAD', '\x5B', '\x1D', '\x41',
'\x72', '\xA0', '\xE6', '\x41',
'\x43', '\xF5', '\xC8', '\x1D',
'\x03', '\xF5', '\x28', '\xDD',
'\x6E', '\x9B', '\x46', '\x01',
'\x1F', '\xCA', '\x5B', '\xCD',
'\xC1', '\x3D', '\xE0', '\xBB',
'\x99', '\xA6', '\x36'};
/*for(int i=0; i<KEY_LEN-1; i++)
{
cpKey[i] = (char)hexKey[i];
}*/
printf ("GHWT FSB Decryptor v1.0 by Invo -- Modified by bnw33, and then ny thepoop555\n");
printf ("--------------------------------\n");
printf ("\n");
// Check params
if (argc != 4)
{
printf ("Usage: %s [options] <Input> <Output>\n"
"\n"
"-p GHWT PC fsb.xen\n"
"-x GHWT XBOX 360 fsb.xen\n"
"\n", argv[0]);
return (1);
}
// if((argv[0][0] != '-') || (strlen(argv[0]) != 2)) {
// fprintf(stderr, "\nError: wrong command-line argument (%s)\n\n", argv[0]);}
switch(argv[1][1]) {
case 'p': platform = 0; break;
case 'x': platform = 1; break;
default: {
fprintf(stderr, "\nError: wrong command-line argument (%s)\n\n", argv[0]);
exit(1);
}
}
// Get the file size
nError = _stat32(argv[2], &fileStat);
if (nError != 0)
{
printf ("Failed to get the input file size!\n");
return (1);
}
nBufferSize = fileStat.st_size;
// Allocate buffer
pBuffer = (unsigned char*)malloc(nBufferSize);
kBuffer = (unsigned char*)malloc(nBufferSize);
if (pBuffer == NULL)
{
printf ("Failed to allocate input buffer!\n");
return (1);
}
if (kBuffer == NULL)
{
printf ("Failed to allocate key buffer!\n");
return (1);
}
// Open and read the input
inFile = fopen(argv[2], "rb");
if (inFile == NULL)
{
printf ("Failed to open the input file!\n");
return (1);
}
//Since the key is different for every single .fsb file, and there is a padding of FFFF bytes (hopefully)
//at the end... The Preview files seem to not contain this structure...
printf ("Reading key... ");
double keyed = (nBufferSize-1)/31;
keyed = floor(keyed); //round it
keyed--;
keyed = keyed*31;
keyed = (long) keyed;
fseek(inFile, keyed, SEEK_SET); //fseek doesnot work... now it does.. haha.
fread(kBuffer, 1, 31, inFile);
//fclose(inFile);
fseek(inFile, 0, SEEK_SET);
for (int i=0; i<31; i++)
{
if (platform == 0)
{
cpKey[i] = *kBuffer;//^'\xFF';
}
if (platform == 1)
{
cpKey[i] = *kBuffer^'\xFF';
}
kBuffer++;
}
// fseek(inFile, 0, SEEK_SET);
printf ("Done!\n");
printf ("Dumping Key...");
FILE* KeyFile = fopen("key.bin", "wb");
fwrite(cpKey, 1, 31, KeyFile);
printf("Done!\n");
//Search through file for key...
/*
printf ("Reading Key... ");
fread(kBuffer, 1, nBufferSize, inFile);
fclose(inFile);
kInput = kBuffer;
for (int kLoopIdx=0; kLoopIdx<4; kLoopIdx++)
{
fsbKey[kLoopIdx] = *kInput ^ xorKey[kLoopIdx];
}
int i = 0;
for (int kLoopIdx=4; kLoopIdx<nBufferSize; kLoopIdx++)
{
if (SearchKey(kLoopIdx, inFile, kBuffer))
{
break;
}
}*/
printf ("Reading file (%d Bytes)... ", nBufferSize);
fread(pBuffer, 1, nBufferSize, inFile);
fclose(inFile);
printf ("Done!\n");
// Decrypt
printf ("Decrypting... ");
pInput = pBuffer;
for (int nLoopIdx=0; nLoopIdx<nBufferSize; nLoopIdx++)
{
//*pInput = SwapByteBits(*pInput ^ cpKey[nLoopIdx % (KEY_LEN-1)]);
*pInput = SwapByteBits(*pInput ^ cpKey[nLoopIdx % (KEY_LEN-1)]);
pInput++;
}
printf ("Done!\n");
// Open and write the output
outFile = fopen(argv[3], "wb");
if (outFile == NULL)
{
printf ("Failed to open the output file!\n");
return (1);
}
printf ("Writing file... ");
fwrite(pBuffer, 1, nBufferSize, outFile);
fclose (outFile);
printf ("Done!\n");
// The end...
return (0);
} |
_________________
SUPPORT GH: AVENGED SEVENFOLD
Arandomguy1 on YouTube
TrevorTheGreat wrote: | Oh my god I've never seen a bunch of bitching children like this before.
OMG I got perma-rockered! /world
So fucking what. Play your plastic guitar and get over it. |
Last edited by thepoop555 on Fri Sep 11, 2009 2:37 am; edited 1 time in total |
|
Back to top |
|
|
thepoop555
Joined: 16 Sep 2007 Posts: 316 Location: Austin, TX
|
|
Back to top |
|
|
choseh
Joined: 29 Jul 2009 Posts: 8
|
Posted: Mon Aug 03, 2009 7:12 am Post subject: |
|
|
uhm looks like the new decrypter breaks the files for fsbext ;) |
|
Back to top |
|
|
thepoop555
Joined: 16 Sep 2007 Posts: 316 Location: Austin, TX
|
Posted: Mon Aug 03, 2009 7:48 am Post subject: |
|
|
That's the source code from the original decrypter. I have made no changes on how it finds the filekey. So it probably is still buggy. If you really want to use the encrypter, and it doesn't like your file, take an encrypted file from the game and look for either a 31 byte reoccuring pattern or a 10 byte or just any reoccuring byte pattern and then copy that to a blank file and name it filekey.bin. _________________
SUPPORT GH: AVENGED SEVENFOLD
Arandomguy1 on YouTube
TrevorTheGreat wrote: | Oh my god I've never seen a bunch of bitching children like this before.
OMG I got perma-rockered! /world
So fucking what. Play your plastic guitar and get over it. |
|
|
Back to top |
|
|
Kielidge
Joined: 08 Aug 2008 Posts: 6
|
Posted: Mon Aug 03, 2009 9:29 pm Post subject: |
|
|
Nice work! Have you had any luck making the "multichannel" MP3's?
Also, I've been playing around with the mid file sections and found that I am able to edit notes, but if I add an extra note, or take one away, the song fails to load, not sure why that is. I'll post again if I find anything extra... |
|
Back to top |
|
|
dogg21
Joined: 02 Jan 2008 Posts: 31
|
Posted: Wed Aug 05, 2009 9:51 pm Post subject: |
|
|
I compared the mid.qbs from pc and ps2 and they seem to be the same only different endianness.
GH3 ps2 was little endian
and
GH3 pc was big endian
I think that this is the case with these, GZ added support for big endian on qb2chart 0.3.
Qb2chart doesn't output ps2 ghwt mids correctly, but maybe it can be modified to work with both.
edit: i was able to use qb2chart with the pc mid.qbs, but the resulting chart had the exact same errors as the ps2 mid.qbs
Any help on this?
To get the mid.qbs just use unpak.exe on the *_song.pak.xen
or use nanooks new and improved queenbee v1.7 |
|
Back to top |
|
|
dogg21
Joined: 02 Jan 2008 Posts: 31
|
Posted: Fri Aug 07, 2009 7:05 pm Post subject: |
|
|
somebody try this
open one of the pak.xens in queenbee, extract the mid.qb
open a diffenrent pak.xen in queenbee, now replace that mid.qb with the one from the 1st pak.
Does it crash?
there might be a toc check. ps2 had a file fif that was used for this.
hey kielidge
Quote: | I've been playing around with the mid file sections and found that I am able to edit notes, but if I add an extra note, or take one away, the song fails to load, not sure why that is |
How did you change only one note, how were you editing them? |
|
Back to top |
|
|
Kielidge
Joined: 08 Aug 2008 Posts: 6
|
Posted: Fri Aug 07, 2009 11:09 pm Post subject: |
|
|
dogg21 wrote: | somebody try this
open one of the pak.xens in queenbee, extract the mid.qb
open a diffenrent pak.xen in queenbee, now replace that mid.qb with the one from the 1st pak.
Does it crash?
there might be a toc check. ps2 had a file fif that was used for this.
hey kielidge
Quote: | I've been playing around with the mid file sections and found that I am able to edit notes, but if I add an extra note, or take one away, the song fails to load, not sure why that is |
How did you change only one note, how were you editing them? |
Unfortunately yes, that does crash it. What is a toc check? I've not heard that term before.
I edited a note by splitting up the mid file (using one of the early GH3 mid splitters) then hex editing the songname_song_expert file. I used GameZelda's mid.qb specs to look for the part to edit. |
|
Back to top |
|
|
dogg21
Joined: 02 Jan 2008 Posts: 31
|
|
Back to top |
|
|
flasklax
Joined: 11 Jan 2008 Posts: 6
|
Posted: Mon Aug 10, 2009 8:11 pm Post subject: |
|
|
The DLC-files aren't encrypted btw, they're FSB4-files. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Copyright © 2006-2024 ScoreHero, LLC
|
Powered by phpBB
|