【文章标题】: Buzof 2.0 算法分析
【文章作者】: Xuanyue
【软件名称】: Buzof 2.0
【下载地址】:
5c4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3u0S2M7%4c8S2i4K6u0W2j5$3!0E0i4K6u0r3f1s2u0G2k6p5u0#2P5X3!0X3i4K6u0W2K9s2c8E0
【保护方式】: 注册码
【使用工具】: OllyDBD、Microsoft Visual C++ 6.0
【操作平台】: win2000
【软件介绍】: Buzof允许你自动回答、关闭、最小化任何窗口。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!初学Crack,这可说是我破的第一个win32软件、写的第一个keygen,望前辈高手指出不足~
--------------------------------------------------------------------------------
【详细过程】
一、算法跟踪
根据注册框提示信息,很容易找到下面;
0041D5B7 |. /0F84 4B010000 JE Buzof-BA.0041D708
0041D5BD |. |8BC3 MOV EAX,EBX
0041D5BF |. |8D50 02 LEA EDX,DWORD PTR DS:[EAX+2] ; 第一位舍去存edx
0041D5C2 |> |66:8B08 /MOV CX,WORD PTR DS:[EAX] ; 检测长度
0041D5C5 |. |83C0 02 |ADD EAX,2
0041D5C8 |. |66:85C9 |TEST CX,CX
0041D5CB |.^|75 F5 \JNZ SHORT Buzof-BA.0041D5C2
0041D5CD |. |2BC2 SUB EAX,EDX
0041D5CF |. |D1F8 SAR EAX,1
0041D5D1 |. |83F8 10 CMP EAX,10 ; 是否是16位
0041D5D4 |. |0F85 30010000 JNZ Buzof-BA.0041D70A
0041D5DA |. |56 PUSH ESI
0041D5DB |. |8BF0 MOV ESI,EAX ; 长度存esi
0041D5DD |. |8D49 00 LEA ECX,DWORD PTR DS:[ECX]
0041D5E0 |> |0FB74473 FE /MOVZX EAX,WORD PTR DS:[EBX+ESI*2-2]
0041D5E5 |. |83EE 01 |SUB ESI,1
0041D5E8 |. |50 |PUSH EAX
0041D5E9 |. |E8 212C0100 |CALL Buzof-BA.0043020F
0041D5EE |. |83C4 04 |ADD ESP,4 ; 出栈
0041D5F1 |. |85C0 |TEST EAX,EAX ; 检测是否为数字
0041D5F3 |. |0F84 22010000 |JE Buzof-BA.0041D71B ; 不是则跳出
0041D5F9 |. |85F6 |TEST ESI,ESI
0041D5FB |.^|75 E3 \JNZ SHORT Buzof-BA.0041D5E0
0041D5FD |. |55 PUSH EBP
0041D5FE |. |0FB76B 1E MOVZX EBP,WORD PTR DS:[EBX+1E] ; 最后一位存ebp
0041D602 |. |83ED 30 SUB EBP,30 ; unicode转成数字
0041D605 |. |8BC5 MOV EAX,EBP
0041D607 |. |0FAFC5 IMUL EAX,EBP ; 平方
0041D60A |. |99 CDQ
0041D60B |. |B9 0A000000 MOV ECX,0A
0041D610 |. |F7F9 IDIV ECX ; 除以10
0041D612 |. |83C2 30 ADD EDX,30 ; 综上,为(x-0x30)^2%10+30
0041D615 |. |66:39146B CMP WORD PTR DS:[EBX+EBP*2],DX ; 设最后一位是数字a,则第a+1位必须等于edx值
0041D619 |0F85 EF000000 JNZ Buzof-BA.0041D70E
0041D61F |. |8D45 01 LEA EAX,DWORD PTR SS:[EBP+1] ; (a+1)%15存入eax
0041D622 |. |83F8 0F CMP EAX,0F
0041D625 |. |7C 03 JL SHORT Buzof-BA.0041D62A
0041D627 |. |83E8 0F SUB EAX,0F
0041D62A |> |0FB70C43 MOVZX ECX,WORD PTR DS:[EBX+EAX*2]
0041D62E |. |8D71 D0 LEA ESI,DWORD PTR DS:[ECX-30] ; 第a+2位转成数字存esi
0041D631 |. |83FE 02 CMP ESI,2
0041D634 |. |7D 05 JGE SHORT Buzof-BA.0041D63B ; >2,ecx置1;=2,置0;否则置ffffffff(失败)
0041D636 |. |83C9 FF OR ECX,FFFFFFFF
0041D639 |. |EB 08 JMP SHORT Buzof-BA.0041D643
0041D63B |> |33C9 XOR ECX,ECX
0041D63D |. |83FE 02 CMP ESI,2
0041D640 |. |0F9FC1 SETG CL
0041D643 |> |8B5424 10 MOV EDX,DWORD PTR SS:[ESP+10]
0041D647 |. |83C0 01 ADD EAX,1 ; eax<=(a+2)%15
0041D64A |. |83F8 0F CMP EAX,0F
0041D64D |. |890A MOV DWORD PTR DS:[EDX],ECX
0041D64F |. |7C 03 JL SHORT Buzof-BA.0041D654
0041D651 |. |83E8 0F SUB EAX,0F
0041D654 |> |8BC8 MOV ECX,EAX ; ecx<=(a+2)%15
0041D656 |. |83C0 03 ADD EAX,3 ; eax<=(a+5)%15
0041D659 |. |83F8 0F CMP EAX,0F
0041D65C |. |7C 03 JL SHORT Buzof-BA.0041D661
0041D65E |. |83E8 0F SUB EAX,0F
0041D661 |> |57 PUSH EDI
0041D662 |. |0FB73C4B MOVZX EDI,WORD PTR DS:[EBX+ECX*2]
0041D666 |. |8BC8 MOV ECX,EAX ; ecx<=(a+5)%15
0041D668 |. |83C0 03 ADD EAX,3 ; eax<=(a+8)%15
0041D66B |. |83EF 30 SUB EDI,30 ; edi<=第a+3位转数字
0041D66E |. |83F8 0F CMP EAX,0F
0041D671 |. |7C 03 JL SHORT Buzof-BA.0041D676
0041D673 |. |83E8 0F SUB EAX,0F
0041D676 |> |0FB70C4B MOVZX ECX,WORD PTR DS:[EBX+ECX*2] ; ecx<=第a+6位转数字
0041D67A |. |83E9 30 SUB ECX,30
0041D67D |. |8BD0 MOV EDX,EAX ; edx<=(a+8)%15
0041D67F |. |6BC9 64 IMUL ECX,ECX,64 ; ecx=ecx*100由下知,ecx只能为0
0041D682 |. |83C0 03 ADD EAX,3 ; edx<=(a+11)%15
0041D685 |. |83F8 0F CMP EAX,0F
0041D688 |. |7C 03 JL SHORT Buzof-BA.0041D68D
0041D68A |. |83E8 0F SUB EAX,0F
0041D68D |> |0FB71453 MOVZX EDX,WORD PTR DS:[EBX+EDX*2] ; edx<=第a+9位转数字
0041D691 |. |0FB70443 MOVZX EAX,WORD PTR DS:[EBX+EAX*2] ; eax<=第a+12位Unicode+ecx
0041D695 |. |83EA 30 SUB EDX,30
0041D698 |. |03C1 ADD EAX,ECX
0041D69A |. |8D1492 LEA EDX,DWORD PTR DS:[EDX+EDX*4] ; edx=edx*5
0041D69D |. |8D4C50 D0 LEA ECX,DWORD PTR DS:[EAX+EDX*2-30] ; 13==第a+9位数字*10+第a+12位数字+第a+6位数字*100(0)
0041D6A1 |. |83F9 0D CMP ECX,0D
0041D6A4 |75 6E JNZ SHORT Buzof-BA.0041D714
0041D6A6 |. |33C9 XOR ECX,ECX
0041D6A8 |. |B8 10000000 MOV EAX,10
0041D6AD |. |8D49 00 LEA ECX,DWORD PTR DS:[ECX]
0041D6B0 |> |0FB75443 FE /MOVZX EDX,WORD PTR DS:[EBX+EAX*2-2] ; 从最后一位开始循环检查
0041D6B5 |. |83E8 01 |SUB EAX,1
0041D6B8 |. |0FAFD0 |IMUL EDX,EAX ; ecx<=第(x+1)位Unicode*x之和
0041D6BB |. |03CA |ADD ECX,EDX
0041D6BD |. |85C0 |TEST EAX,EAX
0041D6BF |.^|75 EF \JNZ SHORT Buzof-BA.0041D6B0
0041D6C1 |. |8D45 0E LEA EAX,DWORD PTR SS:[EBP+E] ; y=(最后一位数字加+14)%15
0041D6C4 |. |83F8 0F CMP EAX,0F
0041D6C7 |. |7C 03 JL SHORT Buzof-BA.0041D6CC
0041D6C9 |. |83E8 0F SUB EAX,0F
0041D6CC |> |0FB71443 MOVZX EDX,WORD PTR DS:[EBX+EAX*2] ; edx<=第(y+1)位unicode*y
0041D6D0 |. |0FAFD0 IMUL EDX,EAX
0041D6D3 |. |2BCA SUB ECX,EDX
0041D6D5 |. |83E8 01 SUB EAX,1
0041D6D8 |. |79 03 JNS SHORT Buzof-BA.0041D6DD
0041D6DA |. |83C0 0F ADD EAX,0F
0041D6DD |> |0FB73443 MOVZX ESI,WORD PTR DS:[EBX+EAX*2] ; esi<=第y位unicode
0041D6E1 |. |0FB7D6 MOVZX EDX,SI ; edx<=第y位unicode*(y-1)
0041D6E4 |. |0FAFD0 IMUL EDX,EAX
0041D6E7 |. |2BCA SUB ECX,EDX ; ecx=sum(sn[i]*i)-sn[y]*y-sn[y-1]*(y-1)
0041D6E9 |. |E8 12FEFFFF CALL Buzof-BA.0041D500
0041D6EE |. |66:3BC6 CMP AX,SI ; 第y位unicode==0x30+ecx-(高8位(0x66666667*ecx)>>2)*5*2
0041D6F1 |. |75 21 JNZ SHORT Buzof-BA.0041D714
0041D6F3 |. |57 PUSH EDI
0041D6F4 |. |E8 27FEFFFF CALL Buzof-BA.0041D520
0041D6F9 |. |83C4 04 ADD ESP,4
0041D6FC |. |85C0 TEST EAX,EAX
0041D6FE |74 14 JE SHORT Buzof-BA.0041D714
0041D700 |. |5F POP EDI
0041D701 |. |5D POP EBP
0041D702 |. |B8 01000000 MOV EAX,1
0041D707 |. |5E POP ESI
0041D708 |> \5B POP EBX
0041D709 |. C3 RETN
0041D500 /$ B8 67666666 MOV EAX,66666667
0041D505 |. F7E9 IMUL ECX ; 最大0x37933333869
0041D507 |. C1FA 02 SAR EDX,2
0041D50A |. 8BC2 MOV EAX,EDX
0041D50C |. C1E8 1F SHR EAX,1F
0041D50F |. 03C2 ADD EAX,EDX
0041D511 |. 8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4]
0041D514 |. 03C0 ADD EAX,EAX
0041D516 |. 8BD0 MOV EDX,EAX
0041D518 |. 8BC1 MOV EAX,ECX
0041D51A |. 2BC2 SUB EAX,EDX
0041D51C |. 83C0 30 ADD EAX,30
0041D51F \. C3 RETN
0041D520 /$ 83EC 08 SUB ESP,8
0041D523 |. 85DB TEST EBX,EBX
0041D525 |. 75 06 JNZ SHORT Buzof-BA.0041D52D
0041D527 |. 33C0 XOR EAX,EAX
0041D529 |. 83C4 08 ADD ESP,8
0041D52C |. C3 RETN
0041D52D |> 55 PUSH EBP
0041D52E |. 56 PUSH ESI
0041D52F |. 57 PUSH EDI
0041D530 |. 33ED XOR EBP,EBP
0041D532 |. 33FF XOR EDI,EDI
0041D534 |. C74424 0C 020>MOV DWORD PTR SS:[ESP+C],2
0041D53C |. C74424 10 010>MOV DWORD PTR SS:[ESP+10],1
0041D544 |. 33F6 XOR ESI,ESI
0041D546 |> 0FB70473 /MOVZX EAX,WORD PTR DS:[EBX+ESI*2]
0041D54A |. 50 |PUSH EAX
0041D54B |. E8 BF2C0100 |CALL Buzof-BA.0043020F ; 判断其是否是数字
[注意]看雪招聘,专注安全领域的专业人才平台!