Try a web search for "Hex editor". There are several around, including some free ones. They can display the values of the bytes making up the file as (ususally) hexadecimal (base 16) values - each 8 bit byte shows as 2 hexadecimal digits. Some may also allow you to display the values as octal (base 8) or binary (base 2). As with most editors, you can search for things (usually either as normal text, or for byte values) and add/remove/change things.
Typically, what happens when a file is corrupted is that either some part of the file is lost while copying, or extra garbage inserted, or that some of the data values are changed - or some or part of the file is later overwritten by something else.
depending on the image format, changing the data may either change the colour of a pixel (raw pixel values), mess up a line (run length coded values), or make the image unloadable (some header fields or compression schemes).
For most compression schemes, the loading software may be able to tell that there's a problem if the change affects any of the spatial (run length) information, but may not be able to tell if the change only affects colour information - if it's expecting a 1000 pixel long line, and the data decompresses to 1020 or 980, then that's fairly obvious if it's checking, but having a red pixel instead of a green one isn't noticeable. Similarly, if the change trashes essential header information (like the size of the image) then there will be problems.
Depending on what you're trying to do with the corrupted images, you may need to do more research on the image formats involved.
Edit: For anyone who is wondering why the editors show the byte values as hex, octal, or binary values instead of a normal decimal (base 10) number - it's because in a lot of data formats, different parts of the bytes can be used for different things - for example, you might use 2 bits of the 8 bits in a byte to represent 4 possible different colours, and the other 6 to represent a repeat count (0-63, or 1-64 if you add one to the number), and with the hex/octal/binary display it's easier to split the numbers up and work out what the bit pattern is - each digit represents a separate set of bits, unlike decimal, where things get mixed together:
7A (hex - uses digits 0123456789ABCDEF) =
0111 1010 (binary, spaced to show hex relationship - uses digits 0 1) =
01 111 010 (binary, spaced to show octal relationship) =
172 (octal - uses digits 01234567) =
132 decimal, which has no obvious relation to the binary version.