
Save State Cracker v1.0


	Save State Cracker is a utility to aid in save state, sram, and possibly rom hacking. It includes search and comparison abilities, as well as being a front end for my hex editor HeX0R.

__________
Known Bugs
~~~~~~~~~~

	The Known Value Search may crash if produces to many results when searching multiple files. I've found no limit when searching only 1 file. 



========================
	 Options
========================
___________
Value Type
~~~~~~~~~~~

	Values can be of byte, word, or double word ranges. So if the variable would be a small value like number of lives, you should use a byte search (0-255). Something higher like money would be a word (0-65,535). The double word ranges from (0-4,294,967,295).	

____________
File Range
~~~~~~~~~~~~

	The range of offsets within the files that search and comparison methods will look at. The range is specified by the Starting Offset & Ending Offset, which default to Start of File and End of File if those boxes are checked. To change one of these, uncheck the corresponding check box and type in the offset. 

______________
Search Options
~~~~~~~~~~~~~~

	Sets the parameters for the Unknown Value Search.



=========================
	Functions
=========================

__________________
Known Value Search
~~~~~~~~~~~~~~~~~~ 	

	Searches any number of different save states for specific values (of a variable), and cross references the matches in each file with matches in the others. Final results are the locations where the values matched in all the states.

	For each file, you will be prompted to input a value (in decimal). This can be used to search one file, showing all locations in that file that matched the given value, or many files showing only the locations where every file matched its value. 

	Example: You want to know the location that holds the value for the number of lives in a game's save state. Take a few states, each when you had a different number of lives. 

State1: 3 lives
State2: 2 lives
State3: 5 lives

	Then, search them all, giving the number of lives in a particual state for its value (Files are numbered in the order they appear in the list). The search will find what locations in each file have a match for the file's given value (number of lives). Then it will return the offsets where every file had a match at the same location. 

	If the search produces no results, then a match didn't exist in every file. If it does give results, then one of them should be the offset where the number of lives is stored. The more files you search, the more the search can narrow down the results. 

____________________	
Unknown Value Search
~~~~~~~~~~~~~~~~~~~~ 
	
	Seraches 3 files when the specific values for the variable you're searching for are unknown. All that is known is the state of the variable changed between states. 

	The first file is the Base file, which is the basis for the comparison. The second file is the Similar file; in this file the variable you're searching for has the same value as in the Base file, but some other things have changed (for save state: time passes, you may have moved, etc). The third file is the Dissimilar file, where the variable you're searching for has a different value than in the base state. 

	Using this information, the search finds all locations where both:

1. The Similar file is equal to the Base file
2. the Dissimilar file is not equal to the Base file

There are some various parameters under Search Options to narrow down the search (if they apply):

Base value is not zero 	- The base value can't be 0
Base value is not max - The base value can't be the max value for it's data type
Dissimilar value is larger - You know the value increased in the dissimilar state
Dissimilar value is smaller - You know the value decreased in the dissimilar state
Difference - You know the dissimilar value changed from the base by no more than a certain amount

_______
Compare
~~~~~~~

  Compares the first two files. If Different is checked, it returns all locations where the files are different. If Same is check, then it retruns where the files are the same. Compare also goes by Byte, Word, or DWord values.

Example: Use it on two states if the variable(s) you're looking for haven't changed between the states, but other various game data has. Everything that compare returns as different is ruled out of what you're looking for.



========================
     General Usage
========================
_____
Files
~~~~~

	Files can be added to the list via File->Add or by dragging files into the window. File->Delete for the delete key will remove the selected file. Clear All will remove all files from the list.

____________
Save Results
~~~~~~~~~~~~

	Saves the Matches offsets to a text file.

_____
HeX0R
~~~~~

	When a file and offset are selected, you can launch my hex editor HeX0R, which automaticly loads the file and goes to the selected offset. HeX0R can edit in hex mode (keys 0-9 & A-F) and text mode (All alpha-numeric and punctuation keys). See HeX0R Help (F1) for more details.

______________
Restore Backup
~~~~~~~~~~~~~~

	When you launch HeX0R to edit a file, it first makes a backup copy of the file. If you've edited and saved that file, you can Restore Backup and return the file back to it's original state. Note: The backup data will be saved to whatever file is seleted in the Search Files list box, so make sure it's the same one you changed up.

__________
Quick View
~~~~~~~~~~

	This displays the byte, word, and double word values in hex and decimial for the data in selected file at the selected offset. If both a file and offset are not selected, the Quick View window will be blank.

________________
Accelerator Keys
~~~~~~~~~~~~~~~~

Ctrl-A: Add File
Ctrl-H: Launch HeX0R
Ctrl-K: Known Search
Ctrl-U: Unknown Search
Ctrl-C: Compare
Ctrl-V/Enter: Quick View



Save State Cracker written for Microsoft Visual C++ 6
HeX0R written for DJGPP

Copyright 2001, Wesley Hopper
HopperW2000@yahoo.com