I've just released version 1.1 of my tool. Download link in first post.

Changes:

Version 1.1 (October 7, 2012):

Keys stored as hex-strings in keydata file will now be found

Added option to select search mode (see USAGE for directions)

Flushing output of progress updates to allow for better integration

Performance increase (~40%)

I've implemented the hex-string search function. And I made sure all cases are covered, except for one: When searching for hex-strings there is one case where the key will not be found. It occurs when the KLicence hex-string is preceeded by an odd number of hex digits. I haven't covered this case, because I don't think this will ever occur. If you (or someone else) think this can occur, please tell me, because it's very easy to implement at this point.

Output is now being flushed (for progress updates). I will give you a example. EBOOT.ELF from BLES00330 contains string: "-drmKey=1fbadf00d726101632a11da1cafeacac", if this string was instead: "-drmKeyf1fbadf00d726101632a11da1cafeacac" there is an odd number of hex digits (1x 'f' here) preceeding the key, causing the key not to be found.

Version 1.2 (October 7, 2012):

Removed restriction on hex-string search mode

(BugFix) Found hex-string is now displayed, instead of data at address

Version 1.3 (October 10, 2012)

Added support for UTF-16/UTF-32 encoded hex-strings

Added search-range option

Btw, decided not to add separate options for UTF-16/UTF-32 as it has just a very minor impact on performance (like 1%). Also a note on using the search-range option (from README.txt): When using option search-range to process part of a file, please keep in mind that the last key tried is at offset: end position - 16 (size of KLicence).

Version 1.3.1 (October 10, 2012)

Sorry about the search-range bug, I was in a bit of a hurry and completely forgot to test if the option worked... Almost did work though What it did was it always tried to process fileSize amount of bytes starting at the given offset, instead of (end - start) amount of bytes. Had to change just one line to get it working. Anyways, everything should be working now in version 1.3.1

Initial release of the KLicence Brute-force Tool. Version 1.0, built on October 6, 2012 using Microsoft Visual C++ 2010 Express.

Use this program with caution. I will not be held responsible for any damage caused by (the use of) this program or it's source code.

Source code is included as a donation to other developers.

Files included in this release:

Compiled program (Win32): 'klicencebruteforce.exe'.

Example ps3keys file: 'keys'.

This README file: 'README.txt'.

Source code: 'klicencebruteforce-src-1.0.rar'.

GPL v3 for used libraries: 'gpl-3.0.txt'.

Special thanks to:

Asure (PS3Hax) - for the first steps in this subject and gaining my interrest.

PS3DevWiki - for the information on SELF files and NPDRM decryption algorithm.

naehrwert - if SCETool source code was available, i wouldn't have made this.

[DESCRIPTION]

This program will try to decrypt the metadata info of a SELF file that's been encrypted using a developer KLicence, by trying all the possible keys in the user-specified input keydata file. If the input keydata file contains the key to decrypt the metadata info, then the key will be found. When a working key is found, it will be written to the console.

It is VERY fast! On my Core2Quad Q6600 at 3.2 GHz it does ~770.000 keys/second, utilizing only a single thread/core. Moreover, it scales perfectly when running multiple instances concurrently. So, if you have a quad-core processor and you split your input keydata file into four equally sized parts and run four instances of this program, each using one part of the input keydata file, it will give you a nice x4 speedup!

This program is built for speed, not compatibility. This means that there is a great chance that some SELF files won't be processed correctly. If this is the case, try processing it with option '--minimize-validation' enabled. If it still doesn't work, use option '--npdrm' together with '--metadata-info'. This will result in the SELF file not being used or validated (the argument is still mandatory though). This way you can force the program into brute-forcing the metadata info of any SELF file.

Input ps3keys file must use format as used by SCETool. A sample ps3keys file is provided: 'keys'. The program will try all keys in the ps3keys file with name prefix 'NP_' as possible KLicence keys before starting the brute-force attack. This has the advantage that previously found keys can be added to the keys file. For an example, see the included keys file: it has the InfinityWardKey added to it as 'NP_infinitywardkey'. Also, you can use comments in the keys file by starting a line with '#' (just like an INI file).

