; ; Alan ; You shouldnt use DS: SS: etc, Windows is a flat memory model ; mov dword ptr [something], eax ; ; Saves a byte too ;) ; CalcProc proc hWnd:HWND Local ebxstore:DWORD Local lenstore:DWORD invoke RtlZeroMemory,addr NameBuffer,sizeof NameBuffer invoke RtlZeroMemory,addr SerialBuffer,sizeof SerialBuffer invoke RtlZeroMemory,addr TempBuffer,sizeof TempBuffer invoke RtlZeroMemory,addr TempiBuffer,sizeof TempiBuffer invoke RtlZeroMemory,addr TempjBuffer,sizeof TempjBuffer invoke RtlZeroMemory,addr rBuffer,sizeof rBuffer invoke RtlZeroMemory,addr sBuffer,sizeof sBuffer invoke GetDlgItemText,hWnd,1024,addr NameBuffer,sizeof NameBuffer mov ebx,eax cmp eax,3h ja lenok invoke SetDlgItemText,hWnd,1007,chr$("Name too Short . . .") jmp end0 lenok: cmp eax,0fh jb lenoki invoke SetDlgItemText,hWnd,1007,chr$("Name too Long . . .") jmp end0 lenoki: add eax,4h mov dword ptr ds:[lenstore],eax invoke GetTickCount bswap eax xor eax,ecx add ebx,ecx add eax,ebx xor eax,esi add al,dl xor ebx,eax bswap ebx add ebx,0DEADBEEFh xor ebx,eax push ebx bswap eax add eax,ebx add eax,esp bswap eax mov edi,eax push eax push edx cmp edx,0h jne ecxnot mov ecx,0ABCDh ecxnot: xor edx,edx cdq xor edx,edx div ecx bswap edx add eax,edx xor eax,ebx add ecx,eax pop eax pop edx add eax,ecx xor eax,edi invoke wsprintf,addr rBuffer,chr$("%X"),eax mov esi,offset rBuffer ;mov byte ptr ds:[esi+2h],49h ;mov byte ptr ds:[esi+3h],49h mov ecx,4h add esi,4h nn: mov byte ptr ds:[esi],00h inc esi dec ecx cmp ecx,0h jne nn invoke lstrcpy,addr TempBuffer,addr rBuffer invoke CharUpper,addr NameBuffer invoke lstrcat,addr rBuffer,addr NameBuffer mov dword ptr ds:[ebxstore],02D44Fh mov esi,offset rBuffer mov ecx,dword ptr ds:[lenstore] mov ebx,dword ptr ds:[ebxstore] nxtch: xor eax,eax mov al,byte ptr ds:[esi] imul ebx add eax,dword ptr ds:[ebxstore] mov ebx,eax inc esi dec dword ptr ds:[lenstore] cmp dword ptr ds:[lenstore],0h jne nxtch invoke wsprintf,addr sBuffer,chr$("%lX"),eax invoke lstrcat,addr TempBuffer,chr$("i") mov esi,offset sBuffer mov edi,offset TempBuffer add edi,5h mov ecx,8h notyet: mov al,byte ptr ds:[esi] mov byte ptr ds:[edi],al inc esi inc edi cmp ecx,05h jne notd mov byte ptr ds:[edi],02Dh inc edi notd: dec ecx cmp ecx,0h jne notyet invoke lstrcpy,addr SerialBuffer,addr TempBuffer invoke SetDlgItemText,hWnd,1007,addr SerialBuffer end0: xor eax,eax ret CalcProc EndP