Sponsored Links

Sponsored Links

PS3UserCheat PS3 Cheat Dongle Hacked by Oct0xor and Flat_z


Sponsored Links
110w ago - Following up on their previous progress updates, today the PS3UserCheat PS3 Cheat USB dongle has been hacked for use on PS3 Custom Firmware (CFW) without a dongle by Oct0xor (aka Mr. DongleBreaker) and Flat_z.

Download: [Register or Login to view links] / [Register or Login to view links] (Mirror)

Below are some excerpts from his Twitter (linked above), as follows:

Release: ps3usercheat dongle pwned!

I am not a lone wolf and say thanks to all who helps me anyhow with this: @flat_z. <3

Also thanks to Baphometh from psjailbreak.ru who donated dongle to me. Btw its first dongle hacked since original psjailbreak.. all features are available. 1/3... Who's next ?

This also does screenshots in all games. I had patch all by hand, binary. Btw the latest 6.0 cheatlist will be later, when I get some free time.

Notes:

PS3UserCheat doesn't currently work on TB or Cobra CFW (kicks you back to the PS3 XMB), possibly because it may use peek & poke (speculation at the moment).

Also God of War 3 (BCUS98111) PS3 freezes / locks up the PS3 console when using previous game saves so a new save is required for use with cheats.

To change the title ID you simply need to load the PARAM.SFO in PS3SFOEdit and modify it with another title ID, so you have to use only the real title ID for the game (US, EUR, etc.).

For example in GOW3 (BCUS98111) you don't have the choice to change in-game language for the subtitles, or audio. But when you change the title ID to BCES00510 (EUR version) the menu appears in the options. Don't forget to make backups of your files before you modify them!

