notsequence  RCTF-2015

关键就是两个check函数

 1 signed int __cdecl check1_80486CD(int a1[])
2 {
3 signed int j; // [esp+0h] [ebp-14h]
4 int t; // [esp+4h] [ebp-10h]
5 int i; // [esp+8h] [ebp-Ch]
6 signed int k; // [esp+Ch] [ebp-8h] k=0 i=0 a[0]=1
7 // k=1 i=1 a[1]+a[2]=2 a[1]=1 a[2]=1
8 // k=2 i=3 a[3]+a[4]+a[5]=4
9 // k=3 i=6 a[6]+a[7]+a[8]+a[9]=8
10
11 k = 0;
12 for ( i = 0; i <= 1024 && a1[i]; i = k * (k + 1) / 2 )// i是(1,2,3,4,)等差数列和
13 {
14 t = 0; // i:0 1 3 6 10 15 (递增k)
15 for ( j = 0; j <= k; ++j )
16 t += a1[j + i]; // input[i]后面k个数的和
17 if ( 1 << k != t ) // 2`k要==t-->sum(input[i],input[i+k])
18 return -1; // k==20
19 ++k;
20 }
21 return k;
22 }

可以抽象成一个二维结构,有[k] 行(第一行k=0),每行开头为第k*(k+1)/2个数,check1函数检测每一行求和结果为2`k

再看check2

 1 signed int __cdecl check2_8048783(int a1[], signed int k_20)
2 {
3 int k; // [esp+10h] [ebp-10h]
4 int t; // [esp+14h] [ebp-Ch]
5 signed int i; // [esp+18h] [ebp-8h]
6 int j; // [esp+1Ch] [ebp-4h]
7
8 j = 0;
9 for ( i = 1; i < k_20; ++i ) // i=1,2,3
10 {
11 t = 0;
12 k = i - 1; // k=0,1,2,3
13 if ( !a1[i] )
14 return 0;
15 while ( 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 a[0]+a[1]+a[3]+a[6]....=a[..+1]
19 // j=1 i=2 a[1+1]+a[3+1]+a[6+1]....=a[..+2]
20 }
21 if ( a1[k * (k + 1) / 2 + i] != t )
22 return 0;
23 ++j;
24 }
25 return 1;
26 }

可以看作[0]---[k-1]行的[j]列求和   等于  [k]行的 [i]

其实两个check就是在验证杨辉三角,

用到的特性(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),1+3+3+1=2^(4-1),1+4+6+4+1=2^(5-1),1+5+10+10+5+1=2^(6-1)。
  2. 斜线上数字的和等于其向左(从左上方到右下方的斜线)或向右拐弯(从右上方到左下方的斜线),拐角上的数字。1+1=2,1+1+1=3,1+1+1+1=4,1+2=3,1+2+3=6,1+2+3+4=10,1+3=4,1+3+6=10,1+4=5

wp:

 1 def triangles():
2 N=[1]
3 while True:
4 yield N
5 N.append(0)
6 N=[N[i-1] + N[i] for i in range(len(N))]
7 n=0
8 x=''
9 for t in triangles():
10 # print(t)
11 x+=''.join(map(str,t))
12 n=n+1
13 if n == 20:
14 break
15 import hashlib
16 m=hashlib.md5(x.encode()).hexdigest()
17 # print(x)
18 print('RCTF{'+m+'}')

RCTF{37894beff1c632010dd6d524aa9604db}

攻防世界 reverse 进阶 notsequence的更多相关文章

  1. 攻防世界 reverse 进阶 APK-逆向2

    APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...

  2. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  3. 攻防世界 reverse 进阶 9-re1-100

    9.re1-100 1 if ( numRead ) 2 { 3 if ( childCheckDebugResult() ) 4 { 5 responseFalse(); 6 } 7 else if ...

  4. 攻防世界 reverse 进阶 8-The_Maya_Society Hack.lu-2017

    8.The_Maya_Society Hack.lu-2017 在linux下将时间调整为2012-12-21,运行即可得到flag. 下面进行分析 1 signed __int64 __fastca ...

  5. 攻防世界 reverse 进阶 easyre-153

    easyre-153 查壳: upx壳 脱壳: 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 int ...

  6. 攻防世界 reverse 进阶 -gametime

    19.gametime csaw-ctf-2016-quals 这是一个小游戏,挺有意思的 's'-->' '    'x'-->'x'   'm'-->'m' 观察流程,发现检验函 ...

  7. 攻防世界 reverse 进阶 16-zorropub

    16.zorropub  nullcon-hackim-2016 (linux平台以后整理) https://github.com/ctfs/write-ups-2016/tree/master/nu ...

  8. 攻防世界 reverse 进阶 15-Reversing-x64Elf-100

    15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...

  9. 攻防世界 reverse 进阶 12 ReverseMe-120

    程序流程很清晰 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 unsigned int v3; // ...

随机推荐

  1. ES6 version repeatify

    ES6 version repeatify String.prototype.repeatify = String.prototype.repeatify || function (times = 1 ...

  2. TypeScript Errors All In One

    TypeScript Errors All In One 1. Property 'name' has no initializer and is not definitely assigned in ...

  3. JavaScript Number Type Checker

    JavaScript Number Type Checker Number.isInteger // static 方法 Number.isInteger(value) https://develop ...

  4. HTTP/HTTPS Proxy & Charles

    HTTP/HTTPS Proxy & Charles Charles https://www.charlesproxy.com/ https://www.jianshu.com/p/53d2c ...

  5. vue & vue router & dynamic router

    vue & vue router & dynamic router https://router.vuejs.org/guide/essentials/dynamic-matching ...

  6. flutter 1.5 in action

    flutter 1.5 in action https://flutter.dev/docs/get-started/flutter-for/react-native-devs https://flu ...

  7. array auto slice

    array auto slice https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Ar ...

  8. WEB 面向开发者的结构化数据

    通常用于google搜索 See also: video 探索搜索库

  9. 「NGK每日快讯」2021.2.8日NGK公链第97期官方快讯!

  10. 1098 Insertion or Heap Sort——PAT甲级真题

    1098 Insertion or Heap Sort According to Wikipedia: Insertion sort iterates, consuming one input ele ...