.model tiny .386 org 100h .data GroupLogo db 13,10 db ' ммммм ',13,10 db ' л м л ',13,10 db ' лпппппппп м ппппп п пппппппппппппппппппппл лппппппппппппппп п ппппл ',13,10 db ' л ГАллллллл ГВлллллллп ГАлллплппппппп п пппп ГАлллплпппппВллллВм л ',13,10 db ' л ГБллллллл ГВллллллл ГБллллллл ГВлллллллп ГБллллллл ГВллллллл л ',13,10 db ' л ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВллллллл л ',13,10 db ' п ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВллллллл лммм ',13,10 db ' п ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВлллллллм м л ',13,10 db ' л ГВллллллл ГВллллллл ГВллллллл ГВллллллл ГВллллллл л ',13,10 db ' л ГВлллллллмммммлмлВп ГВлллллллмммммлмлллл ГВлллллллпп п п л ',13,10 db ' лммммммммммммммммммммммммммм м мммммммммммммммммммммм п лппппппппп п пп ',13,10 db ' .::[ u n i t e d њ c r ‘ c k i n g њ f o r c e ]::. л п л Antibody ',13,10 db ' лммммммммммммммммммммммммммм м мммммммммммммммммммммм п лппппппппп п пп ',13,10 db ' -----=====----- ',13,10 db ' [ў] All 4Developers Software - Key Generator by Quantico [ў] ',13,10 db ' -----=====----- ',13,10 db ' ',13,10,'$' Whichproduct db 13,10 db '',13,10 db '(1) - ActiveX Manager v1.3 ',13,10 db '(2) - Add/Remove4Good v2.0 ',13,10 db '(3) - Cookie Terminator v1.1 ',13,10 db '(4) - Registry BookMarks v1.0 ',13,10 db '(5) - Registry Crawler v1.0 ',13,10 db '(6) - Talking E-mail v1.22 ',13,10 db '',13,10 db 'Enter a product (1-6) : ','$',13,10 db ' ',13,10 IntroMsgOne db 13,10,'Enter a name please : ','$' ErrorMsg db 13,10,' Need 8-20 digits, try again...',13,10,'$' ShowCodeMsg db 13,10,'Registration number : ' thestartpart db 5 dup(0) oneletter db 0 CodeBuffer db 20h dup(0),'$' ShowCodeMsg2 db 13,10,'Registration number : ' thestartpart2 db 5 dup(0) CodeBuffer2 db 20h dup(0),'$' datatable1 db '87ae2401my69' datatable2 db 'YMA19X@24$Z%' datatable3 db 'V9ZQA3%T#RN2M+&X7PG85' activex db '6577-' addremove db '6582-' cookieterm db '6784-' registrybook db '8266-p' registrycrawl db '8267-' talkemail db '8469-' temp db 0 temp2 db 0 NameBuffer db 18h, 50h dup(0) ProdBuffer db 18h, 5 dup(0) Convert_Digs db '0123456789ABCDEF' namelength db 0 .code .startup main proc near mov ah, 09h ; lea edx, GroupLogo ; int 21h ; show group logo mov ah, 09h ; lea edx, IntroMsgOne ; int 21h ; show intro and ask for input mov bx, 1408h ; limits for string input lea edi, NameBuffer ; mov esi, offset namelength call getstr ; read user input jc @error ; xor eax, eax ; clear eax mov ah, 09h ; lea edx, Whichproduct ; int 21h ; show product message and ask for input xor edi, edi xor esi, esi lea edi, ProdBuffer ; call getprod ; read user input xor eax, eax ; clear eax int 3 lea dx, ProdBuffer+2 ; put what they typed into ax movsx eax, byte ptr [edx] cmp ax, 31h ; is ax = 1? je @activex ; go to check second digit (10-18) cmp ax, 32h ; is ax = 2 je @addremove ; then go check for 2X cmp ax, 33h ; is ax = 3 je @cookieterm ; cmp ax, 34h ; je @registrybook ; cmp ax, 35h ; ax = 5 ? je @registrycrawl cmp ax, 36h je @talkemail @activex: mov esi, offset activex mov edi, offset thestartpart mov ecx, 05 rep movsb xor edx, edx movzx eax, byte ptr [namelength] mov ecx, 05 div ecx mov eax, offset datatable1 mov al, byte ptr [eax+edx] mov byte ptr [oneletter], al xor eax, eax xor edx, edx to_start1: mov ecx, 03 movzx eax, byte ptr [temp] xor edx, edx div ecx test edx, edx jne @00401742 movzx eax, byte ptr [temp] mov al, byte ptr [NameBuffer+eax+2] cbw mov cl, 02 idiv cl add al, 20h cmp al, 5Ah jle @00401714 cmp al, 61h jge @00401714 add al, 06 @00401714: cmp al, 39h jle @0040171E cmp al, 41h jge @0040171E add al, 08 @0040171E: movzx edx, byte ptr [temp2] inc byte ptr [temp2] mov esi, offset CodeBuffer add esi, edx mov byte ptr [esi], al @00401742: mov ecx, 0Dh movzx eax, byte ptr [temp] xor edx, edx div ecx test edx, edx jne @0040177A mov esi, offset CodeBuffer mov al, 00h call strlngth dec ecx mov byte ptr [CodeBuffer+ecx], 'x' inc byte ptr [temp2] @0040177A: inc byte ptr [temp] push eax movzx eax, byte ptr [namelength] cmp al, byte ptr [temp] pop eax ja to_start1 mov esi, offset CodeBuffer mov al, 00h call strlngth dec ecx mov byte ptr [CodeBuffer+ecx], 'z' jmp @continue @addremove: mov esi, offset addremove mov edi, offset thestartpart mov ecx, 05 rep movsb xor edx, edx movzx eax, byte ptr [namelength] mov ecx, 0Ch div ecx mov eax, offset datatable1 mov al, byte ptr [eax+edx] mov byte ptr [oneletter], al xor eax, eax xor edx, edx to_start2: test byte ptr [temp], 01 jne @@0040177A movzx eax, byte ptr [temp] mov al, byte ptr [NameBuffer+eax+2] cbw mov cl, 02 idiv cl add al, 20h cmp al, 5Ah jle @@00401714 cmp al, 61h jge @@00401714 add al, 06 @@00401714: cmp al, 39h jle @@0040171E cmp al, 41h jge @@0040171E add al, 08 @@0040171E: movzx edx, byte ptr [temp2] inc byte ptr [temp2] mov esi, offset CodeBuffer add esi, edx mov byte ptr [esi], al @@0040177A: inc byte ptr [temp] push eax movzx eax, byte ptr [namelength] cmp al, byte ptr [temp] pop eax ja to_start2 jmp @continue @cookieterm: mov esi, offset cookieterm mov edi, offset thestartpart mov ecx, 05 rep movsb xor edx, edx movzx eax, byte ptr [namelength] mov ecx, 0Ch div ecx mov eax, offset datatable1 mov al, byte ptr [eax+edx] mov byte ptr [oneletter], al xor eax, eax xor edx, edx to_start3: mov ecx, 03 movzx eax, byte ptr [temp] xor edx, edx div ecx test edx, edx jne @@@0040177A movzx eax, byte ptr [temp] mov al, byte ptr [NameBuffer+eax+2] cbw mov cl, 02 idiv cl add al, 32h cmp al, 5Ah jle @@@00401714 cmp al, 61h jge @@@00401714 add al, 06 @@@00401714: cmp al, 39h jle @@@0040171E cmp al, 41h jge @@@0040171E add al, 08 @@@0040171E: movzx edx, byte ptr [temp2] inc byte ptr [temp2] mov esi, offset CodeBuffer add esi, edx mov byte ptr [esi], al @@@0040177A: inc byte ptr [temp] push eax movzx eax, byte ptr [namelength] cmp al, byte ptr [temp] pop eax ja to_start3 mov esi, offset CodeBuffer mov al, 00h call strlngth ; dec ecx mov byte ptr [temp2], cl add ecx, 05 mov eax, ecx mov ecx, 0Ch cdq idiv ecx mov eax, offset [datatable1] mov al, byte ptr [eax+edx] mov cl, byte ptr [temp2] dec cl mov byte ptr [CodeBuffer+ecx], al jmp @continue @registrybook: mov esi, offset registrybook mov edi, offset thestartpart mov ecx, 06 rep movsb xor eax, eax xor edx, edx to_start4: test byte ptr [temp], 03 jne @@@@0040177A movzx eax, byte ptr [temp] mov al, byte ptr [NameBuffer+eax+2] cbw mov cl, 02 idiv cl add al, 25h cmp al, 5Ah jle @@@@00401714 cmp al, 61h jge @@@@00401714 add al, 06 @@@@00401714: cmp al, 39h jle @@@@0040171E cmp al, 41h jge @@@@0040171E add al, 08 @@@@0040171E: movzx edx, byte ptr [temp2] inc byte ptr [temp2] mov esi, offset CodeBuffer add esi, edx mov byte ptr [esi], al @@@@0040177A: inc byte ptr [temp] push eax movzx eax, byte ptr [namelength] cmp al, byte ptr [temp] pop eax ja to_start4 mov esi, offset CodeBuffer mov al, 00h call strlngth dec ecx mov byte ptr [temp2], cl movzx eax, byte ptr [namelength] xor edx, edx mov ecx, 0Ch idiv ecx mov al, byte ptr [datatable2+edx] movzx ecx, byte ptr [temp2] mov byte ptr [CodeBuffer+ecx], al inc byte ptr [temp2] movzx ecx, byte ptr [temp2] add ecx, 05 mov eax, ecx mov ecx, 0Ch cdq idiv ecx mov al, byte ptr [datatable2+edx] mov cl, byte ptr [temp2] mov byte ptr [CodeBuffer+ecx], al jmp @continue @registrycrawl: mov esi, offset registrycrawl mov edi, offset thestartpart mov ecx, 05 rep movsb xor edx, edx movzx eax, byte ptr [namelength] mov ecx, 0Ch div ecx mov eax, offset datatable2 mov al, byte ptr [eax+edx] mov byte ptr [oneletter], al xor eax, eax xor edx, edx to_start5: mov ecx, 03 movzx eax, byte ptr [temp] xor edx, edx div ecx test edx, edx jne @@@@@0040177A movzx eax, byte ptr [temp] mov al, byte ptr [NameBuffer+eax+2] cbw mov cl, 02 idiv cl add al, 22h cmp al, 5Ah jle @@@@@00401714 cmp al, 61h jge @@@@@00401714 add al, 06 @@@@@00401714: cmp al, 39h jle @@@@@0040171E cmp al, 41h jge @@@@@0040171E add al, 08 @@@@@0040171E: movzx edx, byte ptr [temp2] inc byte ptr [temp2] mov esi, offset CodeBuffer add esi, edx mov byte ptr [esi], al @@@@@0040177A: inc byte ptr [temp] push eax movzx eax, byte ptr [namelength] cmp al, byte ptr [temp] pop eax ja to_start5 mov esi, offset CodeBuffer mov al, 00h call strlngth ; dec ecx mov byte ptr [temp2], cl add ecx, 05 mov eax, ecx mov ecx, 0Ch cdq idiv ecx mov eax, offset [datatable2] mov al, byte ptr [eax+edx] mov cl, byte ptr [temp2] dec cl mov byte ptr [CodeBuffer+ecx], al jmp @continue @talkemail: mov esi, offset talkemail mov edi, offset thestartpart2 mov ecx, 05 rep movsb xor eax, eax to_start6: mov al, byte ptr [temp] mov al, byte ptr [NameBuffer+eax+2] imul ax, ax, 0Dh add ax, 7 mov cl, 15h xor edx, edx idiv ecx mov esi, offset datatable3 add esi, edx mov al, byte ptr [esi] @@@@@@0040171E: movzx edx, byte ptr [temp2] inc byte ptr [temp2] mov esi, offset CodeBuffer2 add esi, edx mov byte ptr [esi], al @@@@@@0040177A: inc byte ptr [temp] movzx eax, byte ptr [namelength] cmp al, byte ptr [temp] ja to_start6 mov ah, 09h ; lea dx, ShowCodeMsg2 ; int 21h ; print serial number jmp @exit ; finished, quit @continue: mov ah, 09h ; lea dx, ShowCodeMsg ; int 21h ; print serial number jmp @exit ; finished, quit @error: mov ah, 09h lea dx, ErrorMsg int 21h @exit: mov al, 00h ; mov ah, 4Ch ; int 21h ; terminate program main endp ; get string from user ; input : ; edi = pointer to buffer ; bl = min length ; bh = max length ; output : ; CF error, cx number of bytes read getstr proc near push dx ; save dx mov dx, di ; mov ah, 0Ah ; int 021h ; get user input movsx ecx, byte ptr [edi + 1] ; get number of digits mov byte ptr [edi + ecx + 2], 00h cmp cl, bh ; check maximum jg @@0 cmp cl, bl ; check minimum jl @@0 mov byte ptr [esi], cl ; store length xor ch, ch clc ; clear CF jmp @@1 @@0: stc ; set CF (carry flag) @@1: pop dx ; restore dx ret getstr endp ; returns ECX= length of String in DS:ESI - terminated by CHAR in AL ; registers changed: ECX ; Assumes ES=DS strlngth PROC pushf push edi push esi push edx mov edi,esi xor ecx,ecx dec ecx cld repnz scasb xor edx,edx sub edx,ecx dec edx mov ecx,edx pop edx pop esi pop edi popf Ret strlngth endp getprod proc near push dx ; save dx mov dx, di ; mov ah, 0Ah ; int 021h ; get user input movsx ecx, byte ptr [edi + 1] ; get number of digits mov byte ptr [edi + ecx + 2], 00h xor ch, ch clc ; clear CF pop dx ; restore dx ret getprod endp end main