there's nothing more fun, as a reverse engineer, then checking into a DLL to see about cracking it (it's been out of support since the Clinton administration, so I have to) and just seeing "validate_license" as an exported symbol.

GEE I WONDER WHERE I SHOULD START LOOKING

maybe next time they can just put in a validate_serial_number and check_if_serial_number_is_correct function

oh great it's right next to a string buffer labeled "verify_password"

I'm sure that'll come in handy

oh my god

I think this is even easier than I thought.

So the function looks basically like this:
validate_authorization_code (serial_number, expiration_date, max_users, authorization_code), right?

and it takes the serial number and expiration_date and max_users and confirms the authorization_code matches some hash or something to make sure it fits those serial numbers and expiration_date and max_users

now a sensible way to do this would be to combine all these values into some complex hashing function and return if it matches some algorithm

a less sensible way to do this would be to have validate_authorization_code be implemented like this:

correct_authorization_code = generate_authorization_code(serial, expiration, max_users);
return strcmp(correct_authorization_code, authorization_code) == 0;

GUESS WHICH ONE THEY DID?
so I don't really even need to crack this. I can just use their own code to generate my own serial numbers.
or to be more specific: I can just make up my own serial numbers (69420 it is!) and then generate an authorization code that says that's a valid serial

the authorization_code generator has an "encrypt" parameter that does some simple XORing

this code passes 0 for it, so that's not even turned on

time to hack a DLL in a hexeditor!
this DLL would be better if it had more 0x90s in it
bah. my code is crashing in the DLL before I even modify it. troublesome. I'll need to do more spelunking
it'd be nice if this DLL worked on anything newer than NT4.
it'd be a lot easier to debug if I could just run it on something more modern
I got it to run something modern. It turns out the DLL refuses to load if you don't have a config file in the right place.
And I was hoping I could cheat and make the control panel do my work for me, but it turns out it does some extra validation. Boo

the most infuriating thing in computers is when you have a program that does X, so you modify it, and it still does X. so you modify it more, and it still does X. so you change a bunch of stuff, and it still does X.

AM I MAKING CHANGES OR NOT? STOP IGNORING ME

@foone the PEBKAC analog, PEBKAM (problem exists between keyboard and monitor, or "is this even hooked up???")