Yep.
Thank you!
I have looked also in the program verification routine.
The serial have 16 chars.
First 8 characters generates the next 8 trough a loop of XOR/AND/SHIFT of bytes of the inverted first 8 bytes .
The resulted DWORD from the function that "translate" the first 8 chars is the second part of the serial.
Nice protection.