If user has been bought professional license of
IsoBuster, he can use custom signature script engine to be used as Memory Card and Saves finder. In attachment You can find
Save Data Crawler which can be used to find
all PSX and PS2 Memory Cards formats,
all PSX saves (PS2 saves doesn't have signatures) and PSV containers. Script can be used in none-commercially and even commercially; You are totally free to use it whatever purpose You want. ^^
1. Run the app and go to "Options" > "File System settings" > "SIG".
2a. Check option "Limit the size of found files to:" and write "65536" value.
This is because largest VMC created by OPL cannot be larger than 64MiB but of course if You know that used virtual memory cards are larger or smaller, increase or decrease this number (i.e raw PSX memory cards cannot be larger than 128KiB, so if You looking only those, write "128"). Engine trying guess the file size but technically it is not possible to always automatically determine proper size so found saves or virtual memory cards can be larger than they really are, because there are other data between their signatures and next found signature.
2b. Check option "Use custom defined rules" and choose file "Save Data Crawler.rules" from Your disk (which You must of course download and unpack from this post). To eliminate possibility of false positive scan results, also check option "Only custom defined rules".
2c. Click "OK" to save changes. ;p
Note: if You always want to use this script, in addition, without any limitations on demand like size etc., put *.rules file in "Plugins" dir where You have installed IsoBuster. It will be automatically read on application start.
3. Open disk image (by "File" > "Open Image File ") or real device like connected disk, pendrive etc. (by clicking on "Select a drive"). IsoBuster will interpret image/device logic. If it is unknown or beyond repair You can scan only whole file/device, but if it understandable, it will show partitions/areas and user would be able to choose scan only selected part of data.
In example below, it is disk image comes from PS2 HDD. Knowing that only on "__common" partition I have PSX memory cards, I selecting this specific partition to shorten scanning time. Under right mouse menu, I choose option "Find missing files and folders".
4. After scan is done, under rectangle symbolizing file system type, appears rectangle with "SIG" letters. This is place where You can find all found files by signature scan and under right mouse menu on files, be able to extract them. On example below, there is PSX memory card image and several PSX saves.
Note: none of the files have original file names because those are not part of files but file system tables which aren't used for signature scan. Also file size could not be true (some can be larger than they should). It is totally normal behaviour.
Note2: if looking data was fragmented, recovered files can be "damaged" because algorithm doesn't know where another parts of data are. Signature scan always works best on not fragmented files.
Code:
\% ____ ____ __
\% /\ _`\ /\ _`\ /\ \__ version 1.1
\% \ \ \L\_\ __ __ __ __ \ \ \/\ \ __ \ \ _\ __ by Berion
\% \/_\__ \ /'__`\ /\ \/\ \ /'__`\ \ \ \ \ \ /'__`\ \ \ \/ /'__`\
\% /\ \L\ \/\ \L\.\_\ \ \_/ |/\ __/ \ \ \_\ \/\ \L\.\_\ \ \_/\ \L\.\_
\% \ `\____\ \__/.\_\\ \___/ \ \____\ \ \____/\ \__/.\_\\ \__\ \__/.\_\
\% \/_____/\/__/\/_/ \/__/ \/____/ \/___/ \/__/\/_/ \/__/\/__/\/_/
\% ____ ____ ______ __ __ __ ____ ____
\% /\ _`\ /\ _`\ /\ _ \/\ \ __/\ \/\ \ /\ _`\ /\ _`\
\% \ \ \/\_\\ \ \L\ \ \ \L\ \ \ \/\ \ \ \ \ \ \ \ \L\_\ \ \L\ \
\% \ \ \/_/_\ \ . /\ \ __ \ \ \ \ \ \ \ \ \ __\ \ _\L\ \ . /
\% \ \ \L\ \\ \ \\ \\ \ \/\ \ \ \_/ \_\ \ \ \L\ \\ \ \L\ \ \ \\ \
\% \ \____/ \ \_\ \_\ \_\ \_\ `\___^___/\ \____/ \ \____/\ \_\ \_\
\% \/___/ \/_/\/ /\/_/\/_/'\/__//__/ \/___/ \/___/ \/_/\/ /
\%
\%
\% Place this script inside Plugins dir where You have installed IsoBuster then use on selected track or partition "Find missing files and
\% folders". After signature scan end, new square "SIG" should appear with found data. None of the files will have original file names and
\% will be duplicated with already visible data. That's the normal behavior and nature of file seeking by value patterns.
\%
\% =======================================================================================================================================
\% Sony PlayStation Memory Card images
\% =======================================================================================================================================
\% VM1, MCR and several other extensions used by emulators are the same raw dumps of Memory Card. Just rename the files. ;)
\% SAVERAM is actually combined two Memory Card images so signature scan will not found any, instead it shows it as separated VM1.
\x31\x32\x33\x2D\x34\x35\x36\x2D\x53\x54\x44\x00\x00\x00\x00\x00\|.gme|134976
\x56\x67\x73\x4D\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\|.mem|131136
\x00\x50\x4D\x56\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\|.vmp|131200
\x4D\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\|.VM1|131072
\% =======================================================================================================================================
\% Sony PlayStation Save Data
\% =======================================================================================================================================
\% Retrieve GameID and SubID from vaild saves written in memory card index.
\% You can find single saves also in PSX VRAM uncompressed dumps.
\x53\x43\x1?\|.raw
\% =======================================================================================================================================
\% Sony PlayStation 2 Memory Card images
\% =======================================================================================================================================
\% Cannot determine if Memory Card images is ECC or None-ECC so both can be found and named VM2.
\% ECC = 8650752*n (*.ps2, *.vm2,), None-ECC = 8388608*n (*.bin, *.vmc).
\x53\x6F\x6E\x79\x20\x50\x53\x32\x20\x4D\x65\x6D\x6F\x72\x79\x20\x43\x61\x72\x64\x20\x46\x6F\x72\x6D\x61\x74\x20\x??\x2E\x??\x2E\|.VM2
\% =======================================================================================================================================
\% Sony PlayStation 2 Save Data & application resources
\% =======================================================================================================================================
\% Signature for both *.elf and *.irx is the same, so scan cannot tell the differences. File will be saved just as ELF.
\% Single saves or other save resources cannot be retrieved by signature because they are data stream fully designed by game devs.
\% By default, search is disabled. Remove "\%" in rule line if You need it.
\% \x01\x00\x00\x0?\x00\x0?\x0?\x4?\x00\x0?\x0?\x1?\x00\x00\x0?\x??\|.kelf
\% \x7F\x45\x4C\x46\x01\x01\x01\x00\|.elf
\% CNF_version\|.cnf
\% BOOT =\|.cnf
\% BOOT2 =\|.cnf
\% \x50\x53\x32\x44\x00\x00\x1C\x00\x00\x00\x00\x00\x10\x00\x00\x00\|.sys
\% \x00\x00\x01\x00\x01\x00\x00\x00\|.ico
\% =======================================================================================================================================
\% Sony PlayStation & PlayStation 2 exported saves
\% =======================================================================================================================================
\% File name is part of validation (PS3 will reject different), however this information can be retrieved from PSV header.
\x00\x56\x53\x50\x00\x00\x00\x00\|.psv
\x27\x84\x00\x00\x??\x00\x00\x00\|.psu
\% =======================================================================================================================================
\% Sony PlayStation System File Objects
\% =======================================================================================================================================
\% By default, search is disabled. Remove "\%" in rule line if You need it.
\% \x00\x50\x53\x46\x01\x01\x00\x00\|.sfo
\% ---------------------------------------------------------------------------------------------------------------------------------------
\% script examples
\% ---------------------------------------------------------------------------------------------------------------------------------------
\% "Text" ASCII instead of hex values
\% "\s(1)" skip one byte
\% "\xAA" hex value AAh
\% "\x??" can be any hex value
\% "o(3)AA\o()BB\o()CC\o()" possible only one of this three values: AAh, BBh or CCh
\% "\<\x03" possible only 00h, 01h and 02h values
\% "\|.xxx" adds extension *.xxx to found files
\% "|1" file length can be only 1 byte
- - -
Later I'll try to make script for free tool: PhotoRec.