• 标 题:计算机专业词汇学习1.0算法分析[原创] (14千字)
  • 作 者:ssljx
  • 时 间:2001-12-13 13:17:30
  • 链 接:http://bbs.pediy.com

计算机专业词汇学习1.0算法分析
作者:ssljx
软件名称:计算机专业词汇学习1.0
用途:主要为考程序员&高级程序学习词汇使用
下载网址:http://www.21cmm.com/rjxz/learn.zip
大小:1420kB
工具:trw2000

这是我第一个分析算法的软件,下面我用U1-->U6代表用户名相应前面六位..用bpx hmemcpy拦截来到这里..


:004055EA 8D45F8                  lea eax, dword ptr [ebp-08]
:004055ED B901000000              mov ecx, 00000001
:004055F2 BA01000000              mov edx, 00000001
:004055F7 E864F50800              call 00494B60
:004055FC 837DF400                cmp dword ptr [ebp-0C], 00000000
:00405600 7405                    je 00405607
:00405602 8B45F4                  mov eax, dword ptr [ebp-0C]
:00405605 EB05                    jmp 0040560C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405600(C)
|
:00405607 B84CC34A00              mov eax, 004AC34C

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040559D(C), :00405605(U)
|
:0040560C 0FBE10                  movsx edx, byte ptr [eax]//取用户名第一位U1的ASCII16进制码                                                            ==>edx
:0040560F 69FA9A020000            imul edi, edx, 0000029A//U1*29A=12b2e==>edi把值保存在EDI
:00405615 33C0                    xor eax, eax
:00405617 8D55EC                  lea edx, dword ptr [ebp-14]
:0040561A 8945EC                  mov dword ptr [ebp-14], eax
:0040561D 52                      push edx
:0040561E FF461C                  inc [esi+1C]
:00405621 33C9                    xor ecx, ecx
:00405623 894DF0                  mov dword ptr [ebp-10], ecx
:00405626 8D55F0                  lea edx, dword ptr [ebp-10]
:00405629 FF461C                  inc [esi+1C]
:0040562C 8B83E0020000            mov eax, dword ptr [ebx+000002E0]
:00405632 E8C55F0500              call 0045B5FC
:00405637 8D45F0                  lea eax, dword ptr [ebp-10]
:0040563A B901000000              mov ecx, 00000001
:0040563F BA02000000              mov edx, 00000002
:00405644 E817F50800              call 00494B60
:00405649 837DEC00                cmp dword ptr [ebp-14], 00000000
:0040564D 7405                    je 00405654
:0040564F 8B45EC                  mov eax, dword ptr [ebp-14]
:00405652 EB05                    jmp 00405659

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040564D(C)
|
:00405654 B84DC34A00              mov eax, 004AC34D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405652(U)
|
:00405659 0FBE10                  movsx edx, byte ptr [eax]//取用户名第二位U2的ASCII16进制码                                      ==>edx
:0040565C 8BCA                    mov ecx, edx
:0040565E 33C0                    xor eax, eax
:00405660 C1E104                  shl ecx, 04//U2*10==>ecx
:00405663 8945E4                  mov dword ptr [ebp-1C], eax
:00405666 03CA                    add ecx, edx//ECX+U2==>ecx
:00405668 8D0C8A                  lea ecx, dword ptr [edx+4*ecx]//U2+4*ECX==>ECX
:0040566B 8D0C8A                  lea ecx, dword ptr [edx+4*ecx]//U2+4*ECX==>ECX
:0040566E 8D0C4A                  lea ecx, dword ptr [edx+2*ecx]//U2+2*ECX==>ECX
:00405671 8D55E4                  lea edx, dword ptr [ebp-1C]
:00405674 52                      push edx
:00405675 03F9                    add edi, ecx//将第二位计算出来的值累加第一的值
:00405677 FF461C                  inc [esi+1C]
:0040567A 33C9                    xor ecx, ecx
:0040567C 894DE8                  mov dword ptr [ebp-18], ecx
:0040567F 8D55E8                  lea edx, dword ptr [ebp-18]
:00405682 FF461C                  inc [esi+1C]
:00405685 8B83E0020000            mov eax, dword ptr [ebx+000002E0]
:0040568B E86C5F0500              call 0045B5FC
:00405690 8D45E8                  lea eax, dword ptr [ebp-18]
:00405693 B901000000              mov ecx, 00000001
:00405698 BA03000000              mov edx, 00000003
:0040569D E8BEF40800              call 00494B60
:004056A2 837DE400                cmp dword ptr [ebp-1C], 00000000
:004056A6 7405                    je 004056AD
:004056A8 8B45E4                  mov eax, dword ptr [ebp-1C]
:004056AB EB05                    jmp 004056B2

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004056A6(C)
|
:004056AD B84EC34A00              mov eax, 004AC34E

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004056AB(U)
|
:004056B2 0FBE10                  movsx edx, byte ptr [eax]//取第三位U3
:004056B5 8BCA                    mov ecx, edx
:004056B7 33C0                    xor eax, eax
:004056B9 C1E103                  shl ecx, 03//U3*8==>ECX
:004056BC 8945DC                  mov dword ptr [ebp-24], eax
:004056BF 2BCA                    sub ecx, edx//ECX-U3==>ECX
:004056C1 C1E104                  shl ecx, 04//ECX*10==>ECX
:004056C4 2BCA                    sub ecx, edx//ECX-U3==>ECX
:004056C6 8D55DC                  lea edx, dword ptr [ebp-24]
:004056C9 52                      push edx
:004056CA 8D55E0                  lea edx, dword ptr [ebp-20]
:004056CD C1E102                  shl ecx, 02//ECX*4==>ECX
:004056D0 FF461C                  inc [esi+1C]
:004056D3 03F9                    add edi, ecx//累加到EDI
:004056D5 33C9                    xor ecx, ecx
:004056D7 894DE0                  mov dword ptr [ebp-20], ecx
:004056DA FF461C                  inc [esi+1C]
:004056DD 8B83E0020000            mov eax, dword ptr [ebx+000002E0]
:004056E3 E8145F0500              call 0045B5FC
:004056E8 8D45E0                  lea eax, dword ptr [ebp-20]
:004056EB B901000000              mov ecx, 00000001
:004056F0 BA04000000              mov edx, 00000004
:004056F5 E866F40800              call 00494B60
:004056FA 837DDC00                cmp dword ptr [ebp-24], 00000000
:004056FE 7405                    je 00405705
:00405700 8B45DC                  mov eax, dword ptr [ebp-24]
:00405703 EB05                    jmp 0040570A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004056FE(C)
|
:00405705 B84FC34A00              mov eax, 004AC34F

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405703(U)
|
:0040570A 0FBE10                  movsx edx, byte ptr [eax]//取第四位U4
:0040570D 8BCA                    mov ecx, edx
:0040570F 33C0                    xor eax, eax
:00405711 C1E103                  shl ecx, 03//U4*8==>ECX
:00405714 8945D4                  mov dword ptr [ebp-2C], eax
:00405717 2BCA                    sub ecx, edx//ECX-U4==>ECX
:00405719 C1E104                  shl ecx, 04//ECX*10==>ECX
:0040571C 2BCA                    sub ecx, edx//ECX-U4==>ECX
:0040571E 8D55D4                  lea edx, dword ptr [ebp-2C]
:00405721 52                      push edx
:00405722 8D55D8                  lea edx, dword ptr [ebp-28]
:00405725 C1E102                  shl ecx, 02//ECX*4==>ECX
:00405728 FF461C                  inc [esi+1C]
:0040572B 03F9                    add edi, ecx//累加EDI
:0040572D 33C9                    xor ecx, ecx
:0040572F 894DD8                  mov dword ptr [ebp-28], ecx
:00405732 FF461C                  inc [esi+1C]
:00405735 8B83E0020000            mov eax, dword ptr [ebx+000002E0]
:0040573B E8BC5E0500              call 0045B5FC
:00405740 8D45D8                  lea eax, dword ptr [ebp-28]
:00405743 B901000000              mov ecx, 00000001
:00405748 BA05000000              mov edx, 00000005
:0040574D E80EF40800              call 00494B60
:00405752 837DD400                cmp dword ptr [ebp-2C], 00000000
:00405756 7405                    je 0040575D
:00405758 8B45D4                  mov eax, dword ptr [ebp-2C]
:0040575B EB05                    jmp 00405762

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405756(C)
|
:0040575D B850C34A00              mov eax, 004AC350

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040575B(U)
|
:00405762 0FBE10                  movsx edx, byte ptr [eax]//取第五位U5
:00405765 8BCA                    mov ecx, edx
:00405767 33C0                    xor eax, eax
:00405769 C1E104                  shl ecx, 04//U5*10==>ECX
:0040576C 8945CC                  mov dword ptr [ebp-34], eax
:0040576F 03CA                    add ecx, edx//ECX+U5==>ECX
:00405771 8D0C8A                  lea ecx, dword ptr [edx+4*ecx]//U5+4*ECX==>ECX
:00405774 8D0C8A                  lea ecx, dword ptr [edx+4*ecx]//U5+4*ECX==>ECX
:00405777 8D0C4A                  lea ecx, dword ptr [edx+2*ecx]//U5+2*ECX==>ECX
:0040577A 8D55CC                  lea edx, dword ptr [ebp-34]
:0040577D 52                      push edx
:0040577E 03F9                    add edi, ecx累加EDI
:00405780 FF461C                  inc [esi+1C]
:00405783 33C9                    xor ecx, ecx
:00405785 894DD0                  mov dword ptr [ebp-30], ecx
:00405788 8D55D0                  lea edx, dword ptr [ebp-30]
:0040578B FF461C                  inc [esi+1C]
:0040578E 8B83E0020000            mov eax, dword ptr [ebx+000002E0]
:00405794 E8635E0500              call 0045B5FC
:00405799 8D45D0                  lea eax, dword ptr [ebp-30]
:0040579C B901000000              mov ecx, 00000001
:004057A1 BA06000000              mov edx, 00000006
:004057A6 E8B5F30800              call 00494B60
:004057AB 837DCC00                cmp dword ptr [ebp-34], 00000000
:004057AF 7405                    je 004057B6
:004057B1 8B45CC                  mov eax, dword ptr [ebp-34]
:004057B4 EB05                    jmp 004057BB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004057AF(C)
|
:004057B6 B851C34A00              mov eax, 004AC351

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004057B4(U)
|
:004057BB 0FBE10                  movsx edx, byte ptr [eax]//取第六位U6
:004057BE 69CA9A020000            imul ecx, edx, 0000029A//U6*29A==>ECX
:004057C4 03F9                    add edi, ecx//累加EDI,这里就是注册码的十六进制..往后使换算和比较我就不跟了..
:004057C6 8BC7                    mov eax, edi
:004057C8 33D2                    xor edx, edx
:004057CA 8955FC                  mov dword ptr [ebp-04], edx
:004057CD 8D55FC                  lea edx, dword ptr [ebp-04]
:004057D0 FF461C                  inc [esi+1C]
:004057D3 E8388D0700              call 0047E510
:004057D8 FF4E1C                  dec [esi+1C]
:004057DB 8D45CC                  lea eax, dword ptr [ebp-34]
:004057DE BA02000000              mov edx, 00000002
:004057E3 E800F20800              call 004949E8
:004057E8 FF4E1C                  dec [esi+1C]
:004057EB 8D45D0                  lea eax, dword ptr [ebp-30]
:004057EE BA02000000              mov edx, 00000002
:004057F3 E8F0F10800              call 004949E8
:004057F8 FF4E1C                  dec [esi+1C]
:004057FB 8D45D4                  lea eax, dword ptr [ebp-2C]
:004057FE BA02000000              mov edx, 00000002
:00405803 E8E0F10800              call 004949E8
:00405808 FF4E1C                  dec [esi+1C]
:0040580B 8D45D8                  lea eax, dword ptr [ebp-28]
:0040580E BA02000000              mov edx, 00000002
:00405813 E8D0F10800              call 004949E8
:00405818 FF4E1C                  dec [esi+1C]
:0040581B 8D45DC                  lea eax, dword ptr [ebp-24]
:0040581E BA02000000              mov edx, 00000002
:00405823 E8C0F10800              call 004949E8
:00405828 FF4E1C                  dec [esi+1C]
:0040582B 8D45E0                  lea eax, dword ptr [ebp-20]
:0040582E BA02000000              mov edx, 00000002
:00405833 E8B0F10800              call 004949E8
:00405838 FF4E1C                  dec [esi+1C]
:0040583B 8D45E4                  lea eax, dword ptr [ebp-1C]
:0040583E BA02000000              mov edx, 00000002
:00405843 E8A0F10800              call 004949E8
:00405848 FF4E1C                  dec [esi+1C]
:0040584B 8D45E8                  lea eax, dword ptr [ebp-18]
:0040584E BA02000000              mov edx, 00000002
:00405853 E890F10800              call 004949E8
:00405858 FF4E1C                  dec [esi+1C]
:0040585B 8D45EC                  lea eax, dword ptr [ebp-14]
:0040585E BA02000000              mov edx, 00000002
:00405863 E880F10800              call 004949E8
:00405868 FF4E1C                  dec [esi+1C]
:0040586B 8D45F0                  lea eax, dword ptr [ebp-10]
:0040586E BA02000000              mov edx, 00000002
:00405873 E870F10800              call 004949E8
:00405878 FF4E1C                  dec [esi+1C]
:0040587B 8D45F4                  lea eax, dword ptr [ebp-0C]
:0040587E BA02000000              mov edx, 00000002
:00405883 E860F10800              call 004949E8
:00405888 FF4E1C                  dec [esi+1C]
:0040588B 8D45F8                  lea eax, dword ptr [ebp-08]
:0040588E BA02000000              mov edx, 00000002
:00405893 E850F10800              call 004949E8
:00405898 66C746100800            mov [esi+10], 0008
:0040589E 66C746102000            mov [esi+10], 0020
:004058A4 33C0                    xor eax, eax
:004058A6 8945C8                  mov dword ptr [ebp-38], eax
:004058A9 8D55C8                  lea edx, dword ptr [ebp-38]
:004058AC FF461C                  inc [esi+1C]
:004058AF 8B83E8020000            mov eax, dword ptr [ebx+000002E8]
:004058B5 E8425D0500              call 0045B5FC
:004058BA 8D45C8                  lea eax, dword ptr [ebp-38]
:004058BD 8D55FC                  lea edx, dword ptr [ebp-04]
:004058C0 E8F3F10800              call 00494AB8//这里就是注册码比较,就不多说了...
:004058C5 50                      push eax
:004058C6 FF4E1C                  dec [esi+1C]
:004058C9 8D45C8                  lea eax, dword ptr [ebp-38]
:004058CC BA02000000              mov edx, 00000002
:004058D1 E812F10800              call 004949E8
:004058D6 59                      pop ecx
:004058D7 84C9                    test cl, cl
:004058D9 0F8495020000            je 00405B74
:004058DF B201                    mov dl, 01
:004058E1 A104814300              mov eax, dword ptr [00438104]
:004058E6 E819290300              call 00438204
:004058EB 8BF8                    mov edi, eax
:004058ED 89BBFC020000            mov dword ptr [ebx+000002FC], edi
:004058F3 BA02000080              mov edx, 80000002
:004058F8 8BC7                    mov eax, edi
:004058FA E8A1EF0800              call 004948A0
:004058FF 66C746102C00            mov [esi+10], 002C

总结:
1.这个算法很简单,而且有两位的算法是一样就是U1跟U6,U2跟U5,U3跟U4.
2.下面我不算式列出来:(用A1-->A6代表给位的总和)
A1=U1*29A
A6=U6*29A
A2=U2+(U2+(U2+(U2*10+U2)*4)*4)*2
A5=U5+(U5+(U5+(U5*10+U5)*4)*4)*2
A3=((U3*8-U3)*10-U3)*4
A4=((U4*8-U4)*10-U4)*4
3.举例:
NAME:ssljxccc(其实算法要六位就够了..我输入多两位..)
s=73 s=73 l=6c j=6a x=78 c=63

A1=73*29A=12B2E

A2=73+(73+(73+(73*10+73)*4)*4)*2=F951

A3=((6C*8-6C)*10-6C)*4=BB50

A4=((6A*8-6A)*10-6A)*4=B7D8

A5=78+(78+(78+(78*10+78)*4)*4)*2=10428

A6=63*29A=1018E

注册吗:A1+A2+A3+A4+A5+A6=12B2E+F951+BB50+B7D8+10428+1018E=59D5D
换算成十进制:367965  完成..
NAME:ssljxccc
code:367965

  • 标 题:MASM32注册机。对我来说,这个软件的序列号特别友好:) (4千字)
  • 作 者:WenXinJY
  • 时 间:2001-12-13 19:55:25

Name: WenXinJY
Code: 333444
好记!!!!!!
Name:免费软件
Code:-154290

;kg.asm
.386
.model flat,stdcall
option casemap:none
include hd.h
  _WinMain Proto  :DWORD,:DWORD,:DWORD,:DWORD
  Calculation Proto

.const
  DLG_MAIN  equ    1000
  IDC_UN    equ    1001
  IDC_SN    equ    1002
  ID_GEN    equ    1003
  ID_EXIT  equ    1004

.data
MsgCap        db "计算机专业词汇学习1.0 注册机      by WenXinJY",0
MsgName      db "请输入您的用户名!",0
hInstance    dd 0
UserLen      dd 0
szFormat      db "%i",0
UserID        db 80 dup (0)
SN            db 80 dup (0)

.radix 16

.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _WinMain,NULL
invoke ExitProcess,NULL

_WinMain  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
                  invoke SetWindowText,hWnd,ADDR MsgCap
                  invoke SendDlgItemMessage,hWnd,IDC_SN,EM_SETREADONLY,TRUE,NULL
          .elseif eax == WM_COMMAND
                  mov eax,wParam
                  .IF lParam!=0 
                      .if eax==ID_GEN
                          ;mov dowrd ptr UserID,0
                          ;mov word ptr UserID[4],0
                          invoke RtlZeroMemory,addr UserID,80
                          invoke GetDlgItemText, hWnd, IDC_UN, addr UserID, 80
                          .if  eax!=NULL
                              mov UserLen,eax
                              invoke Calculation
                              invoke SetDlgItemText, hWnd, IDC_SN, addr SN
                          .else
                              invoke MessageBox,NULL,addr MsgName,addr MsgCap,MB_OK or MB_ICONEXCLAMATION
                          .endif
                      .elseif eax==ID_EXIT
                          invoke SendMessage,hWnd,WM_CLOSE,NULL,NULL
                      .endif
                  .ENDIF
          .else
                  mov eax,FALSE
                  ret
          .endif
          mov eax,TRUE
          ret
_WinMain  ENDP       


Calculation Proc
            pushad
            xor edi,edi
            mov ebx,29ah
            movsx eax,UserID[0]
            mul ebx
            add edi,eax
            movsx eax,UserID[5]
            mul ebx
            add edi,eax
            mov ebx,(1+(1+(1+(10+1)*4)*4)*2)
            movsx eax,UserID[1]
            mul ebx
            add edi,eax
            movsx eax,UserID[4]
            mul ebx
            add edi,eax
            mov ebx,((8-1)*10-1)*4
            movsx eax,UserID[2]
            mul ebx
            add edi,eax
            movsx eax,UserID[3]
            mul ebx
            add edi,eax
           
            push edi
            push offset szFormat
            push offset SN
            call wsprintf
            add esp,4*3
            popad
            ret
Calculation Endp
            End start

;kg.rc
#include <\masm32\include\resource.h>
#define DLG_MAIN  1000
#define IDC_UN    1001
#define IDC_SN    1002
#define ID_GEN    1003
#define ID_EXIT  1004
DLG_MAIN DIALOG 64,53,240,52
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "计算机专业词汇学习1.0 注册机      by WenXinJY"
FONT 9, "宋体"
{
DEFPUSHBUTTON "注册", ID_GEN, 200, 8, 30, 14
PUSHBUTTON "退出", ID_EXIT, 200, 26, 30, 14
EDITTEXT IDC_UN, 40, 10, 150, 12, WS_BORDER | WS_TABSTOP
EDITTEXT IDC_SN, 40, 29, 150, 13, WS_BORDER | WS_TABSTOP
LTEXT "用户名:", -1, 8, 12, 30, 10
LTEXT "注册码:", -1, 8, 30, 30, 9
}
;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