shenaset 发表于 2009-3-14 09:54

MAKE in H&Y算法分析

本帖最后由 shenaset 于 2009-3-14 10:52 编辑

【文章标题】: MAKE in H&Y算法分析
【文章作者】: .........
【作者邮箱】: .........
【作者主页】: .........
【作者QQ号】: .........
【软件名称】: MAKE in H&Y
【下载地址】: http://bbs.52pojie.cn/thread-20354-1-1.html
【作者声明】: 有些地方可能分析的不是很好,请大虾指点
--------------------------------------------------------------------------------
【详细过程】

004016C0/.55            PUSH EBP
004016C1|.8BEC          MOV EBP,ESP
004016C3|.83E4 F8       AND ESP,FFFFFFF8
004016C6|.83EC 20       SUB ESP,20
004016C9|.53            PUSH EBX
004016CA|.55            PUSH EBP
004016CB|.56            PUSH ESI
004016CC|.57            PUSH EDI
004016CD|.6A 01         PUSH 1
004016CF|.8BF9          MOV EDI,ECX
004016D1|.E8 98700000   CALL cm2.0040876E
004016D6|.8DAF 20010000 LEA EBP,DWORD PTR DS:
004016DC|.8BF5          MOV ESI,EBP
004016DE|.E8 1D020000   CALL cm2.00401900
004016E3|.84C0          TEST AL,AL
004016E5|.0F85 4E010000 JNZ cm2.00401839                         ;第一处不能为空
004016EB|.8DB7 CC010000 LEA ESI,DWORD PTR DS:
004016F1|.E8 0A020000   CALL cm2.00401900
004016F6|.84C0          TEST AL,AL
004016F8|.0F85 3B010000 JNZ cm2.00401839                         ;第二处不能为空
004016FE|.8D9F 24020000 LEA EBX,DWORD PTR DS:
00401704|.8BF3          MOV ESI,EBX
00401706|.E8 F5010000   CALL cm2.00401900
0040170B|.84C0          TEST AL,AL
0040170D|.0F85 26010000 JNZ cm2.00401839                         ;第三处不能为空
00401713|.8DB7 7C020000 LEA ESI,DWORD PTR DS:
00401719|.E8 E2010000   CALL cm2.00401900
0040171E|.84C0          TEST AL,AL
00401720|.0F85 13010000 JNZ cm2.00401839                         ;第四处不能为空
00401726|.8B1B          MOV EBX,DWORD PTR DS:               ;第三个框数值放到EBX里
00401728|.53            PUSH EBX                                 ; /Arg1
00401729|.E8 76D60100   CALL cm2.0041EDA4                        ; \eax=1EA0
0040172E|.DD5424 2C   FST QWORD PTR SS:                ;保存第三个框
00401732|.DD05 B8A24300 FLD QWORD PTR DS:                ;装入430
00401738|.83C4 04       ADD ESP,4
0040173B|.D8D9          FCOMP ST(1)                              ;430与第三个框数值比较
0040173D|.DFE0          FSTSW AX                                 ;把FST放入AX
0040173F|.F6C4 05       TEST AH,5
00401742|.0F8A E0000000 JPE cm2.00401828
00401748|.DD05 B0A24300 FLD QWORD PTR DS:                ;装入612
0040174E|.D8D9          FCOMP ST(1)                              ;612与第三个框数值比较
00401750|.DFE0          FSTSW AX                                 ;把FST放入AX
00401752|.F6C4 41       TEST AH,41
00401755|.0F85 CD000000 JNZ cm2.00401828                         ;430<第三个框数值<612
0040175B|.D9E8          FLD1
0040175D|.B8 02000000   MOV EAX,2
00401762|.DD5424 20   FST QWORD PTR SS:                ;保存1
00401766|>A8 01         /TEST AL,1
00401768|.74 02         |JE SHORT cm2.0040176C
0040176A|.D8C9          |FMUL ST,ST(1)
0040176C|>D1E8          |SHR EAX,1
0040176E|.74 06         |JE SHORT cm2.00401776
00401770|.D9C1          |FLD ST(1)                               ;装入第三个框数值
00401772|.DECA          |FMULP ST(2),ST                        ;第3个框数值*第3个框数值
00401774|.^ EB F0         \JMP SHORT cm2.00401766
00401776|>8B45 00       MOV EAX,DWORD PTR SS:               ;第一个框放到EAX里
00401779|.DDD9          FSTP ST(1)                               ;装入第3个框数值*第3个框数值
0040177B|.50            PUSH EAX                                 ; /Arg1
0040177C|.DD5C24 24   FSTP QWORD PTR SS:               ; |
00401780|.E8 48D60100   CALL cm2.0041EDCD                        ; \第一个框转成十六进制
00401785|.8BD8          MOV EBX,EAX                              ;第一个框放到EBX里
00401787|.8D83 6BFDFFFF LEA EAX,DWORD PTR DS:         ;FA放到EAX里
0040178D|.83C4 04       ADD ESP,4
00401790|.895C24 1C   MOV DWORD PTR SS:,EBX
00401794|.3D FA000000   CMP EAX,0FA                              ;第一个框的数值转成十六进制与0FA比较
00401799|.0F87 8B000000 JA cm2.0040182A                        ;第一个框数值(H)-295<0FA
0040179F|.8B06          MOV EAX,DWORD PTR DS:               ;第4个框放到EAX
004017A1|.50            PUSH EAX                                 ; /Arg1
004017A2|.E8 26D60100   CALL cm2.0041EDCD                        ; \第4个框转成十六进制
004017A7|.894424 1C   MOV DWORD PTR SS:,EAX
004017AB|.05 F8FDFFFF   ADD EAX,-208                           ;第4个框-208
004017B0|.83C4 04       ADD ESP,4
004017B3|.3D C8000000   CMP EAX,0C8                              ;与C8比较
004017B8|.0F87 AF000000 JA cm2.0040186D                        ;第四个框数值(H)-208<0C8
004017BE|.8B87 CC010000 MOV EAX,DWORD PTR DS:         ;第二个框数值放到EAX
004017C4|.50            PUSH EAX                                 ; /Arg1
004017C5|.E8 DAD50100   CALL cm2.0041EDA4                        ; \cm2.0041EDA4
004017CA|.DD05 A8A24300 FLD QWORD PTR DS:                ;装入480
004017D0|.D8D9          FCOMP ST(1)                              ;480与第二个框数值比较
004017D2|.83C4 04       ADD ESP,4
004017D5|.DFE0          FSTSW AX
004017D7|.F6C4 41       TEST AH,41
004017DA|.0F84 8B000000 JE cm2.0040186B
004017E0|.DD05 A0A24300 FLD QWORD PTR DS:                ;装入690
004017E6|.D8D9          FCOMP ST(1)                              ;690与第二个框数值比较
004017E8|.DFE0          FSTSW AX                                 ;FST放入AX
004017EA|.F6C4 05       TEST AH,5
004017ED|.7B 7C         JPO SHORT cm2.0040186B                   ;480<第二个框数值(D)<690
004017EF|.8BCB          MOV ECX,EBX                              ;第一个框数值转成十六进制放到ECX里
004017F1|.0FAFCB      IMUL ECX,EBX                           ;g=第一个框数值*第一个框数值
004017F4|.894C24 14   MOV DWORD PTR SS:,ECX            ;
004017F8|.DB4424 14   FILD DWORD PTR SS:               ;g转成十进制
004017FC|.DC6424 20   FSUB QWORD PTR SS:               ;d=g-第3个框数值*第3个框数值
00401800|.DB4424 18   FILD DWORD PTR SS:               ;第4个框装入
00401804|.DEC2          FADDP ST(2),ST                           ;a=第二个框+第4个框
00401806|.DB4424 1C   FILD DWORD PTR SS:               ;第一个框装入
0040180A|.DC6424 28   FSUB QWORD PTR SS:               ;b=第一个框-第三个框
0040180E|.DECA          FMULP ST(2),ST                           ;c=a*b
00401810|.DAE9          FUCOMPP                                  ;c与d比较
00401812|.DFE0          FSTSW AX                                 ;把FST放到AX
00401814|.F6C4 44       TEST AH,44
00401817|.7A 54         JPE SHORT cm2.0040186D                  
00401819|.8BCF          MOV ECX,EDI
0040181B|.E8 60000000   CALL cm2.00401880
00401820|.5F            POP EDI
00401821|.5E            POP ESI
00401822|.5D            POP EBP
00401823|.5B            POP EBX
00401824|.8BE5          MOV ESP,EBP
00401826|.5D            POP EBP
00401827|.C3            RETN
00401828|>DDD8          FSTP ST
0040182A|>8BCF          MOV ECX,EDI
0040182C|.E8 9F000000   CALL cm2.004018D0
00401831|.5F            POP EDI
00401832|.5E            POP ESI
00401833|.5D            POP EBP
00401834|.5B            POP EBX
00401835|.8BE5          MOV ESP,EBP
00401837|.5D            POP EBP
00401838|.C3            RETN
00401839|>6A 00         PUSH 0                                 ; /Arg1 = 00000000
0040183B|.8D4F 78       LEA ECX,DWORD PTR DS:            ; |
0040183E|.E8 0BA70000   CALL cm2.0040BF4E                        ; \cm2.0040BF4E
00401843|.8DB7 CC000000 LEA ESI,DWORD PTR DS:
00401849|.6A 00         PUSH 0                                 ; /Arg1 = 00000000
0040184B|.8BCE          MOV ECX,ESI                              ; |
0040184D|.E8 FCA60000   CALL cm2.0040BF4E                        ; \cm2.0040BF4E
00401852|.6A 64         PUSH 64                                  ; /Timeout = 100. ms
00401854|.FF15 A8424300 CALL DWORD PTR DS:[<&KERNEL32.Sleep>]    ; \Sleep
0040185A|.6A 05         PUSH 5                                 ; /Arg1 = 00000005
0040185C|.8BCE          MOV ECX,ESI                              ; |
0040185E|.E8 EBA60000   CALL cm2.0040BF4E                        ; \cm2.0040BF4E
00401863|.5F            POP EDI
00401864|.5E            POP ESI
00401865|.5D            POP EBP
00401866|.5B            POP EBX
00401867|.8BE5          MOV ESP,EBP
00401869|.5D            POP EBP
0040186A|.C3            RETN

--------------------------------------------------------------------------------
【经验总结】
算法:
       第一个框数值(H)-295<0FA   '661-910之间的数都行
       480<第二个框数值(D)<690   
       430<第三个框数值(D)<612
       第四个框数值(H)-208<0C8   '521-719之间的数都行
       最后一步:第一个框数值*第一个框数值-第三个框数值*第三个框数值=(第二个框数值+第四个框数值)*(第一个框数值-第三个框数值)

附注册码一个:900-650-431-681

--------------------------------------------------------------------------------
【版权声明】: 怎么会有版权呢,没版权,只要不用偶名字乱来就行了

                                                   2009-3-14

CHHSun 发表于 2009-3-14 10:43

爆是爆了,就是不会算法分析,向楼主学习了。
最好是写篇教程记录下内容。

菠萝包 发表于 2009-3-14 11:03

算法分析这个难度很大,不知道有没有什么工具可以帮助的?

streamload 发表于 2009-3-14 13:48

谢谢分享,学习了
页: [1]
查看完整版本: MAKE in H&Y算法分析