欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

谢谢PaulYoung[CCG]大侠指点!我一定将它写得更长!刚才没有拜读大侠的大作,实是遗憾。拜读之后,豁然开朗... (6千字)

谢谢PaulYoung[CCG]大侠指点!我一定将它写得更长!刚才没有拜读大侠的大作,实是遗憾。拜读之后,豁然开朗... (6千字)

标题: 谢谢PaulYoung[CCG]大侠指点!我一定将它写得更长!刚才没有拜读大侠的大作,实是遗憾。拜读之后,豁然开朗,于是又加上了自动获得ID的功能!
内容:
这个功能未加测试,本人没有这个软件,只是照本宣科,做了这个东东。假设ID是DOS命令VOL显示的硬盘序列号:)
这次变动主要是数据段加了几个定义,INIT处加了Call GetID,当然又加了一个GedID Proc啦。本人有个毛病,复制和粘贴往往点错,于是又在序列号框中发送了一个只读的消息,这样就不会“误贴”啦~~~~~~~~~~
.386
  .model flat,stdcall
  option casemap:none
  include hd.h
  _ProcDlg proto :DWORD,:DWORD,:DWORD,:DWORD
.data
  NameLen  dd 0
  IDLen    dd 0
  IDSum    dd 0
  DecLen  dd 0
  InputOK  dd 0
  MsgMesaage1 db "请输入您的ID和用户名!",0
  MsgCap      db "小李注册表大师 v1.41 注册机  by 5,555",0
  VName    db 256 dup (0)
  FSName    db 256 dup (0)
  Drive    db "C:\",0
  VID      dd 0

.data?
  hInstance  HANDLE ?
  UserName db 80 dup (?)
  ID      db 80 dup (?)
  RegNum  db 80 dup (?)
.const
  DLG_MAIN  equ    1000
  IDC_ID    equ    1001
  IDC_RN    equ    1002
  ID_GEN    equ    1003
  ID_EXIT  equ    1004
  IDC_USER  equ    1005
.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_INITDIALOG
                    call GetID
                    invoke SetDlgItemText,hWnd,IDC_ID,addr ID
                    invoke SetWindowText,hWnd,ADDR MsgCap
                    invoke SendDlgItemMessage,hWnd,IDC_RN,EM_SETREADONLY,TRUE,NULL
          .elseif    eax == WM_COMMAND
                    mov eax,wParam
                    .IF lParam!=0
                        .if  ax==ID_GEN
                            mov dword ptr InputOK,0
                            invoke RtlZeroMemory,addr ID,80
                            invoke RtlZeroMemory,addr UserName,80
                            invoke RtlZeroMemory,addr RegNum,80
                            invoke GetDlgItemText,hWnd,IDC_ID,addr ID,80
                            .IF eax != NULL
                                mov IDLen,eax
                                invoke GetDlgItemText,hWnd,IDC_USER,addr UserName,80
                                .IF  eax != NULL
                                    mov NameLen,eax
                                    mov dword ptr InputOK,1
                                    call Cal
                                    invoke SetDlgItemText,hWnd,IDC_RN,addr RegNum
                                .ENDIF
                            .ENDIF
                            cmp dword ptr InputOK,1
                            jz  Main_Exit
                            invoke MessageBox,NULL,addr MsgMesaage1,addr MsgCap,MB_OK or MB_ICONEXCLAMATION
                        .elseif ax==ID_EXIT
                                invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
                        .endif
                    .ENDIF
          .else
                  mov eax,FALSE
                  ret
          .endif
Main_Exit:
          mov eax,TRUE
          ret
_ProcDlg  ENDP

Cal        PROC
            pushad
            xor ebx,ebx
            xor eax,eax
            lea esi,ID
Cal_Lop1:
            lodsb
            test al,al
            jz Cal_2
            cmp al,'A'
            jb Cal_1
            cmp al,'Z'
            ja Cal_1
            add al,'a'-'A'
Cal_1:
            add ebx,eax
            jmp Cal_Lop1
Cal_2:
            mov IDSum,ebx
            mov eax,IDLen
            add eax,NameLen
            inc eax
            mov ecx,57791
            imul ecx
            add ebx,eax
            lea esi,UserName
            xor eax,eax
Cal_Lop2:
            lodsb
            test al,al
            jz ToAsc
            add ebx,eax
            jmp Cal_Lop2
ToAsc:
            mov eax,ebx
            lea ebp,RegNum
            mov byte ptr [ebp],'8'
            inc ebp
            call Num2Dec
            add ebp,DecLen
            mov byte ptr [ebp],'2'
            mov byte ptr [ebp+1],0
Cal_Exit:
            popad
            ret
Cal        endp
Num2Dec Proc    ;eax:Num to convert, ebp-->buffer
        pushad
        xor ecx,ecx
        mov ebx,10
@Num2Dec_Lop1:
        cdq
        div ebx
        push edx
        inc ecx
        test eax,eax
        jnz @Num2Dec_Lop1
        mov DecLen,ecx
@Num2Dec_Lop2:
        pop eax
        add al,'0'
        mov byte ptr [ebp],al
        inc ebp
        dec ecx
        jnz @Num2Dec_Lop2
        mov byte ptr [ebp],0
        popad
        ret
Num2Dec Endp
GetID  Proc
        pushad
        invoke  GetVolumeInformation, addr Drive, addr VName, 255, addr VID, 0, 0, addr FSName, 255
        mov eax,VID
       
        lea ebp,ID
        mov ecx,8
Num2Asc_Lop1:
        rol eax,4
        mov edx,eax
        and dl,0fh
        cmp dl,9
        jna Digital
        add dl,'A'-'0'-0ah
Digital:
        add dl,'0'
        cmp ecx,4
        jnz StoreID
        mov byte ptr [ebp],'-'
        inc ebp
StoreID:
        mov [ebp],dl
        inc ebp
        loop Num2Asc_Lop1
       
        popad
        ret
GetID  Endp
        end start
;以下为rsrc.rc:
#include <\masm32\include\resource.h>
#define DLG_MAIN  1000
#define IDC_ID    1001
#define IDC_RN    1002
#define ID_GEN    1003
#define ID_EXIT  1004
#define IDC_USER    1005
DLG_MAIN DIALOG 64,53,180,80
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "小李注册表大师 v1.41 注册机  by 5,555"
FONT 9, "宋体"
{
DEFPUSHBUTTON "注册", ID_GEN, 140, 10, 25, 14
PUSHBUTTON "退出", ID_EXIT, 140, 42, 25, 14
EDITTEXT IDC_ID, 52, 10, 78, 12, WS_BORDER | WS_TABSTOP
EDITTEXT IDC_USER, 52, 29, 78, 13, WS_BORDER | WS_TABSTOP
EDITTEXT IDC_RN, 52, 48, 78, 14, WS_BORDER | WS_TABSTOP
LTEXT "ID号码:", -1, 8, 12, 40, 10
LTEXT "用户名:", -1, 8, 30, 41, 9
LTEXT "序列号:", -1, 8, 48, 42, 8
}
;HD.h,大家都有的
      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\gdi32.inc
      include \masm32\include\comctl32.inc
      include \masm32\include\comdlg32.inc
      include \masm32\include\shell32.inc
    include \masm32\include\advapi32.inc
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\gdi32.lib
      includelib \masm32\lib\comctl32.lib
      includelib \masm32\lib\comdlg32.lib
      includelib \masm32\lib\shell32.lib
    includelib \masm32\lib\advapi32.lib

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功