• 标 题:争分夺秒背单词。 (4千字)
  • 作 者:Fpc
  • 时 间:2002-7-18 14:44:04
  • 链 接:http://bbs.pediy.com

;从hume的例子中改的:)
;****************crkslm.asm
.386
.model flat,stdcall
option casemap:none
include hd.h
_ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
wsprintfA PROTO C :DWORD,:VARARG
BUFF_SIZE      equ    50

;->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>data seg
        .data
esp_10          db    0  ;保存ecx+5
esp_04          db    0  ;保存高4位
esp_08          db    0  ;保存低4位
flg            db    0
rand_init      db    0
rand_out        db    0
MsgTitle        db    "A KeyMaker by Fpc", 0
MsgContend      db    "XXXXXXXXXXXX", 0dh, 0ah, 0dh, 0ah,
                        "Hompage: www.abc.com", 0
Rc1            db      BUFF_SIZE dup(0)
Rc2            db      BUFF_SIZE dup(0)
Serial          db      BUFF_SIZE dup(0)
format          db      "%lu", 0


        .data?
hInstance  HANDLE ?
        .const
ID_GEN          equ    1003
ID_EXIT        equ    1002
ID_ABOUT        equ    1004
IDC_OUT        equ    1001
IDC_RC1        equ    1010
IDC_RC2        equ    1011
DLG_MAIN        equ    1000
  ;-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>code seg
         
        .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
       
        mov    eax,wMsg
        .if    eax == WM_CLOSE
            invoke    EndDialog,hWnd,NULL
        .elseif    eax == WM_COMMAND
          mov eax,wParam
          .IF lParam!=0
            .if ax==ID_GEN
            ;invoke RtlZeroMemory, addr Serial, BUFF_SIZE
            invoke GetDlgItemText, hWnd, IDC_RC1, addr Rc1, BUFF_SIZE
            invoke GetDlgItemText, hWnd, IDC_RC2, addr Rc2, BUFF_SIZE
            call Cal
            invoke SetDlgItemText,hWnd,IDC_OUT,addr Serial
            .elseif ax==ID_ABOUT
            invoke MessageBox, hWnd, Addr MsgContend, Addr MsgTitle, MB_OK

            .elseif ax==ID_EXIT
            invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
            .endif
           
          .ENDIF
        .else
        mov eax,FALSE
        ret
          .endif
        mov eax,TRUE
        ret
_ProcDlg    ENDP   

include  cal.asm

end start


;********************cal.asm
Cal    proc
        PUSHAD
       
        lea edi, Rc2
        or ecx, 0ffffffffh
        xor eax, eax
        repnz scasb
        not ecx
        dec ecx
        test ecx, ecx
        jz no_input
        push ecx
        ;
        lea edi, Rc1
        or ecx, 0ffffffffh
        repnz scasb
        not ecx
        dec ecx
        test ecx, ecx
        jnz next_1
        pop ecx
        jmp no_input
next_1:
        lea edi, Rc1
        add edi, ecx
        lea esi, Rc2
        pop ecx
        rep movsb
        ;
        ;main proc
        ;
        xor eax, eax
        lea esi, Rc1
        mov ebx, eax
        inc ebx
main_loop:
        lodsb
        test al, al
        jz next_2
        imul ebx, ebx, 022d6h
        add ebx, eax
        jmp main_loop
next_2:
        mov eax, ebx
        cdq
        xor eax, edx
        sub eax, edx    ;done
        invoke wsprintfA, addr Serial, addr format, eax
no_input:

        POPAD
        ret
Cal    endp


;****************rsrc.rc
#include <d:\masm32\include\resource.h>
#define ID_GEN        1003
#define ID_ABOUT    1004
#define ID_EXIT        1002
#define IDC_OUT        1001
#define IDC_RC1        1010
#define IDC_RC2        1011
#define DLG_MAIN    1000
DLG_MAIN DIALOG 37, 61, 282, 59
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Asm Keygen temple, By Fpc, thx to Hume"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "Generate", ID_GEN, 209, 4, 50, 14
PUSHBUTTON "Exit", ID_EXIT, 209, 40, 50, 14
PUSHBUTTON "About", ID_ABOUT, 209, 22, 50, 14

LTEXT "Name     :", -1, 15, 8, 36, 8
LTEXT "Email    :", -1, 15, 25, 39, 8
LTEXT "Code    :", -1, 15, 43, 49, 10

EDITTEXT IDC_RC1, 67, 6, 48, 13, WS_BORDER | WS_TABSTOP, 
EDITTEXT IDC_RC2, 67, 23, 71, 13, WS_BORDER | WS_TABSTOP, 
EDITTEXT IDC_OUT, 67, 42, 130, 12, ES_READONLY | WS_BORDER | WS_TABSTOP
}