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 爆是爆了,就是不会算法分析,向楼主学习了。
最好是写篇教程记录下内容。 算法分析这个难度很大,不知道有没有什么工具可以帮助的? 谢谢分享,学习了
页:
[1]