I figured out how to find a Pokemon's IVs. It wasn't as easy as you would think.
It turned out that Nintendo not only [Edit: misinformation deleted, supposed to refer to checksum], but XORed at least 48 bytes of information with a magic number as well as scrambling the stats (everyone knows why they would do something like this). The IVs are in those 48 bytes. Fortunately, the magic number is easy to find. Here's how to find the IVs:
1) First Pokemon stats are at 3004360; enemy stats are at 30045C0. Stats are 100 bytes long.
2) Go to 3004380 (30045E0 for wild Pokemon). The following 48 bytes are XORed with a magic number.
3) Divide these 48 bytes into 12 4-byte blocks.
4) The 4-byte magic number should be the most common sequence in the 12 blocks. It is best if the Pokemon hasn't fought yet.
5) Now find two consecutive blocks whose last bytes are not the same as the magic number's last byte. The encoded IVs are located in the second of these two blocks.
6) Take the 4-byte encoded IV number and XOR it with the magic number (Windows users can use Windows Calculator in scientific mode). Now you have the 4-byte decoded IV number.
7) Since the number is little-endian, reverse the bytes.
8) Write the number in binary.
9) The leftmost two bits should be 0; delete them. Group the remaining 30 bits into 6 groups of 5 bits each.
10) From right to left, the IVs are: HP, Attack, Defense, Speed, Special Attack, Special Defense. IVs range from 0-31.
Here's an example from the Kyogre in the published run (snapshot taken just before fighting Wallace):
Steps 1-3:
Step 4: The most common 4-byte sequence is 15AF98C1, the magic number.
Step 5: The two consecutive "unusual bytes" (last byte not the same as last byte of magic number) are 15E735D9 72D9DCE9. The 4-byte encoded IV number is 72D9DCE9.
Step 6: XOR 72D9DCE9 with the magic number 15AF98C1 (doesn't matter which first). Decoded, the IV number is 67764428.
Step 7: Reverse the bytes: 67 76 44 28 -> 28 44 76 67
Step 8: Write in binary: 00101000 01000100 01110110 01100111 (if using calculator and the calculator display drops leading zeros, put them in manually)
Step 9: The first two bits are 0. Remove them and group the remaining bits into 6 groups of 5 each: 10100 00100 01000 11101 10011 00111
Step 10: IVs from right to left. HP: 00111 -> 7, Attack: 10011 -> 19, Defense: 11101 -> 29, Speed: 01000 -> 8, Special Attack: 00100 -> 4, Special Defense: 10100 -> 20.
I verified this by checking Kyogre's stats and using the IV approximation formulas at
http://serebii.net.
Two other memory addresses to note are 3004616 (enemy health) and 3004618 (enemy max health). Enemy stats (Attack, Defense, ...) come after these values.
By the way, you might ask what happens if the [Edit: misinformation deleted, supposed to refer to checksum] for a Pokemon's stats doesn't match (i.e. using cheat codes)? Well, you might get this: