世界は、攻撃と守備の高度notsequenceを逆転します

RCTF-2015 notsequence

 

 

 キーは、2つのチェック機能であります

1署名されたINT __cdecl check1_80486CD(INT A1 [])
 2  {
 3    の符号付き整数の J。// [ESP + 0H] [EBP-14H] 
4    int型の T。// [ESP + 4H] [EBP-10H] 
5    int型 I; // [ESP + 8H] [EBP-章] 
6    署名されたint型 K。// [ESP +章] [EBP-8H] K = 0、I = 0 [0] = 1
 7                  //                    K = 1、I = 1 [1] + [2] = 2 [1] = 1 A [2] = 1
 8                  //                    K = 2、I = 3 [3] + [4] + [5] = 4
 9                  //                   。。[6] K = 3 I = 6 A + + + = 8 [7] [8] [9]。
10  
11。    K = 0 ;
 12である   ため(I = 0 I <=; 1024 [I] && A1。 = K * I(k個の+ 1)/ 2// 私は(1,2,3,4)と等差級数
13は   {
 14      T = 0 ;                                       // 私は3 1 0 10 15 6(K増分を:. )
15      のための(J = 0 J <= K; ++ J)
 16        T = A1 + [J + I];                            // INPUT [I]及び背面の数k 
。17      IF図1!<< K = T)                           // 2`k要== T - >和(入力[i]は、入力[I + K])
18        リターン - 1// k個== 20 
19      ++ K;
20    }
 21    リターンK。
22 }

二次元構造に抽象化することができ、[K]の行(最初の行のk = 0)、最初のk *(K + 1)/ 2個、各行総和関数がCHECK1結果2 'を検出するための各行の先頭がありますK    

 

CHECK2を見て

1署名されたINT __cdecl check2_8048783(INT A1 []、符号付き整数k_20)
 2  {
 3    int型 K。// [ESP + 10H] [EBP-10H] 
4    int型の T。// [ESP + 14H] [EBP-Chの] 
5は、    署名をint私; // [ESP + 18時間] [EBP-8H] 
6    int型の J; // [ESP +代一] [EBP-4H] 
7  
8    J = 0 9    (i = 1 ++ I; I <k_20)                   // i = 1,2,3 
10   {
 11      、T = 0 12      K = I - 1// K = 0,1,2,3 
13      であれば(!A1 [I])
 14        リターン 0 15      一方(k_20 - 1 > K)                       // K×(K + 1)/ 2 0 1 3 6 10 
16      {
 17        T + = A1 [K×(K + 1)/ 2 + J]。
18        ++、K。                                      // J = 0、I = 1 [0] + [1] + [3] + [6] .... = [.. + 1]
 19                                                 // = 1、I = 2 [1 + 1] + [3 + 1] + [6 + 1] .... = [.. + 2] J 
20      }
 21      であれば(A1 [K×( K + 1)/ 2 + I] =!T)
 22        リターン 0 23      ++ 、J。
24    }
 25    リターン 1 26 }

[0] --- [K-1]ライン[J]カラム総和に等しい[K]の行として見ることができる[I] 

 

実際には、2つの検証チェックは、パスカルの三角形であります

使用される特性(https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098?fr=aladdin):

 

 

 

  1. そして、数字のn行目には、2 ^(N-1)です。1 = 2 ^(1-1)、1 + 1 = 2 ^(2-1)、1 + 2 + 1 = 2 ^(3-1)、3 + 3 + 1 + 1 = 2 ^(4-1 )、1 + 4 + 6 + 4 + 1 = 2 ^(5-1)、1 + 5 + 10 + 10 + 5 + 1 = 2 ^(6-1)。
  2. 数字と左に等しい(左上から右斜線を低下させる)または右折をスラッシュ(左下右上から孵化)、隅の数字。1 + 2,1 + 1 = 1 + 1 + 1 = 3,1 + 4,1 + 1 + 1 = 2 + 3,1 = 6,1 = 2 + 3 + 2 + 3 + 4 = + 10,1 3 = 3 + 4,1 + 6 + 4 = 10、l = 5

 

 

 

 

WP:

1  DEF 三角形()
 2      N = [1 ]
 3      ながらTRUE:
 4          収率N
 5          N.append(0)
 6          N = [N [I-1] + N [i]のための I における範囲(LEN(N) )]
 7 N = 0
 8 X = '' 
9  のために T 三角形():
 10      プリント(T)
11      X + = '' .join(マップ(STR、t))の
 12      N = N + 1
 13      であれば、N = = 20 14          休憩
15 インポートhashlib
 16 M = hashlib.md5(x.encode())。hexdigest()
 17  プリント(X)
18  プリント' RCTF { ' + M + ' } '

RCTF {37894beff1c632010dd6d524aa9604db}

 

おすすめ

転載: www.cnblogs.com/DirWang/p/11461903.html