JZL 发表于 2014-11-12 13:43:03

飘云阁第十一期初级班第二课分析

本帖最后由 MOD 于 2014-11-12 13:44 编辑

个人懒惰,未能完成今年的教学课程,现在自学今年的教学。

CMP   DWORD PTR , 0                // 此命令意为 计算DWORD PTR -b的结果 (为0时 z标志位置1 不为0时,z标志位置0)
JNZ   0040173E                                        // 此命令意为 jump not zero      当计算结果不为0时跳转


TEST    EAX, EAX                        //此命令意为 计算eax+eax的结果 (为0时 z标志位置1 不为0时,z标志位置0)
JE      SHORT 004017B7                //此命令意为 jump equal zero 当计算结果为0时跳转

CMP   EAX, 4                              //此命令意为 计算eax-4的结果 (为0时 z标志位置1 不为0时,z标志位置0)
JL      SHORT 0040183D                //此命令意为 jump little 当计算结果小于0时跳转 (小于0时,s标志位置1,大于等于0时,s标志位置0)


点击OK按钮后程序基本流程:
判断Name、Key是否为空
      为空时直接弹窗提示
      不为空时
                判断Key是否为chinapyg
                        不是chinapyg就提示注册失败
                        为chinapyg时,判断Name字符串长度
                              长度小于4时,提示注册失败
                              长度大于等于4时,提示注册成功
004016B0/$55                     PUSH    EBP
…………
00401798|.E8 53000000            |CALL    004017F0
       
        004017F0/$55                     PUSH    EBP
        004017F1|.8BEC                   MOV   EBP, ESP
        004017F3|.83EC 14                SUB   ESP, 14
        004017F6|.894D EC                MOV   , ECX
        004017F9      C745 F8 00000000       MOV   DWORD PTR , 0         ;方法二:MOV   DWORD PTR , 1 修改最终返回的eax的源头初始值
        00401800|.8B45 08                MOV   EAX,
        00401803|.50                     PUSH    EAX
        00401804|.8D4D FC                LEA   ECX,
        00401807|.E8 54180000            CALL    00403060
        0040180C|.8B4D 0C                MOV   ECX,
        0040180F|.51                     PUSH    ECX
        00401810|.8D4D F4                LEA   ECX,
        00401813|.E8 48180000            CALL    00403060
        00401818      68 40F44000            PUSH    0040F440                     ;ChinaPYG
        0040181D      8D4D E8                LEA   ECX,                ;方法三:LEA   ECX, 里是ChinaPYG 里是输入的Key。这是修改比较参数
        00401820|.E8 FB190000            CALL    00403220
        00401825|.85C0                   TEST    EAX, EAX
        00401827      75 14                  JNZ   SHORT 0040183D               ;方法四:JNZ   SHORT 00401836 修改跳转到给赋值的地方
        00401829|.8D4D FC                LEA   ECX,
        0040182C|.E8 CF190000            CALL    00403200
        00401831|.83F8 04                CMP   EAX, 4
        00401834      7C 07                  JL      SHORT 0040183D               ;方法三:JL      SHORT 00401836 配合上面的那条方法三
        00401836|.C745 F8 01000000       MOV   DWORD PTR , 1
        0040183D|>8B55 F8                MOV   EDX,
        00401840|.8955 F0                MOV   , EDX
        00401843|.8D4D F4                LEA   ECX,
        00401846|.E8 551C0000            CALL    004034A0
        0040184B|.8D4D FC                LEA   ECX,
        0040184E|.E8 4D1C0000            CALL    004034A0
        00401853|.8B45 F0                MOV   EAX,
        00401856|.8BE5                   MOV   ESP, EBP
        00401858|.5D                     POP   EBP
        00401859\.C2 0800                RETN    8

0040179D|.85C0                   |TEST    EAX, EAX
0040179F|.74 16                  |JE      SHORT 004017B7            ;方法一:修改跳转 JE      SHORT 004017A1 尽管检定结果出来了,我就是不执行^__^
004017A1|.6A 00                  |PUSH    0                           ; /Style = MB_OK|MB_APPLMODAL
004017A3|.68 08F44000            |PUSH    0040F408                  ; |注册成功
004017A8|.68 F8F34000            |PUSH    0040F3F8                  ; |恭喜注册成功!
004017AD|.6A 00                  |PUSH    0                           ; |hOwner = NULL
004017AF|.FF15 B4F14000          |CALL    NEAR [<&USER32.MessageBoxW>>; \MessageBoxW
004017B5|.EB 14                  |JMP   SHORT 004017CB
004017B7|>6A 00                  |PUSH    0                           ; /Style = MB_OK|MB_APPLMODAL
004017B9|.68 ECF34000            |PUSH    0040F3EC                  ; |注册失败
004017BE|.68 E0F34000            |PUSH    0040F3E0                  ; |注册失败。
004017C3|.6A 00                  |PUSH    0                           ; |hOwner = NULL
004017C5|.FF15 B4F14000          |CALL    NEAR [<&USER32.MessageBoxW>>; \MessageBoxW
004017CB|>33C9                   |XOR   ECX, ECX
004017CD|.^ 0F85 22FFFFFF          \JNZ   004016F5
004017D3|>33C0                   XOR   EAX, EAX
004017D5|.8B4D FC                MOV   ECX,
004017D8|.33CD                   XOR   ECX, EBP
004017DA|.E8 1C6D0000            CALL    004084FB
004017DF|.8BE5                   MOV   ESP, EBP
004017E1|.5D                     POP   EBP
004017E2\.C2 1000                RETN    10




wgz001 发表于 2014-11-12 15:08:53

不错,加油{:soso_e179:}
页: [1]
查看完整版本: 飘云阁第十一期初级班第二课分析