Jump to content


XJDHDR

Member Since 05 Jan 2019
OFFLINE Last Active Nov 07 2019 04:29 PM
-----

Posts I've Made

In Topic: How is woldata.key and game's serial combined?

16 January 2019 - 08:06 AM

I managed to get a bit of info by sending a PM to zzattack. He can't remember exactly how they are combined but believes that "a super simple encoding" is used and pointed me towards this source code written by @Olaf : https://github.com/OlafvdSpek/xcc/blob/master/XWIS%20Client/dlg_serials.cpp

 

Unfortunately, C++ code is a bit beyond my depth. As far as I can tell, line 70 looks like what I'm looking for but I'm still trying to decipher what exactly is going on.

serial[j] = (serial[j] + s.data()[i] + 2) % 10 + '0';

Can anyone help me figure this out? Please and thank you!

 

Edit: From what I can tell, the function iterates through each number in the serial and woldata.key file and transforms the serial one number at a time until it reaches the end of the woldata number. It takes the number at position J in the Serial variable, adds the number at position I in woldata then adds 2. It then takes the sum of these numbers, divides by 10 and keeps only the remainder and then it adds '0'.

I think the main bit I'm having trouble with is the '0' at the end which is added to what the rest of the calculation spits out. I have no idea what this is supposed to do. I'm also a bit confused about how one is able to perform math operations on individual characters in the "serial" variable when that variable was initialized as a string. I also haven't been able to find any info on what "Cvirtual_binary" a few lines earlier is.