首页
社区
课程
招聘
[原创]MathMagic Pro v3.1 算法分析!
发表于: 2005-10-17 18:11 4101

[原创]MathMagic Pro v3.1 算法分析!

2005-10-17 18:11
4101
软件简介:MathMagic是一个卓越的数学方程式编辑软件,能够编辑各种方程式和数学符号。它为您提供了一个简单易用的界面和非常强大的功能,利用它可以轻松的编写各种数学方程式而不再需要别的软件。
破解平台:Microsoft Windows 2003 SP1

Name:随意(字符数大于3,小于等于63)!
C#:760I10-WU4-201X343
S#:11UK-111G-1111

破解过程:

1.用PEiD检测MathMagic Pro v3.1.exe文件是否加壳,检测结果为无!
2.运行MathMagic Pro v3.1.exe,不输入用户名(User Name)、客户号(Customer #)、序列号(Serial #),点击“授权(Authorization)”,依次出现“Please enter your User Name Correctly.”、“The Customer Number is incorrect. Please enter it again.”、“The Serial Number is incorrect. Please enter it again.”提示。
3.用W32Dasm反汇编MathMagic Pro v3.1.exe文件。
(1)查找字符串“Please enter your User Name Correctly.”,通过对代码的分析,得知在“004C8DA0”处设断!
(2)查找字符串“The Customer Number is incorrect. Please enter it again.”,通过对代码的分析,得知在“004C9250”处设断!
(3)查找字符串“The Serial Number is incorrect. Please enter it again.”,通过对代码的分析,得知在“004C93F6”处设断!
4.用OllyDbg载入程序,运行,并在“004C8DA0”、“004C9250”、“004C93F6”处设断!
(1)返回程序随意输入用户名(Blade)客户号(ABCD)和序列号(EFGH),点击“Authorization”。程序中断在“004C8DA0”处!通过单步跟踪分析得知:
004C8DA0 8B442404   mov eax,dword ptr ss:[esp+4]
004C8DA4 8B08     mov ecx,dword ptr ds:[eax]
004C8DA6 8B41F8    mov eax,dword ptr ds:[ecx-8]        ;ECX="Blade"(用户名)!
004C8DA9 83F803    cmp eax,3                           ;用户名长度是否“≥3”!
004C8DAC 7D11     jge short MathMagi.004C8DBF     ;否,不转移,注册出错!
004C8DAE 6A00     push 0
004C8DB0 6A00     push 0
004C8DB2 6842E10000  push 0E142
004C8DB7 E836EC0800  call <jmp.&MFC42.#1199>       ;过此处,提示“Please enter your User Name Correctly.”!
004C8DBC 32C0     xor al,al
004C8DBE C3      retn
004C8DBF 83F83F    cmp eax,3F             ;用户名长度是否“≤63”!
004C8DC2 7E11     jle short MathMagi.004C8DD5     ;否,不转移,注册出错!
004C8DC4 6A00            push 0
004C8DC6 6A00     push 0
004C8DC8 683C785C00         push MathMagi.005C783C
004C8DCD E822EA0800         call <jmp.&MFC42.#1200>       ;过此处,提示“long name”!
(2)当程序中断在“004C9250”处时,通过单步跟踪分析得知:
004C9250 8B442404          mov eax,dword ptr ss:[esp+4]           ;ECX="Blade"(用户名)!
004C9254 56             push esi
004C9255 8B30            mov esi,dword ptr ds:[eax]     ;ESI="ABCD"(客户号)!
004C9257 837EF812          cmp dword ptr ds:[esi-8],12     ;客户号是否是18位!
004C925B 0F85870000         jnz MathMagi.004C92E8        ;否,转移,注册出错(提示“The Customer Number  ...”)!
004C9261 8A4607           mov al,byte ptr ds:[esi+7]     ;将客户号第8位存入AL!
004C9264 3C57            cmp al,57                     ;客户号第8位是否是“W”!
004C9266 7404            je short MathMagi.004C926C     ;是,转移!
004C9268 3C58            cmp al,58                     ;客户号第8位是否是“X”!
004C926A 757C            jnz short MathMagi.004C92E8     ;否,转移,注册出错!
004C926C 807E0855          cmp byte ptr ds:[esi+8],55     ;客户号第9位是否是“U”!
004C9270 7576            jnz short MathMagi.004C92E8     ;否,转移,注册出错!
004C9272 33C9            xor ecx,ecx
004C9274 8A0E            mov cl,byte ptr ds:[esi]
004C9276 8D0431           lea eax,dword ptr ds:[ecx+esi]
004C9279 8A0C31           mov cl,byte ptr ds:[ecx+esi]
004C927C 80F93F           cmp cl,3F
004C927F 7467            je short MathMagi.004C92E8
004C9281 8078FF3F   cmp byte ptr ds:[eax-1],3F
004C9285 7461            je short MathMagi.004C92E8
004C9287 8A4E06           mov cl,byte ptr ds:[esi+6]            ;将客户号第7位存入CL!
004C928A B02D            mov al,2D              ;将ASCII码“-”存入AL!
004C928C 3AC8            cmp cl,al              ;客户号第7位是否是“-”!
004C928E 7558            jnz short MathMagi.004C92E8            ;否,转移,注册出错!
004C9290 38460A           cmp byte ptr ds:[esi+A],al            ;客户号第11位是否是“-”!
004C9293 7553            jnz short MathMagi.004C92E8            ;否,转移,注册出错!
004C9295 807E0349          cmp byte ptr ds:[esi+3],49            ;客户号第4位是否是“I”!
004C9299 754D            jnz short MathMagi.004C92E8            ;否,转移,注册出错!
//重新输客户号(123I56-WU0-1234567),跟踪分析!!!
004C929B 56             push esi
004C929C E85F000000  call MathMagi.004C9300              ;客户号的算法,跟进!
………………        ………………
004C92B7 0FBE4C2418         movsx ecx,byte ptr ss:[esp+18]   ;ECX=34('4')!
004C92BC 33C0            xor eax,eax                    ;EAX=0!
004C92BE 83C410           add esp,10
004C92C1 8A460F           mov al,byte ptr ds:[esi+F]            ;将客户号第16位存入AL!
004C92C4 3BC1            cmp eax,ecx                    ;客户号第16位是否是“4”!
004C92C6 7520            jnz short MathMagi.004C92E8            ;否,转移,注册出错!
004C92C8 0FBE442409         movsx eax,byte ptr ss:[esp+9]    ;EAX=32('2')!
004C92CD 33D2            xor edx,edx
004C92CF 8A5610           mov dl,byte ptr ds:[esi+10]            ;将客户号第17位存入DL!
004C92D2 3BD0            cmp edx,eax                    ;客户号第17位是否是“2”!
004C92D4        7512            jnz short MathMagi.004C92E8            ;否,转移,注册出错!
004C92D6 0FBE54240A         movsx edx,byte ptr ss:[esp+A]           ;EAX=41('A')!
004C92DB 33C9            xor ecx,ecx
004C92DD 8A4E11           mov cl,byte ptr ds:[esi+11]     ;将客户号第18位存入CL!
004C92E0 3BCA            cmp ecx,edx                    ;客户号第18位是否是“A”!
004C92E2 7504            jnz short MathMagi.004C92E8     ;否转移,注册出错!
//至此可得到正确的客户号:123I56-WU0-123442A!!!
(3)步入“004C9300”(客户号的算法),通过单步跟踪分析得知:
004C9300 8B4C2404          mov ecx,dword ptr ss:[esp+4]           ;ECX="123I56-WU0-1234567"(客户号)!
………………        ………………
004C9313 8A510B           mov dl,byte ptr ds:[ecx+B]            ;DL=31H('1',客户号第12位)!
004C9316 8A4107           mov al,byte ptr ds:[ecx+7]            ;AL=57H('W',客户号第8位)!
004C9319 88542404          mov byte ptr ss:[esp+4],dl     ;SS:[ESP+4]=31H('1',客户号第12位)!
004C931D 8A510E           mov dl,byte ptr ds:[ecx+E]            ;DL=34H('4',客户号第15位)!
004C9320 88442410          mov byte ptr ss:[esp+10],al            ;SS:[ESP+10]=57H('W',客户号第8位)!
004C9324 8A410D           mov al,byte ptr ds:[ecx+D]     ;AL=33H('3',客户号第14位)!
004C9327 88542408          mov byte ptr ss:[esp+8],dl            ;SS:[ESP+8]=34H('4',客户号第15位)!
004C932B 8A5103           mov dl,byte ptr ds:[ecx+3]            ;DL=49H('I',客户号第4位)!
004C932E 02D0            add dl,al                     ;DL=7CH(49H+33H,客户号4位+14位)!
004C9330 88442403          mov byte ptr ss:[esp+3],al            ;SS:[ESP+3]=33H('3',客户号第14位)!
004C9334 8A442404          mov al,byte ptr ss:[esp+4]            ;AL=31H('1',客户号第12位)!
004C9338 53             push ebx
004C9339 8A590C           mov bl,byte ptr ds:[ecx+C]            ;BL=32H('2',客户号第13位)!
004C933C 02D0            add dl,al                     ;DL=0ADH(7CH+31H,客户号4位+14位+12位)!
004C933E 56             push esi                     ;ESI="123I56-WU0-1234567"(客户号)!
004C933F 8AC3            mov al,bl                     ;AL=32H('2',客户号第13位)!
004C9341 0FB6F2           movzx si,dl                    ;SI=0ADH;ESI=3600ADH!
004C9345 8A5108           mov dl,byte ptr ds:[ecx+8]            ;DL=55H('U',客户号第9位)!
004C9348 57             push edi
004C9349 02C2            add al,dl                     ;AL=87H(32H+55H,客户号13位+9位)!
004C934B 8A54241C          mov dl,byte ptr ss:[esp+1C]            ;DL=57H('W',客户号第8位)!
004C934F 02C2            add al,dl                     ;AL=0DEH(87H+57H,客户号13位+9位+8位)!
004C9351 33D2            xor dx,dx              ;DX=0000H;EDX=120000H!
004C9354 8AD0            mov dl,al                     ;DL=0DEH(87H+57H,客户号13位+9位+8位)!
004C9356 33C0            xor eax,eax                    ;EAX=0!
004C9358 8A01            mov al,byte ptr ds:[ecx]      ;AL=31H('1',客户号第1位)!
004C935A 0FAFF2           imul esi,edx                   ;ESI=1200DEH*3600ADH=3AFE9606H(3CC3AFE9606H)!
004C935D 8B542414          mov edx,dword ptr          ;ss:[esp+14]        ;EDX=34H('4',客户号第15位)!
004C9361 BF0A000000         mov edi,0A                    ;EDI=0AH(10D)!
004C9366 81E2FF0000         and edx,0FF             ;EDX=34H!
004C936C 03C2            add eax,edx                    ;EAX=65H(31H+34H,客户号第1位+15位)!
004C936E 8B542410          mov edx,dword ptr ss:[esp+10]           ;EDX=31H('1',客户号第12位)!
004C9372        81E2FF0000         and edx,0FF             ;EDX=31H!
004C9378        03C2            add eax,edx                    ;EAX=96H(65H+31H,客户号第1位+15位+12位)!
004C937A        99             cdq
004C937B        F7FF            idiv edi                     ;EAX/EDI(96H/0AH),商存入EAX(0FH),余数存入EDX(0)!
004C937D        33C0            xor ax,ax              ;EAX=0!
004C9380        5F             pop edi
004C9381        8AC2            mov al,dl        ;AL=0!
004C9383        8A54240B          mov dl,byte ptr ss:[esp+B]                ;DL=33H('3',客户号第14位)!
004C9387        03F0            add esi,eax
004C9389        8A4108           mov al,byte ptr ds:[ecx+8]                ;AL=55H('U',客户号第9位)!
004C938C        02D0            add dl,al                                  ;DL=88H(33H+55H,客户号第9位+14位)!
004C938E        8A4102           mov al,byte ptr ds:[ecx+2]                ;AL=33H('3',客户号第3位)!
004C9391        02D0            add dl,al                                  ;DL=0BBH(88H+33H,客户号第9位+14位+3位)!
004C9393        0FB6D2           movzx dx,dl
004C9397        0FAFF2           imul esi,edx                              ;ESI=3AFE9606H*0BBH=2B17F79662H(17F79662H)!
004C939A        8A5105           mov dl,byte ptr ds:[ecx+5]                ;DL=36H('6',客户号第6位)!
004C939D        8A4C2410          mov cl,byte ptr ss:[esp+10]         ;CL=34H('4',客户号第15位)!
004C93A1        2AD1            sub dl,cl                                  ;DL=2H(36H-34H,客户号第6位-15位)!
004C93A3        2AD9            sub bl,cl                                  ;BL=0FEH(32H-34H,客户号第13位-15位)!
004C93A5        02542418          add dl,byte ptr ss:[esp+18]                ;DL=59H(2H+57H,客户号第6位-15位+8位)!
004C93A9        02D8            add bl,al                                  ;BL=31H(0FEH+33H,客户号第13位+3位-15位)!
004C93AB        33C0                xor ax,ax                           ;EAX=0!
004C93AE        0FB6D2              movzx dx,dl
004C93B2        8AC3                mov al,bl                                  ;AL=31H(0FEH+33H,客户号第13位+3位-15位)!
004C93B4        0FAFD0              imul edx,eax                              ;EDX=59H*31H=1109H!
004C93B7        33C0                xor ax,ax                                  ;EAX=0!
004C93BA        03F2                add esi,edx                                ;ESI=17F7A76BH(17F79662H+1109H)!
004C93BC        0FB65424            movzx dx,byte ptr ss:[esp+B]              ;DX=33H('3',客户号第14位)!
004C93C2        8AC1                mov al,cl                                  ;EAX=34H('4',客户号第15位)!
004C93C4        8D0C40              lea ecx,dword ptr ds:[eax+eax*2]          ;ECX=9CH(34H*3,客户号第15位*3)!
004C93C7        03F1                add esi,ecx                                ;ESI=17F7A807H(17F7A807H+9CH)!
004C93C9        B9D0070000    mov ecx,7D0                                ;ECX=07D0H!
004C93CE        03F2          add esi,edx                                ;ESI=17F7A83AH(17F7A807H+客户号第15位*3+14位)!
004C93D0        81E6FFFF00           and esi,0FFFF                              ;ESI=0A83AH(“与”操作)!
004C93D6        8BC6                mov eax,esi                                ;EAX=0A83AH!
004C93D8        5E                  pop esi
004C93D9        99                  cdq
004C93DA        F7F9                idiv ecx                                  ;EAX/ECX(0A83AH/07D0H),余数存入EDX(42AH)!
………………        ………………
004C93E3        C3                  retn
(4)当程序中断在“004C93F6”处时,通过单步跟踪分析得知:
004C93F6        6AFF        push -1
………………        ………………
004C940E        8BBC24A801          mov edi,dword ptr ss:[esp+1A8]
004C9415        8B07                mov eax,dword ptr ds:[edi]                ;EAX="EFGH"(序列号)!
004C9417        8A08                mov cl,byte ptr ds:[eax]                  ;将序列号第1位存入CL!
004C9419        80F90A              cmp cl,0A                                  ;序列号第1位的十六进制值是否大于0AH!
004C941C        7315                jnb short MathMagi.004C9433                ;否,注册出错!
………………        ………………
004C9427        E8C6E50800          call <jmp.&MFC42.#1199>                    ;过此处,提示“The Serial Number is incorrect. ...”!
004C942C        32C0                 xor al,al
004C942E        E981010000          jmp MathMagi.004C95B4
004C9433        0FB6C9              movzx cx,cl                                ;将序列号第1位存入CX!
004C9437        33F6                xor esi,esi
004C9439        83F901              cmp cx,1                                  ;序列号第1位的十六进制值是否小于1H!
004C943D        7CDF                jl short MathMagi.004C941E                ;是,转移,注册出错!
004C943F        8D5001              lea edx,dword ptr ds:[eax+1]
004C9442        0FBFC9              movsx ecx,cx
004C9445        803A2D              cmp byte ptr ds:[edx],2D                  ;“*”!
004C9448        7501                jnz short MathMagi.004C944B
004C944A        46                  inc esi                                    ;ESI=ESI+1!
004C944B        42                  inc edx                                    ;EDX=EDX+1!
004C944C        49                  dec ecx                                    ;ECX=ECX-1!
004C944D        75F6                jnz short MathMagi.004C9445                ;与“*”处构成循环,对序列号字符逐一检查,是否包含“-”!
004C944F        83FE02              cmp si,2                                  ;序列号中是否有两处包含“-”!
004C9453        75C9                jnz short MathMagi.004C941E                ;否,转移,注册出错!
004C9455        8A08                mov cl,byte ptr ds:[eax]                  ;将序列号第1位存入CL!
004C9457        8A5001              mov dl,byte ptr ds:[eax+1]                ;将序列号第2位存入DL!
004C945A        8A5802              mov bl,byte ptr ds:[eax+2]                ;将序列号第3位存入BL!
004C945D        8B3580EE56          mov esi,dword ptr ds:[<&MSVCRT.spr>
004C9463        0FBE4003            movsx eax,byte ptr ds:[eax+3]              ;将序列号第4位存入EAX!
004C9467        50                  push eax
004C9468        0FBEC3              movsx eax,bl                              ;将序列号第3位存入EAX!
004C946B        50                  push eax
004C946C        0FBED2              movsx edx,dl                              ;将序列号第2位存入EDX!
004C946F        0FBEC1              movsx eax,cl                              ;将序列号第1位存入EAX!
………………        ………………
004C9480        8B07                mov eax,dword ptr ds:[edi]                ;EAX="EFGH"(序列号)!
004C9482        8A4805              mov cl,byte ptr ds:[eax+5]                ;将序列号第6位存入CL!
004C9485        8A5006              mov dl,byte ptr ds:[eax+6]                ;将序列号第7位存入DL!
004C9488        8A5807              mov bl,byte ptr ds:[eax+7]                ;将序列号第8位存入BL!
004C948B        0FBE4008             movsx eax,byte ptr ds:[eax+8]              ;将序列号第9位存入EAX!
004C948F        50             push eax
004C9490        0FBEC3           movsx eax,bl                              ;将序列号第8位存入EAX!
004C9493        50             push eax
004C9494        0FBED2           movsx edx,dl                              ;将序列号第7位存入EDX!
004C9497        0FBEC1           movsx eax,cl                              ;将序列号第6位存入EAX!
………………        ………………
004C94AB        8B07            mov eax,dword ptr ds:[edi]                ;EAX="EFGH"(序列号)!
004C94AD        8A480A           mov cl,byte ptr ds:[eax+A]                ;将序列号第11位存入CL!
004C94B0        8A500B           mov dl,byte ptr ds:[eax+B]                ;将序列号第12位存入DL!
004C94B3        8A580C           mov bl,byte ptr ds:[eax+C]                ;将序列号第13位存入BL!
004C94B6        0FBE400D          movsx eax,byte ptr ds:[eax+D]              ;将序列号第14位存入EAX!(可知序列号长14位!)
//重新输入序列号(1234-5678-90AB),跟踪分析!!!
004C94BA        50             push eax
004C94BB        0FBEC3           movsx eax,bl                              ;EAX=41H('A',序列号第13位)!
004C94BE        50             push eax
004C94BF        0FBED2           movsx edx,dl                              ;EDX=30H('0',序列号第12位)!
004C94C2        0FBEC1           movsx eax,cl                              ;EAX=39H('9',序列号第11位)!
………………        ………………
004C94D9        8D94249C00         lea edx,dword ptr ss:[esp+9C]              ;ss:[esp+9C]="90AB"(序列号后4位)!
004C94E0        8BCC                mov ecx,esp                                ;EDX="90AB"(序列号后4位)!
………………        ………………
004C94ED        8D84242001          lea eax,dword ptr ss:[esp+120]            ;ss:[esp+120]="5678"(序列号6-9位)!
004C94F4        8BCC                mov ecx,esp                                ;EAX="5678"(序列号6-9位)!
………………        ………………
004C950C        8D542424            lea edx,dword ptr ss:[esp+24]            ;ss:[esp+24]="1234"(序列号前4位)!
004C9510        8BCC            mov ecx,esp                                ;EDX="1234"(序列号前4位)!
………………        ………………
004C952E        E89D000000         call MathMagi.004C95D0                    ;跟进!
004C9533        83C40C           add esp,0C
004C9536        84C0            test al,al                                ;“与”操作!
004C9538        0F84E0FEFF         je MathMagi.004C941E                      ;ZF=1,转移,注册出错!
(5)步入“004C95D0”,通过单步跟踪分析得知:
004C95D0        6AFF            push -1
………………        ………………       
004C95EA        C74424240          mov dword ptr ss:[esp+24],0
004C95F2        8B44242C          mov eax,dword ptr ss:[esp+2C]              ;EAX="1234"(序列号前4位)!
004C95F6        8B48F8           mov ecx,dword ptr ds:[eax-8]              ;ECX="1234"(序列号前4位)!
004C95F9        85C9            test ecx,ecx                              ;ECX按位“与”操作!
004C95FB        0F84670100         je MathMagi.004C9768                      ;ZF=1,转移,注册出错!
004C9601        8B7C2430          mov edi,dword ptr ss:[esp+30]              ;EDI="5678"(序列号第6-9位)!
004C9605        8B4FF8           mov ecx,dword ptr ds:[edi-8]              ;ECX="5678"(序列号第6-9位)!
004C9608        85C9            test ecx,ecx                              ;ECX按位“与”操作!
004C960A        0F84580100         je MathMagi.004C9768                      ;ZF=1,转移,注册出错!
004C9610        8B742434          mov esi,dword ptr ss:[esp+34]              ;ESI="90AB"(序列号后4位)!
004C9614        8B4EF8           mov ecx,dword ptr ds:[esi-8]              ;ECX="90AB"(序列号后4位)!
004C9617        85C9            test ecx,ecx        ;ECX按位“与”操作!
004C9619        0F84490100         je MathMagi.004C9768                      ;ZF=1,转移,注册出错!
004C961F        8A08            mov cl,byte ptr ds:[eax]                  ;CL=31H('1',序列号第1位)!
004C9621        8A5001           mov dl,byte ptr ds:[eax+1]                ;DL=32H('2',序列号第2位)!
004C9624        884C2418          mov byte ptr ss:[esp+18],cl                ;ss:[esp+18]=31H('1',序列号第1位)!
004C9628        8A4802           mov cl,byte ptr ds:[eax+2]                 ;CL=33H('3',序列号第3位)!
004C962B        8854240A          mov byte ptr ss:[esp+A],dl                ;ss:[esp+A]=32H('2',序列号第2位)!
004C962F        8A5003           mov dl,byte ptr ds:[eax+3]                 ;DL=34H('4',序列号第4位)!
004C9632        8A4702           mov al,byte ptr ds:[edi+2]                 ;AL=37H('7',序列号第8位)!
004C9635        8854240C          mov byte ptr ss:[esp+C],dl                 ;ss:[esp+C]=34H('4',序列号第4位)!
004C9639        8A5602           mov dl,byte ptr ds:[esi+2]                ;DL=31H('1',序列号第13位)!
004C963C        88442414          mov byte ptr ss:[esp+14],al               ;ss:[esp+14]=37H('7',序列号第8位)!
004C9640        8A4603           mov al,byte ptr ds:[esi+3]                ;AL=32H('2',序列号第14位)!
004C9643        88542410          mov byte ptr ss:[esp+10],dl               ;ss:[esp+10]=41H('A',序列号第13位)!
004C9647        8B542414          mov edx,dword ptr ss:[esp+14]             ;EDX=37H('7',序列号第8位)!
004C964B        8844240B          mov byte ptr ss:[esp+B],al                ;ss:[esp+B]=42H('B',序列号第14位)!
004C964F        8B442410          mov eax,dword ptr ss:[esp+10]             ;EAX=41H('A',序列号第13位)!
004C9653        81E2FF0000         and edx,0FF                                ;EDX=37H('7',序列号第8位)!
004C9659        25FF000000         and eax,0FF                                ;EAX=41H('A',序列号第13位)!
004C965E        53             push ebx
004C965F        8A5E01           mov bl,byte ptr ds:[esi+1]                ;BL=30H('0',序列号第12位)!
004C9662        03C2            add eax,edx                                ;EAX=78H(41H+37H,序列号第13位+8位)!
004C9664        8B54241C          mov edx,dword ptr ss:[esp+1C]
004C9668        884C2411          mov byte ptr ss:[esp+11],cl                ;ss:[esp+1C]=33H('3',序列号第3位)!
004C966C        8A0E            mov cl,byte ptr ds:[esi]                  ;CL=39H('9',序列号第11位)!
004C966E        81E2FF0000         and edx,0FF                                ;EDX=31H('1',序列号第1位)!
004C9674        03C2            add eax,edx                               ;EAX=0A9H(78H+31H,序列号第13位+8位+1位)!
004C9676        BE0A000000         mov esi,0A                                ;将0AH存入ESI!
004C967B        99                  cdq
004C967C        F7FE                idiv esi                                  ;EAX/ESI,商存入EAX(10H),余数A存入EDX(9H)!
004C967E        8AC1                mov al,cl                                  ;AL=39H('9',序列号第11位)!
004C9680        C64424280           mov byte ptr ss:[esp+28],1                ;ss:[esp+28]=1H!
004C9685        88542413            mov byte ptr ss:[esp+13],dl               ;ss:[esp+13]=9H(余数A)!
004C9689        8A17                mov dl,byte ptr ds:[edi]                  ;DL=35H('5',序列号第6位)!
004C968B        02C2                add al,dl                                 ;AL=6EH(39H+35H,序列号第11位+6位)!
004C968D        8A542411            mov dl,byte ptr ss:[esp+11]                ;DL=33H('3',序列号第3位)!
004C9691        02C2                add al,dl                                  ;AL=0A1H(6EH+33H,序列号第11位+6位+3位)!
004C9693        8A5701        mov dl,byte ptr ds:[edi+1]                ;DL=36H('6',序列号第7位)!
004C9696        88442412            mov byte ptr ss:[esp+12],al                ;SS:[ESP+1]=0A1H(6EH+33H,序列号第11位+6位+3位)!
004C969A        8A44240F            mov al,byte ptr ss:[esp+F]                ;AL=42H(序列号第14位)!
004C969E        2AC2                sub al,dl                                 ;AL=0CH(42H-36H,序列号第14位-7位)!
004C96A0        8A54240E            mov dl,byte ptr ss:[esp+E]                ;DL=32H('2',序列号第2位)!
004C96A4        02C2                add al,dl                                  ;AL=3EH(0CH+32H,序列号第14位-7位+2位)!
004C96A6        8A542414            mov dl,byte ptr ss:[esp+14]                ;DL=41H('A',序列号第13位)!
004C96AA        88442411            mov byte ptr ss:[esp+11],al                ;SS:[ESP+11]=3EH(0CH+32H,序列号第14位-7位+2位)!
004C96AE        8A442410            mov al,byte ptr ss:[esp+10]                ;AL=34H('4',序列号第4位)!
004C96B2        02D3                add dl,bl                                  ;DL=71H(41H+30H,序列号第13位+12位)!
004C96B4        02D0                add dl,al                                  ;DL=A5H(71H+34H,序列号第13位+12位+4位)!
004C96B6        8A44240F            mov al,byte ptr ss:[esp+F]                ;AL=42H('B',序列号第14位)!
004C96BA        2AC8                sub cl,al                                  ;CL=0F7H(39H-42H,序列号第11位-14位)!
004C96BC        8A44240E            mov al,byte ptr ss:[esp+E]                ;AL=32H('2',序列号第2位)!
004C96C0        02C8                add cl,al                                  ;CL=29H(0F7H-32H,序列号第11位-14位+2位)!
004C96C2        8A442410             mov al,byte ptr ss:[esp+10]                ;AL=34H('4',序列号第4位)!
004C96C6        02D8                add bl,al                                  ;BL=64H(30H+34H,序列号第12位+4位)!
004C96C8        33C0                xor ax,ax                                  ;AX=0!
004C96CB        0FB6D2              movzx dx,dl
004C96CF        8AC3                mov al,bl                                  ;AL=64H(30H+34H,序列号第12位+4位)!
004C96D1        5B                  pop ebx
004C96D2        0FAFC2              imul eax,edx                              ;EAX=*64H*0A5H=4074H((第12位+4位)*(第13位+12位+4位))!
004C96D5        0FB65424            movzx dx,byte ptr ss:[esp+D]              ;DX=3EH(0CH+32H,序列号第14位-7位+2位)!
004C96DB        0FB6C9              movzx cx,cl
004C96DF        0FAFCA              imul ecx,edx                              ;ECX=9EEH((第11位-14位+2位)*(第14位-7位+2位))!
004C96E2        0FB65424            movzx dx,byte ptr ss:[esp+F]              ;DX=09H(余数A)!
004C96E8        03C1                add eax,ecx
;EAX=4074H+9EEH=4A62H((第12位+4位)*(第13位+12位+4位)+(第11位-14位+2位)*(第14位-7位+2位))!
004C96EA        0FB64C24            movzx cx,byte ptr ss:[esp+E]              ;CX=0A1H(6EH+33H,序列号第11位+6位+3位)!
004C96F0        0FAFCA              imul ecx,edx                              ;ECX=5A9H((序列号第11位+6位+3位)*余数A)!
004C96F3        0FB65424            movzx dx,byte ptr ss:[esp+10]              ;DX=41H('A',序列号第13位)!
004C96F9        03C1                add eax,ecx
;EAX=500BH((第12位+4位)*(第13位+12位+4位)+(第11位-14位+2位)*(第14位-7位+2位)+(第11位+6位+3位)*余数A)!
004C96FB        0FB64C24            movzx cx,byte ptr ss:[esp+A]              ;CX=32H('2',序列号第2位)!
004C9701        8D0C49              lea ecx,dword ptr ds:[ecx+ecx*2]          ;ECX=96H(序列号第2位*3)!
004C9704        03C1                add eax,ecx
;EAX=50A1H((12位+4位)*(13位+12位+4位)+(11位-14位+2位)*(14位-7位+2位)+(11位+6位+3位)*余数A+(2位*3))!
004C9706        B91A000000          mov ecx,1A                                ;ECX=1AH!
004C970B        03C2                add eax,edx
;EAX=((12位+4位)*(13位+12位+4位)+(11位-14位+2位)*(14位-7位+2位)+(11位+6位+3位)*余数A+(2位*3)+13位)!
004C970D        25FFFF0000          and eax,0FFFF                              ;EAX与0FFFFH作“与”运算!
004C9712        99                  cdq
004C9713        F7F9                idiv ecx                                  ;EAX/ECX,商存入EAX(31CH),余数B存入EDX(A)!
004C9715        8D4C242C            lea ecx,dword ptr ss:[esp+2C]        ;
004C9719        80C241              add dl,41                                  ;DL=0AH+41H=4BH(余数B+41H)!
004C971C        88542418             mov byte ptr ss:[esp+18],dl                ;SS:[ESP+18]=4BH(余数B+41H)!
004C9720        0FBE5703             movsx edx,byte ptr ds:[edi+3]              ;EDX=38H('8',序列号第9位)!
004C9724        8B442418             mov eax,dword ptr ss:[esp+18]
004C9728        25FF000000          and eax,0FF                                ;EAX=4BH(余数+41H)!
004C972D        3BC2                cmp eax,edx                                ;EAX是否等于EDX(序列号第9位十六进制值)!
004C972F        7540                jnz short MathMagi.004C9771                ;否,转移,注册出错!
//得到输入序列号“1234-567K-90AB”!!!
………………        ………………
004C9767        C3        retn
5.重新输入用户名(Blade)、客户号(123I56-WU0-123442A)、序列号(1234-567K-90AB)运行程序,出现“The Serial # is not matched to the Customer # ...”提示,经分析在“004C953E”设断!用OllyDbg载入程序,运行,并在“004C953E”处设断!
(1)返回程序随意输入用户名(Blade)客户号(123I56-WU0-123442A)和序列号(1234-567K-90AB),点击“Authorization”。程序中断在“004C953E”处!通过单步跟踪分析得知:
004C953E        51                  push ecx
………………        ………………
004C9575        E836020000          call MathMagi.004C97B0                    ;跟进!
004C957A        83C4 08       add esp,8
004C957D        84C0          test al,al                                ;“与”操作!
004C957F        75 12         jnz short MathMagi.004C9593                ;ZF=1,不转移,注册出错!
(2)步入“004C97B0”,通过单步跟踪分析得知:
004C97B0        A100000              mov eax,dword ptr fs:[0]
………………        ………………
004C97CF        8B442420            mov eax,dword ptr ss:[esp+20]              ;EAX="123I56-WU0-123442A"(客户号)!
004C97D3        33FF                xor edi,edi                                ;EDI=0!
004C97D5        3958F8              cmp dword ptr ds:[eax-8],ebx              ;客户号是否为空!
004C97D8        0F84210100          je MathMagi.004C98FF                      ;转移,注册出错!
004C97DE        8B6C2424            mov ebp,dword ptr ss:[esp+24]              ;EBP="1234"(序列号前4位)!
004C97E2        395DF8              cmp dword ptr ss:[ebp-8],ebx              ;序列号是否为空!
004C97E5        0F84140100          je MathMagi.004C98FF                      ;是,转移,注册出错!
004C97EB        0FB608              movzx cx,byte ptr ds:[eax]                ;CX=31H('1',客户号第1位)!
004C97EF        0FBFC9              movsx ecx,cx                              ;CX=360000H+31H('1',客户号第1位)!
004C97F2        BA01000000          mov edx,1                                  ;EDX=1H!
004C97F7        8D71FF              lea esi,dword ptr ds:[ecx-1]
004C97FA        3BF2                cmp esi,edx
004C97FC        7E10                jle short MathMagi.004C980E
004C97FE        8BCA                mov ecx,edx                                ;ECX=1H!
………………        ………………
004C980E        8A4807              mov cl,byte ptr ds:[eax+7]                ;CL=57H('W',客户号第8位)!
004C9811        80F94D              cmp cl,4D                                  ;客户号第8位是否是“M”!
004C9814        0FBE4808            movsx ecx,byte ptr ds:[eax+8]              ;ECX=55H('U',客户号第9位)!
004C9818        751D                jnz short MathMagi.004C9837                ;否,转移!
………………        ………………
004C9837        83E94A              sub ecx,4A                                ;ECX=0BH(客户号第9位-4AH)!
004C983A        7414                je short MathMagi.004C9850
004C983C        49                  dec ecx                                    ;ECX=ECX-1H=0AH!
004C983D        740D                je short MathMagi.004C984C
004C983F        83E90A              sub ecx,0A                                ;ECX=0!
004C9842        7404                je short MathMagi.004C9848                ;转移!
004C9844        B254                mov dl,54
004C9846        EB0A                jmp short MathMagi.004C9852
004C9848        B255                mov dl,55                                  ;DL=55H!
004C984A        EB06                jmp short MathMagi.004C9852                ;转移!
004C984C        B253                mov dl,53
004C984E        EB02                jmp short MathMagi.004C9852
004C9850        B252                mov dl,52
004C9852        8A4803              mov cl,byte ptr ds:[eax+3]                ;CL=49H('I',客户号第3位)!
004C9855        80F958              cmp cl,58                                  ;客户号第3位是否是“X”!
004C9858        7523                jnz short MathMagi.004C987D                ;否,转移!
………………        ………………
004C987D        0FBE4004            movsx eax,byte ptr ds:[eax+4]              ;EAX=35H('5',客户号第5位)!
004C9881        80F949              cmp cl,49                                  ;客户号第3位是否是“I”!
004C9884        751F                jnz short MathMagi.004C98A5                ;是,不转移!
004C9886        83E841               sub eax,41                                ;EAX=0FFFFFFF4H(客户号第5位-41H)!
004C9889        7416                je short MathMagi.004C98A1
004C988B        83E802              sub eax,2                                  ;EAX=0FFFFFFF2H(客户号第5位-41H-2H)!
004C988E        740D                je short MathMagi.004C989D
004C9890        83E80B              sub eax,0B                                ;EAX=0FFFFFFE7H(客户号第5位-41H-2H-0BH)!
004C9893        7404                je short MathMagi.004C9899
004C9895 B04B                mov al,4B                                  ;AL=4BH(EAX=FFFFFF4BH)!
004C9897 EB29                jmp short MathMagi.004C98C2                ;转移!
………………        ………………
004C98C2 3A5502              cmp dl,byte ptr ss:[ebp+2]                ;DL是否等于序列号第3位!
004C98C5 7538                jnz short MathMagi.004C98FF                ;否,转移,注册出错!
004C98C7 3A4503     cmp al,byte ptr ss:[ebp+3]                ;AL是否等于序列号第4位!
004C98CA 7533                                  jnz short MathMagi.004C98FF                      ;否,转移,注册出错!
………………        ………………

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
是原创还是转帖?
代码你可以在记事本里排好,发表时直接复制过来,效果基本和记事本上一样。不要在论坛发帖框里排版。
2005-10-17 18:14
0
游客
登录 | 注册 方可回帖
返回
//