An MD5 hash is a string given by a (although fairly broken) hash function, given some input bitstring. Unfortunately, since hash functions are not one-to-one, it is quite difficult to reconstruct the source data (ISO) from just the hash, but with the magic of mathematics, **we can, theoretically, convert an MD5 hash to a valid, playable ISO**, via the axiom of choice! Allow me to explain.

Let *H* be our MD5 hash that we want to convert to a playable ISO, and ** M** a Turing machine that accepts the set of bitstrings

*B*that consists of playable ISOs for some fixed system

*S*. We can simply assert the existence of such a machine by the axiom of choice (AC), but we can do even better: we can construct such a machine simply by looking at the code of any emulator for

*S*!

Let **MD5** be the MD5 hash function that maps some bitstring *b* to a hash *h*

Then, let **B** (bold and italics are different variables!) be the set of all bitstrings. We simply need to refine this set such that for all bitstrings *b* in **B**, **MD5**(*b*) = *H*. Lets call such a set **H**.

We're basically done at this point. All you have to do is find a bitstring in **H** that ** M** accepts, and you have your ISO!