一个KeyGen代码

编译后只有8,128个字节,呵呵,应该和汇编语言编译的大小差不多了。

//  KeyGen.cpp XXXX 1.0.1.278 KeyGen
//  written by yAnfEI 2007-05-26.

#include 
" stdafx.h "
#include 
" resource.h "

#pragma  comment(linker, "/FILEALIGN:16")
#pragma  comment(linker, "/ALIGN:16")
#pragma  comment(linker, "/OPT:REF")
#pragma  comment(linker, "/OPT:ICF")
#pragma  comment(linker, "/OPT:NOWIN98")

#pragma  comment(linker, "/MERGE:.rdata=.data")
#pragma  comment(linker, "/MERGE:.text=.data")
#pragma  comment(linker, "/MERGE:.reloc=.data")

#pragma  optimize("gsy", on)
#pragma  comment(linker, "/ENTRY:WinMain")

#define  MAX_LENGTH      256

CONST PCHAR szUniqueID 
=   " {F05787D1-A85F-4264-AD7B-333A1FF1347F} " ;
CHAR        szSerial[MAX_LENGTH];
CHAR        szUsername[MAX_LENGTH];
CHAR        szResult[MAX_LENGTH];
CHAR        szHexStr[
3 ];

INT         Index 
=   0 ;
INT         Addon 
=   0 ;
INT         Value 
=   0 ;
UINT        i 
=   0 ;
UINT        j 
=   0 ;

LRESULT CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);
static   void  OnChangeUsername(HWND);
static   void  ToUpperCase(PCHAR);
static   void  IntToHex(UINT, PCHAR, INT);

INT APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     INT       nCmdShow)
{
    HINSTANCE hInst 
= GetModuleHandle(0);
    INT result 
= DialogBoxParam(hInst, (LPCTSTR)IDD_KEYGEN, NULL, (DLGPROC)DialogProc, NULL);
    
return result;
}



LRESULT CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    CHAR
* lpUserName = "yAnfEI";
    
switch (message)
    
{
    
case WM_INITDIALOG:
        SetDlgItemText(hWnd, IDC_USERNAME, lpUserName);
        
return TRUE;
    
case WM_COMMAND:
        
if (LOWORD(wParam) == IDC_USERNAME && HIWORD(wParam) == EN_CHANGE) {
            OnChangeUsername(hWnd);
            
return TRUE;
        }

        
else
            
if (LOWORD(wParam) == IDCANCEL)
            
{
                EndDialog(hWnd, LOWORD(wParam));
                
return TRUE;
            }

            
break;
    }

    
return FALSE;
}


static   void  ToUpperCase(PCHAR str)
{
    INT i;
    CHAR 
*dest;

    dest 
= str;
    
for (i = strlen(str); i > 0; i--{
        
if (*str != ' ')
            
*dest++ = toupper(*str);
        str
++;
    }

    
*dest = (CHAR) 0;
}


static   void  IntToHex(UINT  in , PCHAR  out , INT digits)  {
    INT shift;
    UINT d;

    
while (--digits >= 0{
        shift 
= digits << 2;
        d 
= 0x0FL & (in >> shift);
        
if (d <= 9{
            
*out++ = (CHAR)'0' + d;
        }
 else {
            
*out++ = (CHAR)'A' + (d - 10);
        }

    }

    
*out = '';
}


static   void  OnChangeUsername(HWND hWnd)
{
    ZeroMemory(szSerial, 
sizeof(szSerial));
    ZeroMemory(szResult, 
sizeof(szResult));
    ZeroMemory(szHexStr, 
sizeof(szHexStr));

    GetDlgItemText(hWnd, IDC_USERNAME, szUsername, 
100);
    
if (strlen(szUsername) == 0{
        SetDlgItemText(hWnd, IDC_LICENSE_KEY, szResult);
        
return;
    }

    ToUpperCase(szUsername);

    
for(i = 0; i < strlen(szUsername); i++{
        Addon 
+= szUsername[i] * (i + 1);
    }


    
for(i = 1; i <= 12; i++{
        Value 
= szUniqueID[i*2-1^ szUniqueID[i-1] ;
        Value 
^=  szUsername[Index];
        Value 
^=  ((Addon + i) % 200);

        IntToHex(Value, szHexStr, 
2);
        strcat(szSerial, szHexStr);

        Addon 
+= (szUsername[Index] ^ i);
        Index
++;

        
if (Index >= (INT)strlen(szUsername)) Index = 0;
    }


    
for(i = 0, j = 0; i < strlen(szSerial); i++, j++{
        
if (i == 8 || i ==16{
            szResult[j] 
= '-';
            j
++;
        }

        szResult[j] 
= szSerial[i];
    }


    SetDlgItemText(hWnd, IDC_LICENSE_KEY, szResult);
}


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值