This was easier than one might expect, as I had a copy of Phantasy Star Online and a Broadband Adapter, so running trojan code was relatively easy. Legendary Gameshark hacker "Parasyte" came through in a clinch, and whipped up a quick utility to dump the full RAM space.
-
Näytä tämä ketju
-
My next port of call was the
@dolphin_emu folks - yes, it was in development even then. One of their senior devs, Costis, was kind enough to whip me up a custom build that let me load this RAM image, disassemble code, and manually set register contents.1 vastaus 0 uudelleentwiittausta 3 tykkäystäNäytä tämä ketju -
The last key to the puzzle was Nintendo themselves, as they left the linker .map file on the disc when it was authored. I therefore had the address of every function in the game, and, well, those "mMpswd" functions sure look like "password", don't they?
1 vastaus 0 uudelleentwiittausta 1 tykkäysNäytä tämä ketju -
This kicked off a 2-3 month period where I did little other than go to university, take my courses, get home, and work on painstakingly translating every function, instruction by instruction, into pseudo-C code.
1 vastaus 0 uudelleentwiittausta 1 tykkäysNäytä tämä ketju -
After having every function reversed, I converted it into proper C. It required a good bit of debugging - fortunately, I had Dolphin to check my results against on a per-function basis - but at the end of it all, I was able to generate arbitrary trade codes.
1 vastaus 0 uudelleentwiittausta 0 tykkäystäNäytä tämä ketju -
It's now time for some info on the algorithm itself. It comprises many, many layers of obfuscation. A 21-byte buffer is assembled consisting of 8 bytes for the town, 8 bytes for the player, 2 item bytes, 2 info bytes, and a checksum byte.
1 vastaus 0 uudelleentwiittausta 3 tykkäystäNäytä tämä ketju -
These 21 bytes are subjected to a transposition cipher, a substitution cipher, random bit shuffling, being shifted like a massive barrel shifter, a cut-down version of RSA encryption, and finally converted into 28 6-bit characters and printed on-screen.
1 vastaus 0 uudelleentwiittausta 3 tykkäystäNäytä tämä ketju -
In summation, there was no way that this sort of algorithm could be brute-forced, simply due to the sheer number of transforms applied to the data. But it wasn't designed to withstand a university student with a surfeit of time and a working debugger. ~Fin
1 vastaus 0 uudelleentwiittausta 8 tykkäystäNäytä tämä ketju -
Vastauksena käyttäjälle @TheMogMiner
For someone who has never played Animal Crossing, what was the benefit or cracking the trade code? Something cool I'm guessing?!
1 vastaus 0 uudelleentwiittausta 0 tykkäystä -
Vastauksena käyttäjälle @merge87
It was how you could send items to other players in other towns without the game actually being online. You'd give an item to Tom Nook, tell him the destination player and destination town, and he'd give you a 28-character code that you could then give to your friend.
1 vastaus 0 uudelleentwiittausta 1 tykkäys
However, there was also some hidden functionality that I'm not sure Nintendo ever made use of. A certain set of flags would make a "universal" code, that is, an code for an item that anybody in any town could redeem.
Lataaminen näyttää kestävän hetken.
Twitter saattaa olla ruuhkautunut tai ongelma on muuten hetkellinen. Yritä uudelleen tai käy Twitterin tilasivulla saadaksesi lisätietoja.