Here is the new license generator for the current FWs of GDS1000B and GDS2000E, based on the wgoeo post (msg #3).
private static void InstekKG(string serial)
{
// This works for GDS1000B and GDS2000E
string[] opt = { "PWR", "BUS", "SRH", "SGM", "BW100", "BW200", "BW300", "SA" }; // Prefixes: "DS1KB-" or "DS2E-"
// uint[] ClearCode = { 0x11111111, 0xABABABAB, 0x22222222, 0xCDCDCDCD }; // OLD -- GDS1000B (up to v1.18) and GDS2000E (up to v1.28)
uint[] ClearCode = { 0x74B0DC51, 0x46E87CCD, 0x25E45D32, 0x515F007C }; // NEW or
uint[] ClearCode = { 0x19495CFF, 0x257130A3, 0x3D1B58BA, 0x74B0DC51 }; // v1.23, v1.24, ....
serial = serial.Trim();
int serial_int = Int32.Parse(serial.Substring(serial.Length - 4, 4));
int pid_sum = 0;
for (int i = 0; i < serial.Length - 4; i++)
pid_sum += serial[i];
for (int i = 0; i < opt.Length; i++)
{
int[] a = new int[2];
a[0] = (pid_sum << 24) | ((i << 8) & 0xF00);
a[1] = (1 << 24) | ((serial_int << 8) & 0xFFFF00) | ((pid_sum >> 8) & 0xFF);
for (int j = 0, k = -0x61C88647; j < 32; j++, k -= 0x61C88647)
{
a[0] += (int)((16 * a[1] + ClearCode[0]) ^ (a[1] + k) ^ ((a[1] >> 5) + ClearCode[1]));
a[1] += (int)((16 * a[0] + ClearCode[2]) ^ (a[0] + k) ^ ((a[0] >> 5) + ClearCode[3]));
}
Console.WriteLine("DS1KB-{0}.lic / DS2E-{0}.lic - [{1:x8}{2:x8}]", opt[i], a[1], a[0]);
}
}
Those who prefer the javascript version can replace just the ClearCode constants in the script (I leave that as homework). The SA option was also added (only for the 2000E).
Edit1: Tested successfully by some members in DS2E and MSO equipments. This will not work on 2000A because the S/N has a different format.
Edit2: It seems there are more than one new combination of ClearCode(s) so test both.