How do I cheat?
Joined: 25 Aug 2016
|Posted: Tue Feb 06, 2018 3:21 pm Post subject: Shadowverse
|I'm pretty sure this is a grey area since afaik it's against CE rules to help with online games but I'm not trying to cheat in this game rather make some utility tools.
If anyone is able to find the offset where the players card library is stored it'd be a great help to me.
What I've found:
The game references cards by codes like so CN_104011030, this is the id for Wise Merman. However searching for this id, it seems to only be referenced in various language files in memory.
This same code is used by shadowverse-portal (can't post urls, google it) so it can be used to easily look up card ids.
shadowverse-portal/card/104011030 (can't post links)
The wise man example from earlier.
I thought maybe they weren't using the CN_ string and simply referencing by the integer id in memory.
So I made some observations.
imgur/XjZQC9z.png (can't post links)
Cards seem to be sorted in a top to bottom order based on the fact that foil cards are shown below their nonfoil counterparts.
Since I don't know how foil cards are referenced I looked for a unique combination of cards that were not foil.
imgur/fSeRHUs.png (can't post links)
These cards are 107024010 and 107024010 respectively. Tried to do a groupscan for this and got 4 results.
|4:107024010 4:107024010 |
Unfortunately they didn't seem to be all that useful.
Following the first two results were 107024011 which doesn't seem to be a card, at least it dosn't show up on shadowverse-portal.
The other two were followed with: 0 and 1 respectively.
I figured out that foil cards are the base cards id+1. So I was able to consistently find results using a groupscan command to find all entries of my library, there's a few issues with this though.
First, it only shows up in memory when you are on the card collection screen. (this isn't that big of a deal)
While attempting to find a pointer to one of the two addresses for this entry, the only pointers are in the mono dll.
Lastly, this leaves a lot to be desired since it doesn't tell us the number of cards the player has.
I would share the groupscan command, although it wouldn't really help anyone else since it's dependant on which cards you have.
Here's a groupscan command you can use to find the first 4 cards if they are Goblin, Foil Goblin, Wise Merman, Foil Wise Merman.
|4:100011010 4:100011011 4:104011030 4:104011031 |
You can use this with the byte skip in groupscan and then add your last card to the end.
To get the number of bytes to skip you'd use:
|(number of pages) * 16 - (number of cards missing from last page) * 4 - 16 |
The first 16 is the number of cards shown on each page, the 4 is because each card is stored as 4 bytes, the - 16 is because we added entries for the first 4 cards on the first page which is 16 bytes.