We are using GVP 7.6 as the IVR on this project and last week I managed to break one of our IPCS servers as a result of some network changes. GVP 7.6 is based on a product from Telera and as such the license keys are not based on FLEXlm as is the case for the rest of the Genesys suite.
For GVP 7.6 the license key is generated by the IPCS setup and is based on the MAC address of the NIC card in the server.
In our case the MAC address had changed and therefore the license validation started to fail. Given that this could happen operationally due to a NIC card swap or NIC teaming failure (http://www.howtonetworking.com/Networking/nicteam1.htm) I asked Genesys how to regenerate the license key. “Reinstall” was their only answer (and still is!).
Since the original installation was a complete pain as well as the associated EMPS configuration I thought that I would try to find a solution other than a complete reinstall.
A hunt through the binaries seemed to reveal the answer in some VAR PHP code in the file ‘vwm_start_setup.php’ – the encryption is based on the DES algorithm using ECB as the cipher and a secrey key that can be found in plain text within that file.
A bit of C# .NET code worked both ways on the default VAR password ‘vareports’ which is encrpyted as ‘SaEhZ8yoqDYz02y5HxG8qA’:
However, when I tried the same encryption on a MAC address I did not get the correct results. I also noticed that encrypted VAR passwords are 192 bits whereas encrypted license keys for IPCS are 160 bits. Damn!
Maybe the encrpytion routines are different between VAR and IPCS and were created by different developers at Telera? Back to the drawing board.
Next, I did some disassembly of the IPCS installation code in ‘CNSetup.dll’ and found that standard Microsoft Crypto API’s we being used:
An RSA crypto provider is obtained and an MD5 hash created:
The MAC address from the NIC is added to the hash:
A session key is created based on the MD5 hash of the MAC address. The value ‘26625’ tells me that the algorithm is RC2:
Finally, the data is encryped using the session key:
OK, I now had all the information and tried it in some C# .NET code:
It’s not quite working yet and think the expected result will be a string starting ‘TELERA’. Hopefully I can get it working next week and save myself a painful re-install. Will keep you posted.