Finally, below is a brief PS3UserCheat Tutorial from jakenastysnake (via psx-scene.com/forums/f224/ps3usercheat-103959/#post978858):

STEP 1: You will need to download the PS3usercheat PKG file. Hopefully this part is self explanatory, but if not, then continue on...

Unzip the file and put the .pkg file on the root of a USB drive (The package should be named UP0001-CHET11111_00-0000111122223333.pkg)

STEP 2: Insert your USB drive into the PS3 and find the "Install Package" option under the Game column in the XMB. Install the package. After the package has been installed, the PS3usercheat icon should be visible under Game.

This is a good time to insert your PS3 game disc and load up a game from Multiman or whatever you use for a backup manager. Be sure to make note of the game ID before loading it up... you WILL need it.

STEP 3: Run PS3usercheat (or CU or Code Unique... whatever you wanna call it) and locate your game in the list. It is VERY important that your game ID's match up or this will not work properly. When you find your game, press Circle to view the available cheats. Again, you MUST press Circle to select the cheats that you want. After selecting your cheats, press Start.

STEP 4: You should be back at the XMB now.

*Note - I noticed that if you try loading your game through the */app_home/PS3_GAME/ option, the cheats might not work and when you quit the game, the cheats will be reset (Ex: God of War III on Rebug 3.55.2). That being the case, I would run the game from the disc icon instead.

Run the game from the disc icon and wait for it to load. Test the cheats out and if they work, great! If not, double check your game ID. Also, BE SURE you run the game from the disc icon instead of */app_home/PS3_GAME/







Stay tuned for more PS3 Hacks and PS3 CFW news, follow us on Twitter and be sure to drop by the PS3 Hacks and PS3 Custom Firmware Forums for the latest PlayStation 3 scene updates and homebrew releases!

Comments 90 Comments - Go to Forum Thread »

• Please Register at PS3News.com or Login to make comments on Site News articles. Thanks!

boxbundy's Avatar
#55 - boxbundy - 84w ago
sorry for dumb questions. what do you use this for? how do we use/enter cheats for games. I have zero experience with this on PS3 can we enter cheats from ps3usercheat by using hex editing? or any other way? (I don't have a dongle)

please can someone give me some detailed advice because I haven't seen much clear detailed info on this that I can actually understand
how are you all doing this exactly? please enlighten me I'm using rebug 4.21

BerserkLeon's Avatar
#54 - BerserkLeon - 84w ago
Can anyone able to communicate with the devs ask them if they could include multicore support for bruteforcing? I've got a fairly crappy quad core and each core can't do much on its own, but pfdtool seems to be locked to a single core.

Either that, or CUDA/OpenCL. one or both of those options should really speed up the bruteforcing.

Update: From : I suppose I sort of used the wrong term when I said this code could be optimized, to be honest, since it is working with byte arrays, you cannot really get more speed out of it unless you are constantly reading/writing large sections of bytes (which if you are, feel free to hit me up for some optimization tips on your current code). However, like I said previously, the code could be shrunk way down to a few functions and I only wrote it the way I did for people to easily learn from. Here is all the above code complete in a few functions:

VB.NET Code

C# Code
Add to a class:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;

static class clsGlobal
{
//**************************************************************************************************************************'
//* GLOBAL KEYS *'
//**************************************************************************************************************************'
public static byte[] SYSCON_MANAGER_KEY = new byte[] {
0xd4,
0x13,
0xb8,
0x96,
0x63,
0xe1,
0xfe,
0x9f,
0x75,
0x14,
0x3d,
0x3b,
0xb4,
0x56,
0x52,
0x74
};
//**************************************************************************************************************************'
//* GLOBAL HEADER TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct PFD_HEADER_SECTION
{
public const int MAGIC_OFFSET = 0x0;
public const int VERSION_OFFSET = 0x8;
public const int IV_OFFSET = 0x10;
public const int SIGNATURE_OFFSET = 0x20;
public const int TOP_HASH_OFFSET = 0x0;
public const int BOTTOM_HASH_OFFSET = 0x14;
}
public struct PFD_HEADER_SECTION_SIZE
{
public const int MAGIC_SIZE = 8;
public const int VERSION_SIZE = 8;
public const int IV_SIZE = 16;
public const int SIGNATURE_SIZE = 64;
public const int HASH_SIZE = 20;
}
public struct PFD_HEADER
{
public const int OFFSET = 0x0;
public const int SIZE = 96;
}
//**************************************************************************************************************************'
//* GLOBAL HASH TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct HASH_TABLE
{
public const int OFFSET = 0x60;
public const int SIZE = 456;
public const int MAX_ENTRIES = 57;
public const int HEADER_OFFSET = 0x60;
public const int HEADER_SIZE = 24;
public const int ENTRY_OFFSET = 0x78;
public const int ENTRY_SIZE = 8;
}
//**************************************************************************************************************************'
//* GLOBAL PROTECTED FILES TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct PF_TABLE_SECTION
{
public const int INDEX = 0;
public const int NAME = 8;
public const int GARBAGE = 73;
public const int DATA = 80;
public const int ENTRY_KEY = 80;
public const int HASHES = 144;
public const int HASH1 = 144;
public const int HASH2 = 164;
public const int HASH3 = 184;
public const int HASH4 = 204;
public const int PADDING = 224;
public const int FILE_SIZE = 264;
}
public struct PF_TABLE_SECTION_SIZE
{
public const int INDEX = 8;
public const int NAME = 65;
public const int GARBAGE = 7;
public const int DATA = 192;
public const int ENTRY_KEY = 64;
public const int HASHES = 80;
public const int HASH = 20;
public const int PADDING = 40;
public const int FILE_SIZE = 8;
}
public struct PF_TABLE
{
public const int OFFSET = 0x240;
public const int SIZE = 31008;
public const int MAX_ENTRIES = 113;
public const int ENTRY_SIZE = 272;
}
//**************************************************************************************************************************'
//* GLOBAL Y TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct Y_TABLE
{
public const int MAX_ENTRIES = 56;
public const int OFFSET = 0x7b60;
public const int SIZE = 1140;
public const int ENTRY_SIZE = 20;
}
//**************************************************************************************************************************'
//* GLOBAL PADDING VARIABLES *'
//**************************************************************************************************************************'
public struct BOTTOM_PADDING
{
public const int OFFSET = 0x7fd4;
public const int SIZE = 44;
}
}

Add to a class:

using System;
using System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using glb = clsGlobal;

static class clsClasses
{
//***************************************************************************************************************'
//* OPEN FILE DIALOG BOX : RETURNS A STRING *'
//***************************************************************************************************************'
public static string File_Dialog(string sTitle, string sFilter, string sFileName)
{
OpenFileDialog OFD = new OpenFileDialog();

String retval = string.Empty;

OFD.Filter = sFilter;
OFD.InitialDirectory = Application.ExecutablePath;
OFD.Title = sTitle;
OFD.Filter = sFilter;
OFD.FileName = sFileName;

if (OFD.ShowDialog() == DialogResult.OK)
{
retval = OFD.FileName;
}
if (retval == String.Empty)
{
return string.Empty;
}
else
{
return retval;
}
}
//**************************************************************************************************************************'
//* AES DECRYPTION FUNCTION *'
//**************************************************************************************************************************'
public static byte[] AES_Decrypt(byte[] bytes, int block_size, int key_size, byte[] aes_iv, byte[] aes_key)
{
//--------------------------------------------------------------------------------------------------------------------------'
// AES Crypto Service Provider
//--------------------------------------------------------------------------------------------------------------------------'
AesCryptoServiceProvider AES = new AesCryptoServiceProvider();
//--------------------------------------------------------------------------------------------------------------------------'
// AES Crypto Service Provider parameters
//--------------------------------------------------------------------------------------------------------------------------'
AES.BlockSize = block_size;
AES.KeySize = key_size;
AES.IV = aes_iv;
AES.Key = aes_key;
AES.Mode = CipherMode.CBC;
AES.Padding = PaddingMode.None;
//--------------------------------------------------------------------------------------------------------------------------'
// Decrypt the bytes : AES 128 CBC mode
//--------------------------------------------------------------------------------------------------------------------------'
using (ICryptoTransform AES_Dec = AES.CreateDecryptor()) {
byte[] dec_bytes = AES_Dec.TransformFinalBlock(bytes, 0, bytes.Length);
//--------------------------------------------------------------------------------------------------------------------------'
// Return the byte array of decrypted bytes
//--------------------------------------------------------------------------------------------------------------------------'
return dec_bytes;
}
}
//***************************************************************************************************************'
//* CONVERT A BYTE ARRAY TO A HEXADECIMAL STRING *'
//***************************************************************************************************************'
public static string ByteArray_To_Hex(byte[] bytes, string separator = null)
{
string retval = string.Empty;
StringBuilder strHex = new StringBuilder(bytes.Length * 2);

foreach (byte b in bytes) {
strHex.Append((b.ToString("X2")) + separator);
}

retval = strHex.ToString().ToUpper();

return retval.Trim();
}

//**************************************************************************************************************************'
//* READ DATA FROM HASH TABLE :: OUTPUT = LIST OF BYTE ARRAYS *'
//**************************************************************************************************************************'
public static List Read_Hash_Table(string pfd_file, int start_offset, int section_size)
{
List output_bytes = new List();
long curr_offset = start_offset;

for (int i = 0; i

PS3 News's Avatar
#53 - PS3 News - 84w ago
Following up on his previous update, today PlayStation 3 developer Flat_z has updated the PS3 Save Game Tools Pack to include SFOPatcher v0.2.0 and PFDTool version 0.2.3 alongside an update to the BruteforceSaveData GUI by aldostools below.

Download: [Register or Login to view links] / [Register or Login to view links] / [Register or Login to view links]

From Flat_z: Some people asked me about the source code of pfd & sfo tools.. here they are (linked above).

Guys, here is an update of my tools. It contains an update to sfopatcher (see the changelog below) and a small update to pfdtool. Previously you should make a save game for your game on your console and then use PARAM.SFO from it as a template to PARAM.SFO from a foreign save game to build a new PARAM.SFO which will contain the data specific to your console. A newer version of sfopatcher will use a foreign save data directory and params only if you specify these options.

From aldostools: A new version of the frontend is available with the updated tools from flatz and new settings to take advantage of these features.

Changes: new "Rebuild" option, new "Restore" option, updated the database with secure_file_id for more than 750 games (over 3140 title ids). Added a new "date" column. Special thanks to flatz, Alex at CMP, acab, skillerCMP, gingerbread and many others

Changelog:

pfdtool 0.2.3

  • Added an option to specify the relative offset to advance each time while bruteforcing a secure file ID.

Below is a guide from zorrolaro on how to use PFDTool without PS3 CFW using Borderlands 2 as an example:

Required Tools:


Guide:

  • Create a folder near your root drive for pfdtool (i.e. c:/pfdtool/), then extract all files into that folder from the linked archive.
  • Download and install wireshark and winPcap (included with the wireshark installer)
  • Download and install the .net runtimes
  • Download and install PS3 ProxyServer
  • Open a command prompt (start menu -> all programs -> accessories -> command prompt) and enter command "ipconfig". Write down the IPv4 address (should look like 192.168.0.10 or something similar)
  • Open PS3 ProxyServer and copy the IPv4 address you wrote down into the IP Address field and check of PS3 mode, leave the other options alone. Hit the big start button. Keep you IPv4 number handy, you'll need it again. Leave this program running.
  • Open Wireshark. On the left side there is an option to start capture. Left click with your mouse to select the appropriate network adapter listed below the start command. If you are not sure about which adapter to use, select them all using ctrl + left mouse click. Hit the start button once you've highlighted the appropriate adapters. Leave this program running.
  • Boot up your PS3 and navigate to Settings -> Network Settings -> Internet Connection Settings. on the first page select Custom, on the second select whether you are connected wirelessly or wired. Skip all other options by hitting right on your controller until you get to the Proxy Server page, then select use for that option. input the IPv4 address you wrote down earlier into the top field.

    Make sure that the port number on this page matches the port number on PS3 ProxyServer (should both say 8080). Skip to the last page on the configuration and hit x. Test connection when prompted by hitting x again. As long as the top 3 fields say succeeded you can carry on to the next step. if not, review your settings in this step and steps 5 and 6 and retry.
  • Sign into the playstation network and login to the psn store.
  • Go back to your pc and check Wireshark. There should be a whole bunch of information displayed on the screen, don't worry you don't need to know what it means. Press [ctrl]+ e to stop capturing, then press [ctrl]+f to bring up your search dialogue. Under "find" check of "string" and under "Search In" check off "Packet bytes". Enter 0000000100 as your search criteria and hit enter. If the necessary packet was found, in the bottom frame it should show the number highlighted on the right side (plaintext view) to ensure you have the right packet, right before the highlighted text it should say "devideID":" and then the numbers you searched for.

    Take all the numbers and letters starting with your highlighted numbers and copy everything down until you find the next quotation mark in the plaintext. You should have a total of 32 digits written down. Should look something like 000000010084 followed by a bunch of letters and numbers. This is your console id.
  • Go to the folder you installed pfdtool in. Open global.conf in notepad. Eidt the line where it says console_id=by adding the console id you just captured after the =. Also change the other fields that are bolded below to match

  • Save file and exit (make sure you save as .conf not .txt)
  • Open the games.conf file in the same folder. Edit it as follows for NA retail disc version only. You'll have a different game id (the BLUS30982) and secure_file_id. You'll need to ask for someone on the forums to get those for you if you are using a different region, version or entirely differnt game. You can add additional games follwing the same layout by adding more lines. The disc_hash_key is commented out, so you will get a notifaction everytime you use pfdtool, but it still works fine.

  • Save and close the file once you are done adding games. Again make sure you save as .conf, not .txt.
  • Make sure you have a copy of your save game on your pc. I like to copy them right into the same folder as pfdtool to make for shorter commands.
  • You are now ready to actually use pfdtool. Navigate your command prompt to the folder you installed it (command to use is simply the path of the folder, ie "c:/pfdtool"). To decrypt we use the following command:

  • Where the part in quotations will be changed to reflect your actual drive location and the name of the file will be changed to your actual file name. The file name and path are case sensitive, make sure you double check you have the right case.
  • You now have a decrypted save file. Use your hex editor of choice or in the case of Borderlands 2 you can use the latest version of Gibbed's Borderlands 2 Save Editor. Once you are done editing, sae your game again and onto the last step.
  • All that's left at this point is to encrypt the file again. See below, same notes as when decrypting about file path and name.

  • You can now transfer your save game back to your PS3.

A couple of quick notes: I have tried to make this as noob friendly as possible, but you still need some basic knowledge to follow this guide. Also, atm I really have no interest in modding any other save games so I do not have the info for other games to place in your games.conf file, though if anyone wants to post them I will be happy to add them to the guide. I did not write nor do I support any of the software mentioned in this guide.

Unfortunately we can't extract it from .PFD because IDPS is not stored there. They used it as a HMAC key to hash the content of PARAM.SFO.

I already said many times that some hashes are not checked. That's why Xploder works fine without your console ID. But my goal was the correct generation of the PFD (because S0ny can add new checks in the future) and I had managed to use all keys but you can omit some of them (based on your console id or disc hash key, for example).

From cheetahh: I can confirm that flat_z tool can be used to decrypt TROPTRANS.DAT file and if you know how to modify all the files correctly (there are different checksums and hashes in the files) you can sync those unlocked trophies to PSN as well.

From Sunny992: All information should be free, don't conceal it if it's already leaked, which it was.

It was leaked on NGU.

Finally, from comes a VB.NET/C# PARAM.PFD Code Snippet below, as follows:

Figured I would share this as it is a starting point to anyone who wants to work with PARAM.PFD files within VB.NET/C#. Use it, change it, do what you want with it. I used a code converter to avoid rewriting everything between the 2 languages, and then went through and fixed what broke during the conversion.

The code could be optimized... Most of the classes/functions could easily be combined down to just a few classes/functions, and global variables should be avoided when possible other than for this demonstration. The reason it is the way it is now is so that it is easier to see what is going on. If anyone actually uses this, and wants an optimized set of functions or classes just ask.

With that said, all that is needed is a decryption/encryption (AES 128 CTR Mode) function/class for save files and you can be on your way to making your own cheat editor without the need of bundling in flatz pfdtools.

VB.NET Code

C# Code
Add to a class:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;

public class clsGlobal
{
//**************************************************************************************************************************'
//* GLOBAL KEYS *'
//**************************************************************************************************************************'
public static byte[] SYSCON_MANAGER_KEY = new byte[] {
0xd4,
0x13,
0xb8,
0x96,
0x63,
0xe1,
0xfe,
0x9f,
0x75,
0x14,
0x3d,
0x3b,
0xb4,
0x56,
0x52,
0x74

};
//**************************************************************************************************************************'
//* GLOBAL HEADER TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct PFD_HEADER
{
public const int OFFSET = 0x0;
public const int SIZE = 96;
public const int MAGIC_OFFSET = 0x0;
public const int MAGIC_SIZE = 8;
public const int VERSION_OFFSET = 0x8;
public const int VERSION_SIZE = 8;
public const int IV_OFFSET = 0x10;
public const int IV_SIZE = 16;
public const int SIGNATURE_OFFSET = 0x20;
public const int SIGNATURE_SIZE = 64;
public const int TOP_HASH_OFFSET = 0x0;
public const int TOP_HASH_SIZE = 20;
public const int BOTTOM_HASH_OFFSET = 0x14;
public const int BOTTOM_HASH_SIZE = 20;
}
public static byte[] PFD_HEADER_TABLE = new byte[PFD_HEADER.SIGNATURE_SIZE + 1];
public static byte[] PFD_HEADER_MAGIC = new byte[PFD_HEADER.MAGIC_SIZE + 1];
public static byte[] PFD_HEADER_VERSION = new byte[PFD_HEADER.VERSION_SIZE + 1];
public static byte[] PFD_HEADER_TABLE_IV = new byte[PFD_HEADER.IV_SIZE + 1];
public static byte[] PFD_HEADER_SIGNATURE = new byte[PFD_HEADER.SIGNATURE_SIZE + 1];
public static byte[] PFD_HEADER_DECRYPTED = new byte[PFD_HEADER.SIGNATURE_SIZE + 1];
public static byte[] PFD_HEADER_DECRYPTED_TOP_HASH = new byte[PFD_HEADER.TOP_HASH_SIZE + 1];
public static byte[] PFD_HEADER_DECRYPTED_BOTTOM_HASH = new byte[PFD_HEADER.BOTTOM_HASH_SIZE + 1];
//**************************************************************************************************************************'
//* GLOBAL HASH TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct HASH_TABLE
{
public const int MAX_ENTRIES = 57;
public const int HEADER_OFFSET = 0x60;
public const int HEADER_SIZE = 24;
public const int OFFSET = 0x78;
public const int SIZE = 456;
public const int TABLE_ENTRY_SIZE = 8;
}
public static byte[] PFD_HASH_TABLE_HEADER = new byte[HASH_TABLE.HEADER_SIZE + 1];
public static byte[] PFD_HASH_TABLE = new byte[HASH_TABLE.SIZE + 1];
public static byte[] PFD_HASH_TABLE_ALL_ENTRIES = new byte[HASH_TABLE.SIZE / HASH_TABLE.TABLE_ENTRY_SIZE + 1];
//**************************************************************************************************************************'
//* GLOBAL PROTECTED FILES TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct PF_TABLE
{
public const int OFFSET = 0x240;
public const int SIZE = 31008;
public const int ENTRY_SIZE = 272;
public const int ENTRY_INDEX_SIZE = 8;
public const int ENTRY_NAME_SKIP_BYTES = 8;
public const int ENTRY_NAME_SIZE = 65;
public const int ENTRY_GARBAGE_SKIP_BYTES = 73;
public const int ENTRY_GARBAGE_SIZE = 7;
public const int ENTRY_DATA_SKIP_BYTES = 80;
public const int ENTRY_DATA_SIZE = 192;
public const int ENTRY_KEY_SKIP_BYTES = 80;
public const int ENTRY_KEY_SIZE = 64;
public const int ENTRY_HASHES_SKIP_BYTES = 144;
public const int ENTRY_HASHES_SIZE = 80;
public const int ENTRY_HASH1_SKIP_BYTES = 144;
public const int ENTRY_HASH_SIZE = 20;
public const int ENTRY_HASH2_SKIP_BYTES = 164;
public const int ENTRY_HASH3_SKIP_BYTES = 184;
public const int ENTRY_HASH4_SKIP_BYTES = 204;
public const int ENTRY_PADDING_SKIP_BYTES = 224;
public const int ENTRY_PADDING_SIZE = 40;
public const int ENTRY_FILESIZE_SKIP_BYTES = 264;
public const int ENTRY_FILESIZE_SIZE = 8;
}
public static byte[] PFD_PROTECTED_FILES_TABLE = new byte[PF_TABLE.SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY = new byte[PF_TABLE.ENTRY_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ALL_ENTRIES = new byte[PF_TABLE.SIZE / PF_TABLE.ENTRY_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_INDEX = new byte[PF_TABLE.ENTRY_INDEX_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_NAME = new byte[PF_TABLE.ENTRY_NAME_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_GARBAGE = new byte[PF_TABLE.ENTRY_GARBAGE_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_DATA = new byte[PF_TABLE.ENTRY_DATA_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_KEY = new byte[PF_TABLE.ENTRY_KEY_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_HASHES = new byte[PF_TABLE.ENTRY_HASHES_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_HASH1 = new byte[PF_TABLE.ENTRY_HASH_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_HASH2 = new byte[PF_TABLE.ENTRY_HASH_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_HASH3 = new byte[PF_TABLE.ENTRY_HASH_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_HASH4 = new byte[PF_TABLE.ENTRY_HASH_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_PADDING = new byte[PF_TABLE.ENTRY_PADDING_SIZE + 1];
public static byte[] PFD_PROTECTED_FILES_TABLE_ENTRY_FILESIZE = new byte[PF_TABLE.ENTRY_FILESIZE_SIZE + 1];
//**************************************************************************************************************************'
//* GLOBAL Y TABLE VARIABLES *'
//**************************************************************************************************************************'
public struct Y_TABLE
{
public const int MAX_ENTRIES = 57;
public const int OFFSET = 0x7b60;
public const int SIZE = 1140;
public const int TABLE_ENTRY_SIZE = 20;
}
public static byte[] PFD_Y_TABLE = new byte[Y_TABLE.SIZE + 1];
public static byte[] PFD_Y_ALL_ENTRIES = new byte[Y_TABLE.SIZE / Y_TABLE.TABLE_ENTRY_SIZE + 1];
//**************************************************************************************************************************'
//* GLOBAL PADDING VARIABLES *'
//**************************************************************************************************************************'
public struct BOTTOM_PADDING
{
public const int OFFSET = 0x7fd4;
public const int SIZE = 44;
}
public static byte[] PFD_BOTTOM_PADDING = new byte[BOTTOM_PADDING.SIZE + 1];
}

Add to a class:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using glb = clsGlobal;

public class clsPFDTables
{
//**************************************************************************************************************************'
//* READ THE TOP HASH FROM DECRYPTED HEADER IN AN ARRAY *'
//**************************************************************************************************************************'
public static byte[] Read_Decrypted_Header_Top_Hash(byte[] decrypted_header_array, int offset)
{

byte[] output_array = new byte[glb.PFD_HEADER.TOP_HASH_SIZE];

Buffer.BlockCopy(decrypted_header_array, offset, output_array, 0, glb.PFD_HEADER.TOP_HASH_SIZE);

return output_array;
}
//**************************************************************************************************************************'
//* READ THE BOTTOM HASH FROM DECRYPTED HEADER IN AN ARRAY *'
//**************************************************************************************************************************'
public static byte[] Read_Decrypted_Header_Bottom_Hash(byte[] decrypted_header_array, int offset)
{
byte[] output_array = new byte[glb.PFD_HEADER.BOTTOM_HASH_SIZE];

Buffer.BlockCopy(decrypted_header_array, offset, output_array, 0, glb.PFD_HEADER.BOTTOM_HASH_SIZE);

return output_array;
}
//**************************************************************************************************************************'
//* READ ALL ENTRIES FROM HASH TABLE TO A LIST OF ARRAYS *'
//**************************************************************************************************************************'
public static List Build_Hash_Table_Entries_Array(byte[] hash_table_array)
{
List output_bytes = new List();

for (int i = 0; i

GMOTE's Avatar
#52 - GMOTE - 84w ago
Nice news.

eric994's Avatar
#51 - eric994 - 85w ago
this is a favour i want to ask for anyone who understands this stuff.

Could it be possible to fix the "corrupt save data" dilemma in the call of duty: black ops II(BLES01717) with will highly appreciated by me and many others with the same copies of this amazing game.

Sponsored Links

Sponsored Links
Sponsored Links

Sponsored Links







Affiliates - Contact Us - PS3 Downloads - Privacy Statement - Site Rules - Top - © 2014 PlayStation 3 News