Clandestiny
November 2nd, 2000, 21:33
Hi guys,
I have sucessfully registered the moving pix application and I think I've *almost* decoded its registration checking algorithm, but one thing is puzzling me.
I examined the parameters being passed to the GetVolumeInformationA function (as per mentioned in an earlier hint, the address of the volume serial number appears to be the relevant piece of information here)and looked at the return values. Maybe I am misunderstanding the function, but according to my API reference, the GetVolumeInformation function returns either a true or false value depending on whether or not the information is retrieved. From this I thought it only returns a 0 or 1 and nothing else. The 1 is returned in eax and makes sense, but there also seem to be some other values being returned as I step over the function in SoftIce. The return values are...
eax = 1
ecx = FF
edx = 4006
ss = 006AF8FC --> 224912F3
I don't quite get why it returns these other values when the api reference says the function only returns a 0 or 1.
Nevertheless, the stack segment value returned in this function appears to be the important piece of information, for this address pointed to by the stack segment holds a value crucial to the key calculation.
Looking back at the parameters being passed into the function, this stack segment address corresponds to the address of the volume serial number. When I displayed the contents of this memory location before the function was called, there was no relevent info in this location, but after the funcion call it contains a key piece of information... I guess the function returns more than just a 0 or 1 ???
Also, maybe someone could provide a little more explanation on this function than my API reference has given me. I've cracked several serial # protections and have never come across this approach before. In fact, were it not for the hint about the GetVolumeInformation, I would have probably stumbled around in the code for quite a while before I figured it out. Is this a common scheme ? In other words, if you had not seen this approach before, what would alert you to this tactic. Is GetVolumeInformation a common api call for programs and what does a program use this information for (other than generating a serial)??? I think it would be important to understand its use in a general sense in order to be able to tell if such a call would be "suspicious".
As soon a someone clarifies the return values of this function a little more, I will try to code a key gen for it.
I don't wan't to give too much away about the algorithm so others may have a chance to play with it, but I will give a general piece of advice... It can never hurt to look at your inputs and other given information in both hex and decimal since most calculations are performed in hex in the computer. Translating your decimal values into hex can give some clues about the origin of certain values...once I realized this it clarified quite a lot.
Cheers,
Clandestiny
I have sucessfully registered the moving pix application and I think I've *almost* decoded its registration checking algorithm, but one thing is puzzling me.
I examined the parameters being passed to the GetVolumeInformationA function (as per mentioned in an earlier hint, the address of the volume serial number appears to be the relevant piece of information here)and looked at the return values. Maybe I am misunderstanding the function, but according to my API reference, the GetVolumeInformation function returns either a true or false value depending on whether or not the information is retrieved. From this I thought it only returns a 0 or 1 and nothing else. The 1 is returned in eax and makes sense, but there also seem to be some other values being returned as I step over the function in SoftIce. The return values are...
eax = 1
ecx = FF
edx = 4006
ss = 006AF8FC --> 224912F3
I don't quite get why it returns these other values when the api reference says the function only returns a 0 or 1.
Nevertheless, the stack segment value returned in this function appears to be the important piece of information, for this address pointed to by the stack segment holds a value crucial to the key calculation.
Looking back at the parameters being passed into the function, this stack segment address corresponds to the address of the volume serial number. When I displayed the contents of this memory location before the function was called, there was no relevent info in this location, but after the funcion call it contains a key piece of information... I guess the function returns more than just a 0 or 1 ???
Also, maybe someone could provide a little more explanation on this function than my API reference has given me. I've cracked several serial # protections and have never come across this approach before. In fact, were it not for the hint about the GetVolumeInformation, I would have probably stumbled around in the code for quite a while before I figured it out. Is this a common scheme ? In other words, if you had not seen this approach before, what would alert you to this tactic. Is GetVolumeInformation a common api call for programs and what does a program use this information for (other than generating a serial)??? I think it would be important to understand its use in a general sense in order to be able to tell if such a call would be "suspicious".
As soon a someone clarifies the return values of this function a little more, I will try to code a key gen for it.
I don't wan't to give too much away about the algorithm so others may have a chance to play with it, but I will give a general piece of advice... It can never hurt to look at your inputs and other given information in both hex and decimal since most calculations are performed in hex in the computer. Translating your decimal values into hex can give some clues about the origin of certain values...once I realized this it clarified quite a lot.
Cheers,
Clandestiny