^L00P's SmartBrainForce 演算法分析 - 怎樣製作一個KEY檔案 (2千字)

看雪資料發表於2002-09-19

相關附件可以到此下載: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*29EA
  //條件3:mmul=1EBB3=FACE*29EA
  {
      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

相關文章