编译后只有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);
}
// 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);
}