First off, I should point out that I know
very litle about GM seed/key algorithms, or GM ECUs in general - so I'm not really up to speed on what ECU is used in what cars, and couldn't even pick a '411 ECU in a lineup if it was painted pink so don't take anything I say as being right, or even on the right track
I understand that there are 256 different algorithms defined by GM (or there was a set of 256 defined ~20 years ago), and each one consisting of 13 bytes - and some of those are effectively NOPs.
I think I was probably barking up the wrong tree assuming that each of the bytes was either static seeding data or a machine instruction, it's more likely that at least some if not all of them are more like pointers to functions? i.e. a 0x14 might be a reference to a function to divide by 3 and then add 4, rather than a specific assembler mneumonic. I haven't really devoted much time to looking in detail, so still just wild assumptions but it would make more sense.
Anyway - the DLL was written in VB, as you said that was what you were coding in, so a native dll to keep it simple.
The SeedtoKey function returns a single key, not a list of possible keys.
The 3 seed/key combinations you posted all use the same algorithm, which is easy to find with google.
If you try your own seed/key calculations using that algorithm but don't always get the right answer, '&' the key with 0xFF to discard all but the lowest 8 bits, that step seems to be missing in all the descriptions I came across.
But, that's the only algorithm the dll uses. I have no idea whether it's common across all 411 ECUs, or if it's just a coincidence that the 3 sets you posted all use the same one.