• 标 题:^L00P's SmartBrainForce 算法分析 - 怎样制作一个KEY文件 (2千字)
  • 作 者:DiKeN
  • 时 间:2002-9-19 16:51:14
  • 链 接:http://bbs.pediy.com

相关附件可以到此下载:http://www.dlking.com/perl/topic_show.cgi?id=20202&h=1&bpg=1&age=30

===================================
= Target:  SmartBrainForce.exe    =
= Coder:  ^L00P                  =
= Date:    13.09.2002            =
===================================
=====================================================
验证过程很简单
=====================================================
1.
  //条件1:msum=4AA=(DEAD-377)/2F; include FF
  {
    msum=buf[0]+buf[1]+...+buf[lken-1]=4AA
    buf[0]+buf[1]+...+buf[lken-2]=4AA-FF=3AB   
  }
2.
  //条件2:mxor=E1=(C0DE-63)/DB; include FF
  {
      buf[0] xor buf[1] xor .... xor buf[len-1] xor 57=E1
  }
3.
  //条件3:mmul=1EBB2=FACE*2+0-9EA
  //条件3:mmul=1EBB3=FACE*2+1-9EA
  {
      mmul=buf[0]*(buf[1]+buf[2]+....+buf[len-2]);not include FF
  }

4.分析
=====================================================
  {
      很容易知道,buf[len-1]=FF

      从条件3我们可以看出
          mmul一定是第一个自己的倍数
      于是我们得到,
        1*1EBB2;2*F5D9;3*A3E6;6*51F3;7*463E;9*36A2;E*231F
        12*1B51;15*176A;1B*1236;25*D4A;2A*BB5;36*91B;3F*7CE
        4A*6A5;51*612;6F*46E;7E*3E7;A2*309;BD*29A;DE*237
        F3*206;//=========>103*1E6;14D*17A;
     
        1*1EBB3;5*6257;13*19E1;19*13AB;35*947;5F*52D;7D*3EF
        //================>109*1DB
      我们从条件1可以知道, 只有
            1EBB2=A2*309是有效的


      于是我们得到方程:
      3AB=buf[0]+buf[1]+...+buf[lken-2];
      mmul=buf[0]*(buf[1]+buf[2]+....+buf[len-2]);

      这样我们就得到:
        buf[0]=A2;
        buf[1]+buf[2]+....+buf[len-2]=309;
        buf[len-1]=FF;

        buf[0] xor buf[1] xor .... xor buf[len-1] xor 57=E1
    也就是
        buf[1] xor buf [2] xor ... xor buf[len-2]=E1 xor 57 xor A2 xor FF=EB
   
    最后, 我们得到最终条件:
          buf[1]+buf[2]+....+buf[len-2]=309;
          buf[1] xor buf [2] xor ... xor buf[len-2]=EB;

          最简单的一种情况,
              根据异或的性质,
              len-2是一个奇数, 让buf[1]..buf[len-2], 其中一个是EB, 其他的是成对数字
              309-EB=21E=2*10F
              这样, 我们把10F可以分成同样的部分, 不能超过3个部分, 也不能包含FF
              10F=FE+11=...=87+88,
              10F=FE+11=...=87+88,
              10F=5A+5A+5B=...
              10F=5A+5A+5B=...
          (在A2和FF之间的数字顺序可以打乱)

          最后我们可以得到答案(当然, 我们还可以得到更多的答案):
          A2 EB FE 11 FE 11 FF 44 69 4B 65 4E
          A2 EB 54 5A 61 54 5A 61 FF 44 69 4B 65 4E
=====================================================

        DiKeN/iPB