Desktop Themes v1.87 http://www.lss.com.au/ I'll mainly be focusing on taking apart the algo here, so I assume you know how to find it in SICE and how to break and such. Pretty easy keygen here, so let's get to it. The first thing you wanna do is break on the standard functions and trace through a bit. Eventually you'll find some code that looks like this: :0040570A 85C9 test ecx, ecx ; test len for 0 :0040570C 7618 jbe 00405726 ; if 0 goto addy * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00405724(C) | :0040570E 0FBE5405D0 movsx edx, byte ptr [ebp+eax-30] ; mov a letter :00405713 8BF8 mov edi, eax ; mov eax to edi :00405715 83E701 and edi, 00000001 ; bitwise and :00405718 47 inc edi ; inc :00405719 0FAFD7 imul edx, edi ; mul with letter :0040571C 03D0 add edx, eax ; add to serial :0040571E 0155FC add dword ptr [ebp-04], edx ; mov it to serial reg :00405721 40 inc eax ; increment counter :00405722 3BC1 cmp eax, ecx ; compare eax with len :00405724 72E8 jb 0040570E ; if below continue * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040570C(C) | :00405726 8175FC04446482 xor dword ptr [ebp-04], 82644404 ; else xor :0040572D 7D08 jge 00405737 :0040572F 8B45FC mov eax, dword ptr [ebp-04] ; mov serial to eax :00405732 F7D8 neg eax ; NEG it :00405734 8945FC mov dword ptr [ebp-04], eax ; move it back That's it! Pretty simple, no? Now a simple ASM keygen, you put it in your own program. mov ecx,eax ; mov length to ecx xor eax,eax loop1: movsx edx, byte ptr [username + eax] mov ebx, eax and ebx, 00000001 inc ebx imul edx, ebx add edx, eax add edi, edx inc eax cmp eax, ecx jb loop1 xor edi,82644404h neg edi endloop: mov eax,edi mov [yourser],eax pop edi pop edx pop ecx pop ebx pop eax That's all for now! -Muad'Dib