Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GenerateSerial PROC uses ebx edx esi edi lpszName:DWORD, pProductID:DWORD, dwMajorVersion:DWORD
- LOCAL szTemp[256]:BYTE
- LOCAL szTemp2[256]:BYTE
- LOCAL MD5Result:MD5Struct
- LOCAL dwImul:DWORD
- LOCAL dwFirstVal:DWORD
- LOCAL dwSecondVal:DWORD
- LOCAL dwThirdVal:DWORD
- LOCAL dwFourthVal:DWORD
- LOCAL dwStringDWORDs[3]:DWORD
- LOCAL dwSerialDWORD1:DWORD
- LOCAL dwSerialDWORD2:DWORD
- invoke wsprintf,ADDR szTemp,offset szFmt1, dword ptr [lpszName]
- invoke GetStringMD5,ADDR szTemp,ADDR MD5Result
- mov esi,dword ptr [pProductID]
- invoke lstrlen,esi
- movzx eax,byte ptr [esi+eax-1]
- mov dword ptr [dwImul],eax
- invoke StrToInt,esi
- add eax,dword ptr [dwMajorVersion]
- imul eax, dword ptr [dwImul]
- invoke wsprintf,ADDR szTemp2, offset szFmt2, dword ptr [dwImul], eax, dword ptr [dwMajorVersion], eax
- mov byte ptr [szTemp2+10],0
- mov eax,dword ptr [dwMajorVersion]
- add eax, 1Fh
- mov dword ptr [dwFirstVal],eax
- mov eax,dword ptr [dwMajorVersion]
- add eax, 21h
- mov dword ptr [dwSecondVal],eax
- fild dword ptr [dwFirstVal]
- fsin
- fmul dword ptr [dwFMulVal]
- invoke GetFPUVal
- cdq
- xor eax,edx
- sub eax,edx
- mov dword ptr [dwThirdVal],eax
- fild dword ptr [dwSecondVal]
- fcos
- fmul dword ptr [dwFMulVal]
- invoke GetFPUVal
- cdq
- xor eax,edx
- sub eax,edx
- mov dword ptr [dwFourthVal],eax
- .if dwThirdVal > 9
- .repeat
- add dwThirdVal, -1Fh
- .until dwThirdVal < 9
- .endif
- .if dwFourthVal > 9
- .repeat
- add dwFourthVal, -21h
- .until dwFourthVal < 9
- .endif
- xor edi,edi
- xor edx,edx
- mov ecx,dwThirdVal
- .repeat
- movsx eax,byte ptr [MD5Result.Result+edx]
- add edi,eax
- shl edi,cl
- add edx,1
- .until edx == 10h
- mov ebx,dwThirdVal
- mov eax,edi
- xor edx,edx
- div ebx
- cdq
- xor eax,edx
- sub eax,edx
- mov dwStringDWORDs[0*4],eax
- imul ebx,edi
- mov eax,ebx
- cdq
- xor eax,edx
- sub eax,edx
- mov dwStringDWORDs[1*4],eax
- mov eax,edi
- cdq
- xor eax,edx
- sub eax,edx
- mov dwStringDWORDs[2*4],eax
- invoke wsprintf,ADDR szTemp, offset szFmt3, dwStringDWORDs[2*4], dwStringDWORDs[1*4], dwStringDWORDs[0*4]
- invoke StrToInt,ADDR szTemp
- cdq
- xor eax,edx
- sub eax,edx
- mov dwSerialDWORD1,eax
- xor edi,edi
- xor edx,edx
- mov ecx,dwFourthVal
- jmp @f
- .repeat
- movsx eax,al
- add edi,eax
- shl edi,cl
- add edx,1
- @@::
- mov al, byte ptr [szTemp2+edx]
- .until !al
- mov ebx,dwFourthVal
- mov eax,edi
- xor edx,edx
- div ebx
- cdq
- xor eax,edx
- sub eax,edx
- mov dword ptr [dwStringDWORDs+0*4],eax
- imul ebx,edi
- mov eax,ebx
- cdq
- xor eax,edx
- sub eax,edx
- mov dword ptr [dwStringDWORDs+1*4],eax
- mov eax,edi
- cdq
- xor eax,edx
- sub eax,edx
- mov dword ptr [dwStringDWORDs+2*4],eax
- invoke wsprintf,ADDR szTemp, offset szFmt3, dwStringDWORDs[2*4], dwStringDWORDs[1*4], dwStringDWORDs[0*4]
- invoke StrToInt,ADDR szTemp
- cdq
- xor eax,edx
- sub eax,edx
- mov dwSerialDWORD2,eax
- mov eax,dwLangID
- invoke wsprintf,offset szRegString,offset szFmt4,dword ptr [dwLanguages+eax*4],dwSerialDWORD1, dwSerialDWORD2,offset szSuffix1
- mov eax, offset szRegString
- Ret
- GenerateSerial EndP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement