• 标 题:龙文五笔(9千字)
  • 作 者:Fpc
  • 时 间:2002-11-13 11:26:40
  • 链 接:http://bbs.pediy.com

;
;keymake of LongWen WuBi 2.0
;by: Fpc/CCG
;@ : 2002-11-13
;
.386
.model flat,stdcall
option casemap:none
include hd.h
_ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
GetOurCode proto :DWORD, :DWORD

;->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>data seg
        .const
BUFF_SIZE      equ    36

ID_MAKE        equ    1002
ID_ABOUT        equ    1003
ID_CLOSE        equ    1004
IDC_MECHINE    equ    1010
IDC_CODE        equ    1011
IDC_STATUS      equ    1015
DLG_MAIN        equ    1000

        .data
szMechine      db      BUFF_SIZE dup (0)        ;mechine code
szCode          db      BUFF_SIZE dup (0)        ;legal code for input :)

MsgTitle        db    "+CCG+", 0
MsgContend      db    "XXXXX2.0注册机", 0dh, 0ah, 0dh, 0ah
                db      "Cracker: Fpc", 0dh, 0ah
                db      "Team  : China Cracking Group", 0dh, 0ah
                db      "Release: 2002-11-13", 0dh, 0ah
                db      "Website: www.ccg.com", 0dh, 0ah, 0dh, 0ah
                db      "  本软件受版权法保护,请合法使用。", 0

szSucceed    db    "完毕:)", 0
szNoInput    db      "请输入机器码", 0
szSizeError    db      "机器码位数不对", 0
szIllegalMC    db    "机器码含非法字符", 0

LibName        db      "msvcrt.dll",0
DllNotFound    db      "无法加载msvcrt.dll",0
AppName        db      "CCG",0
F_ltoa          db      "_ltoa", 0


        .data?
hInstance  HANDLE ?
hLib dd ?
hMake      HANDLE ?
A_ltoa      dd ?                       
       
        .code
start: 
    invoke    GetModuleHandle,NULL
    mov      hInstance,eax
    invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlg,0
    invoke    ExitProcess,NULL

_ProcDlg    proc    uses ebx edi esi, \
        hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD

        LOCAL Ps :PAINTSTRUCT

       
        mov    eax,wMsg
        .if    eax == WM_CLOSE
            invoke FreeLibrary,hLib
            invoke    EndDialog,hWnd,NULL
        .elseif eax==WM_INITDIALOG
            invoke LoadLibrary,addr LibName
                .if eax==NULL
                    invoke MessageBox,NULL,addr DllNotFound,addr AppName,MB_OK
                .else
                    mov hLib,eax
                    invoke GetProcAddress,hLib,addr F_ltoa
                    mov A_ltoa, eax
                .endif
        .elseif eax == WM_PAINT
                invoke BeginPaint,hWnd,ADDR Ps
                ; ----------------------------------------
                ; The following function are in MASM32.LIB
                ; ----------------------------------------
                invoke FrameWindow,hWnd,0,1,1
                invoke FrameWindow,hWnd,1,1,0

                invoke EndPaint,hWnd,ADDR Ps
                xor eax, eax
               
         
        .elseif    eax == WM_COMMAND
          mov eax,wParam
          .IF lParam!=0
            .if ax==ID_MAKE
                invoke RtlZeroMemory, addr szMechine, BUFF_SIZE
                invoke RtlZeroMemory, addr szCode, BUFF_SIZE
                invoke GetDlgItemText,hWnd,IDC_MECHINE,addr szMechine, BUFF_SIZE
                .if eax == 0
                    invoke SetDlgItemText,hWnd,IDC_STATUS,addr szNoInput
                    ret
                .elseif eax==29
                    ;delete '-'
                    lea esi, szMechine
                    mov edi, esi
                    mov ecx, eax
                    xor eax, eax
                    @movch:
                    lodsb
                    cmp al, '-'
                    jnz @nextch
                    lodsb
                    @nextch:
                    stosb
                    test al, al
                    jz @end1
                    jmp @movch
               
                .elseif eax == 24
                    @end1:
                    lea esi, szMechine
                    lea edi, szCode
                    invoke GetOurCode, edi, esi
                    .if eax==0
                        invoke SetDlgItemText,hWnd,IDC_STATUS,addr szSucceed
                    .elseif eax==1
                        invoke SetDlgItemText,hWnd,IDC_STATUS,addr szSizeError
                    .elseif eax==2
                        invoke SetDlgItemText,hWnd,IDC_STATUS,addr szIllegalMC
                    .endif
                    invoke SetDlgItemText,hWnd,IDC_CODE,addr szCode
                .else
                    invoke SetDlgItemText,hWnd,IDC_STATUS,addr szSizeError                                        
              .endif

            .elseif ax==ID_CLOSE
                invoke    EndDialog,hWnd,NULL
            .elseif ax==ID_ABOUT
                invoke MessageBox, hWnd, Addr MsgContend, Addr MsgTitle, MB_OK
            .endif
           
          .ENDIF
        .else
        mov eax,FALSE
        ret
          .endif
        mov eax,TRUE
        ret
_ProcDlg    ENDP   


