In retrospect, knowing what I know about the trade code algorithm, it was destined to fail - but their hearts were in the right place. They also had a subforum for trying to crack the code programmatically, but the knowledge base was just not there.
-
Näytä tämä ketju
-
Posts in the subforum included gems like "My big brother knows QBASIC, maybe he can help?" Again, in retrospect, it makes sense. Most of these people were kids in their early teens or even younger. I therefore decided to strike out on my own.
1 vastaus 0 uudelleentwiittausta 4 tykkäystäNäytä tämä ketju -
The first bit of useful info that I knew was that, being a port of an N64 game, the entire game was resident in RAM at all times. It never accessed the disc except on boot-up. Thus my goal became to get a dump of RAM from a running GameCube.
1 vastaus 0 uudelleentwiittausta 3 tykkäystäNäytä tämä ketju -
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.
1 vastaus 0 uudelleentwiittausta 3 tykkäystä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
-
-
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 - Näytä vastaukset
Uusi keskustelu -
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.