Input keydata file is a binary file. This is the file that is used for the brute-force attack. If the KLicence key is in this file, it will be found.

For more help on how to use this program, see the USAGE section below.

[CHANGELOG]

Version 1.0 (October 6, 2012)

- Initial release

[SOURCE CODE NOTES]

Source will build using Microsoft Visual C++ 2010 Express.

I've tried to keep the code portable, so making it compile on Linux shouldn't cause too many problems. This is untested, however.

Following up on the PS3 KLicense Brute-force Tool release, this weekend PlayStation 3 scene developer Flat_z has made available a PS3 Disc Key Dumper, Klicensee Dumper and corresponding Data Dumper with details outlined below.

The klicensee_dumper should speed up the gathering of klicensees. One of dumpers is an alternative to klicensee bruteforcer which released before because some klicensee keys cannot be bruteforced. Klicensee is used to resign/decrypt/encrypt self/sprx/edat.

As for the other dumper (for a disc key), I'm writing a tool to decrypt/encrypt saves and resign them for your console if you want to use a save from another console. I will release a tool soon when it will be completed.

From the included ReadMe Files:

Disc Key Dumper

Requirements:

3.55 CFW (e.g. Kmeaw)

MultiMAN or original dev_blind application and FTP client

1. Install `Data Dumper` (data_dumper.pkg) if you didn't installed it before. It is a homebrew application to dump a data from some LV2 memory to a file: /dev_hdd0/tmp/dumps.bin. A data which stored there is written by dumper loaders, e.g. by Disc Key Dumper.

2. Install `Disc Key Dumper Loader` (disc_key_dumper_loader.pkg). It stores a disc key if your game is not a PSN/SEN game.

5. After exiting from the game you need to run `Data Dumper`, you will hear some beeps.

6. Then run any FTP client (e.g. builtin in MultiMAN) and download a dumped disc key from /dev_hdd0/tmp/dumps.bin.

Klicensee Dumper

A klicensee is specified by developer of the game. Usually it is stored in EBOOT.ELF and you can find it in a disassembler or by brute forcing a key along with a NPD header. But in some cases this key is not stored in a plaintext format and can be annoying to analyze a game's executable. That's why I had created this dumper.

Requirements:

3.55 CFW (e.g. Kmeaw)

MultiMAN or original dev_blind application and FTP client

1. Install `Data Dumper` (data_dumper.pkg) if you didn't installed it before. It is a homebrew application to dump a data from some LV2 memory to a file: /dev_hdd0/tmp/dumps.bin. A data which stored there is written by dumper loaders, e.g. by Klicensee Dumper.

2. Install `Klicensee Dumper Loader` (klicensee_dumper_loader.pkg). It stores a file path to self/sprx/edat and a klicensee key if it is specified.

3. Now you need to replace original `libsysutil_np.sprx`. I use a dev_blind feature from MultiMAN, you can use any other way. Don't forget to backup original file.

4. Reboot a console to clear a data storage in LV2 memory.

5. Now you need to start `Klicensee Dumper Loader`, then start your game.

6. After exiting from the game you need to run `Data Dumper`, you will hear some beeps.

7. Then run any FTP client (e.g. builtin in MultiMAN) and download dumped klicensee keys from /dev_hdd0/tmp/dumps.bin.

8. Restore an original `libsysutil_np.sprx` using the same method as at step 3.

Data Dumper

Requirements:

3.55 CFW (e.g. Kmeaw)

MultiMAN or original dev_blind application and FTP client

1. Install `Data Dumper` (data_dumper.pkg) if you didn't installed it before. It is a homebrew application to dump a data from some LV2 memory to a file: /dev_hdd0/tmp/dumps.bin

2. Every time you're want to dump a data from my applications (e.g. Klicensee Dumper) you're need to reboot a console to clear a data storage in LV2 memory.

3. Run a dumper loader, then start your game.

4. After exiting from the game you need to run `Data Dumper`, you will hear some beeps.

5. Then run any FTP client (e.g. builtin in MultiMAN) and download a dumped data from /dev_hdd0/tmp/dumps.bin.