190 lines
10 KiB
Plaintext
190 lines
10 KiB
Plaintext
Hacker 1.0
|
||
by WadeSoft, March 1994
|
||
|
||
|
||
Disclaimer
|
||
|
||
This program has been added to the World's collection of public domain utilites.
|
||
It is a free utility, and therefore neglecting the cost of diskette(s), no price is to be
|
||
entailed with its distribution.
|
||
|
||
Purpose
|
||
|
||
This program was created as a programming aid: to help WadeSoft decipher
|
||
various file formats, such as .WAV and .TGA files. It can be used for this purpose
|
||
as well as another - to help gamers "cheat". As well as a programmers' best friend,
|
||
this utility can be also be the gamers' most valued program.
|
||
|
||
Program Outline
|
||
|
||
Hacker was designed with four distinct goals in mind. These four functions, which
|
||
are performed on either textual or binary (.exe) files, can be categorized in the
|
||
following manner:
|
||
|
||
a. Numeric/character search.
|
||
b. Numeric/character search and replace.
|
||
c. Numeric/character modification.
|
||
d. File comparison.
|
||
|
||
Numeric/Character Search Explained
|
||
|
||
This is probably the single most useful part of Hacker's functions in the eyes of a
|
||
programmer. It allows the user to search an entire file (textual or binary) for a
|
||
given byte, integer, word, long integer or sequence of characters. Upon finding an
|
||
occurrence of the specified value, the program will display it's location inside the
|
||
file. We used this function to understand the .TGA file format. We knew our image
|
||
was 640 pixels wide and 480 long, so we searched for the "word" (see "Data Types
|
||
Explained") "640" inside the file. It told us it's exact location. Upon acquiring this
|
||
knowledge, our program was able to know the resolution of any image we wanted,
|
||
not just this particular one. The point is that we can now take more complete
|
||
advantage of the .TGA file format.
|
||
|
||
Numeric/Character Search and Replace
|
||
|
||
When selection what one wants to search for in a file, the program asks if the user
|
||
wants to do any replacing after the values have been located. If so, then the
|
||
program asks what to replace the values with. Then it begins the search, and when
|
||
any identical values are located, the program asks if the user wants the value at this
|
||
particular location replaced. If yes is answered, the program replaces the located
|
||
value with the desired one. This is useful for cheating in games. If one knew that
|
||
he or she had $540 dollars in a game, they could search their save-game file for
|
||
540, and if it were found, it could be replaced with $10,000!
|
||
|
||
Numeric/Character Modification
|
||
|
||
When searching for a value, let us say $540 in a saved game, the program will
|
||
display the location of its findings. Instead of doing a Search/Replace every time
|
||
the user wanted to change his or her money in the game (and therefore knowing
|
||
exactly how much money he/she had at the time), the user could just specify the
|
||
location of the value to change, and change it to $20,000. The gamer would
|
||
hopefully have written down the location inside the file where the money was
|
||
stored.
|
||
|
||
File Comparison
|
||
|
||
Almost always, saved game files are of a constant length. This would indicate that
|
||
game-related information (such as money) is always stored in the same location.
|
||
File comparison is only useful for which are of the same length. The reason is that
|
||
the program reports every byte which is different between the two specified files.
|
||
If one were larger than the other, each addition byte would be reported, making for
|
||
a huge list of meaningless differences. Let us say that in a role-playing game, we
|
||
saved the game just prior to and just after having changed our sword for an axe.
|
||
If a file comparison were performed between the two saved-game files, these
|
||
changed would be revealed. The user would then know to change byte 45 to value
|
||
32 if he wants an axe or value 31 if he wants a sword. What happens when we
|
||
change it to 56? A halberd perhaps? After having made a comparison, it is best to
|
||
use the "File Modification" tactic to alter these values. Note that it is useful to
|
||
create lists of weapons or spells along with their associated byte values and
|
||
locations. Include your list and this program together in a package, and distribute
|
||
it them!
|
||
|
||
Data Types Explained (simplified)
|
||
|
||
A small amount of "programming" knowledge is required if one wants to use this
|
||
program. The reason is simple. Because this software functions with ALL types of
|
||
files and games, no preset locations or file definitions are known to the utility. In
|
||
other words, the user must specify the type of data he is searching for. Data is
|
||
stored in several different manners, and below is posted a listing of the different
|
||
data types this program supports (which is virtually all of them). If you are
|
||
unfamiliar with programming, or more specifically with data storage, here is a brief
|
||
explanation.
|
||
|
||
A file is composed of a certain number of bytes. Let us take a 64 kilobyte file as
|
||
an example. 64k represents 64,000 bytes of information (approximately, since in
|
||
computerese kilo stands for 1024, which yields 65,536 bytes). A number between
|
||
the range of 0 and 255 (256 possible numbers) requires 1 byte of storage space. If
|
||
in your saved game, the value you are searching for cannot exceed 255, then it is
|
||
likely to have been stored as a byte value. If your numbers get larger than this (say
|
||
money, of which you have $4,000), then it has not been saved as a byte value. It
|
||
has probably been saved as something larger, say a word. A word is composed of
|
||
two bytes placed side-by-side. These can hold numbers as large as 65,536. If you
|
||
think about it this makes sense, since 256 (largest value for a byte-value) multiplied
|
||
by 256 gives you 65,536. Though bytes are usually considered to be the smallest
|
||
units, they are not. No file can be smaller than 1 byte, but one byte is actually
|
||
composed of 8 bits. Here is a description of how the number 341 is stored in
|
||
memory. Note that this is larger than 255, so must be stored as a word.
|
||
|
||
|
||
0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1
|
||
2^15 2^14 2^13 2^12 2^11 2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
|
||
|
||
Please note than "2^15" Indicates 2 to the power of 15. If one wants to change this
|
||
base-2 number to base-10, one needs to find the "1's" in the upper row, and for
|
||
each of these, add the number represented below it. 341 would be 2^8 + 2^6 + 2^4
|
||
+ 2^2 + 2^0 = 341. Notice that there are 16 elements, or in other words, 16 bits.
|
||
This means two bytes side-by-side as was described above. This was called a
|
||
"word". We said that 65,536 was the largest number which could be represented
|
||
by a word. Is this true? Assume a "1" for each of the cells above, and you should
|
||
get 65,535. Why are we missing 1? Because "0" is a number, and thus, we can
|
||
store 65,536 numbers, of which the largest is 65,535.
|
||
|
||
|
||
Data Type Stored Bytes Stored Bits Smallest Biggest
|
||
Byte 1 8 0 255
|
||
Character 1 8 ASCII #0 ASCII #255
|
||
Word 2 16 0 65,535
|
||
Integer 2 16 -32767 32767
|
||
Long Integer 4 32 -2.15bil 2.15bil
|
||
|
||
Using the Program
|
||
|
||
Throughout this documentation there have been several explanations and examples,
|
||
but none formalized. Here we will present to you one formal example of cheating.
|
||
Origin's Privateer is quite a popular game now, and so we thought we'd show you
|
||
how to "help" you along in the game. Load up a saved game and check to see how
|
||
much money you have. Let us say you have $5200 credits exactly. Quit the game
|
||
and load up Hacker. It is best to place hacker in your path statement so you can
|
||
access it from anywhere, though this is not required. From the main menu, choose
|
||
option 4, which is "long int". We know we can have a lot of money, so we assume
|
||
the information is stored as a long integer (see table above). The program will then
|
||
prompt you for the name of the file. Enter it. They it will ask you if you want to
|
||
search the file. Say yes here. If you knew the location of the byte to modify, then
|
||
you would say no here. The utility will then ask you what you want to search for.
|
||
Enter $5200 here. The program will then as you if you want to replace any of the
|
||
values you find. Enter yes if you want to actually change your money. It will then
|
||
ask you what your desired value is. Enter 20,000. The program will then begin to
|
||
scan the file. If any matches were found, the program will tell you where it found
|
||
the occurrence. It will then ask you if you want to replace this value with the
|
||
desired quantitiy of cash you entered previously. If yes, then the change will be
|
||
made. Hit "y". You have now made some good money without much effort!
|
||
|
||
Generally, all information related to your character rather than to the map of the
|
||
game is stored at the beginning of the file. If a second or third match is made for
|
||
$5,200, it is probably fluke. It is generally best to accept only the first occurrence,
|
||
and to ignore the following ones.
|
||
|
||
Contacting WadeSoft
|
||
|
||
WadeSoft is at the moment a small shareware-oriented company dedicated to
|
||
releasing useful programs to the public domain. In other words, the little utilities
|
||
we write to help us write our larger programs are released as public, whereas we
|
||
ask for some money for the larger ones!
|
||
|
||
WadeSoft runs a public/private bulletin board called The Spinning Disk at the
|
||
following number: 416-447-9233 (416-447-WADE). If private access is desired
|
||
(access to files and the other telephone lines) then the nominal fee of $15.00 is
|
||
asked. You do not need to register ($15.00) with the Spinning Disk to obtain
|
||
WadeSoft technical help. To do so, please leave a comment to the System Operator
|
||
detailing your problem(s). That is option "C" at the main menu.
|
||
|
||
Registration
|
||
|
||
Registration of any WadeSoft product is mearly $10.00 US or $12.50 Canadian.
|
||
Registration simply means that you receive a diskette in the mail, along with nicely
|
||
printed and formatted documentation. Please indicate your mailing address,
|
||
telephone number and diskette type in the envelope. By sending $25.00 ($30.00
|
||
CND), you will receive a copy of ALL our programs, along with their respective
|
||
documentations. In order to minimize our costs however, all programs will be
|
||
contained on one or two diskettes, rather than having a each program contained
|
||
individually.
|
||
|
||
Mailing Address
|
||
|
||
Please mail cheques to the following address, and make cheques payable to
|
||
"Gregory Wade".
|
||
|
||
Gregory Wade
|
||
26 Farrington Drive
|
||
North York, On, Canada
|
||
M2L 2B6
|