GetOurCode proc pCode:DWORD, pMechine:DWORD
    
    invoke lstrlen, pMechine
    cmp eax, 24
    jz @next1
    push 1
    pop eax
    ret
    @charerror:
    push 2
    pop eax
    ret
    nop
    @next1:
    invoke CharUpperA, pMechine
    ;
    ;main math
    ;
    push 6
    pop ecx
    mov esi, pMechine
    mov edi, esi
    ;
    @next4ch:
    push 4
    pop edx
    xor ebx, ebx
    xor eax, eax
   
    @this4ch:
    lodsb
    cmp al, 'F'
    jg @charerror
    cmp al, 'A'
    jl @next2
    sub al, 'A'
    add al, 0ah
    jmp @next3
    @next2:
    cmp al, '9'
    jg @charerror
    cmp al, '0'
    jl @charerror
    sub al, '0'
    @next3:
    shl ebx, 4
    or bl, al
    dec edx
    jnz @this4ch
    mov ax, bx
    stosw
    dec ecx
    jnz @next4ch
    xor eax, eax
    stosb
   
      ;
      mov esi, pMechine
      push ebp
      mov ebp, esi
    mov ax, word ptr [ebp+00]
    shl eax, 05
    mov word ptr [ebp+00], ax
    
    xor eax, eax
    mov ax, word ptr [ebp+02]
    lea eax, dword ptr [eax+8*eax]
    shl eax, 02
    mov word ptr [ebp+02], ax

    xor eax, eax
    mov ax, word ptr [ebp+04]
    lea ecx, dword ptr [8*eax+0]
    sub ecx, eax
    lea eax, dword ptr [ecx+4*ecx]
    xor ecx, ecx
    mov word ptr [ebp+04], ax

    mov cx, word ptr [ebp+06]
    mov eax, ecx
    shl eax, 04
    add eax, ecx
    shl eax, 1
    mov word ptr [ebp+06], ax

    xor eax, eax
    mov ax, word ptr [ebp+08]
    lea ecx, dword ptr [eax+4*eax]
    shl ecx, 03
    sub ecx, eax
    mov word ptr [ebp+08], cx

    xor eax, eax
    mov ax, word ptr [ebp+0Ah]
    lea ecx, dword ptr [eax+8*eax]
    lea eax, dword ptr [eax+4*ecx]
    mov word ptr [ebp+0Ah], ax

    xor eax, eax
    mov ax, word ptr [ebp+00]
    mov ecx, eax
    xor eax, eax
    mov ax, word ptr [ebp+0Ah]
    mov edx, eax
    shl edx, 05
    add edx, eax
    lea eax, dword ptr [edx+2*ecx]
    mov word ptr [ebp+0Ah], ax

    xor eax, eax
    xor ecx, ecx
    mov ax, word ptr [ebp+04]
    mov cx, word ptr [ebp+08]
    lea eax, dword ptr [ecx+2*eax]
    mov word ptr [ebp+08], ax

    ;don't need to imul 0x39, damned
    ;mov esi, ebp
    ;add esi, 4
    ;mov edi, esi
    pop ebp
   
    ;push 4
    ;pop ecx
    ;xor eax, eax
   
    ;@@small:   
    ;lodsw
    ;imul ax, 39h
    ;and eax, 0FFFFh
    ;stosw
    ;loop @@small


                nop
                mov esi, pMechine
                push 6
                pop ebx
                mov edi, pCode
                @@small2:
                xor eax, eax
                lodsw
                push 16
                push edi
                push eax
                call [A_ltoa]
                add esp, 0ch
                add edi, 4
                mov al, '-'
                stosb
                dec ebx
                jnz @@small2
                mov byte ptr [edi-1], 0
                nop
      mov ebx, pCode
    mov al, byte ptr [ebx]
    mov cl, byte ptr [ebx+06]
    mov byte ptr [ebx+06], al
    mov byte ptr [ebx], cl
    mov al, byte ptr [ebx+08]
    mov dl, byte ptr [ebx+1Bh]
    mov byte ptr [ebx+08], dl
    mov byte ptr [ebx+1Bh], al
    mov al, byte ptr [ebx+0Dh]
    mov dl, byte ptr [ebx+17h]
    mov byte ptr [esp+2Ch], al
    mov byte ptr [ebx+17h], al
    mov byte ptr [ebx+0Dh], dl
    invoke CharUpperA, pCode
    xor eax, eax
ret

GetOurCode endp

end start


********rsrc.rc

;rsrc.rc

#include <d:\masm32\include\resource.h>
#define ID_MAKE        1002
#define ID_ABOUT    1003
#define ID_CLOSE    1004

#define IDC_MECHINE    1010
#define IDC_CODE    1011
#define IDC_STATUS    1015

#define MyIcon        1020
#define MyBmp        1025

#define DLG_MAIN    1000
MyIcon ICON MOVEABLE PURE DISCARDABLE "CCG.ico"
BIT_CCG        BITMAP    CCG.BMP

DLG_MAIN DIALOG 108, 90, 180, 110
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CENTER | DS_3DLOOK
CAPTION "CCG KeyGen: XXXXX2.0"
FONT 8, "Fixedsys"
{
CONTROL        "BIT_CCG",MyBmp,"Static",SS_BITMAP,4,3,0,0

DEFPUSHBUTTON "生成", ID_MAKE, 35, 81, 30, 14, BS_FLAT
PUSHBUTTON "关于", ID_ABOUT, 85, 81, 30, 14, BS_FLAT
PUSHBUTTON "退出", ID_CLOSE, 135, 81, 30, 14, BS_FLAT

LTEXT "机器码:", -1, 14, 52, 30, 8
LTEXT "注册码:", -1, 14, 67, 30, 8

LTEXT "就绪", IDC_STATUS, 15, 98, 120, 10, WS_DISABLED
LTEXT "Fpc/CCG", -1, 145, 98, 30, 8, WS_DISABLED


EDITTEXT IDC_MECHINE, 46, 51, 120, 12, WS_BORDER | WS_TABSTOP, 
EDITTEXT IDC_CODE, 46, 66, 120, 12, ES_READONLY | WS_BORDER | WS_TABSTOP, 

}