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. webpack 性能优化 dll 分包

    webpack 性能优化 dll 分包 html-webpack-externals-plugin DLLPlugin https://www.webpackjs.com/configuration/ ...

  2. Google Chrome 怎么在退出时自动删除历史记录

    1 Google Chrome 怎么在退出时自动删除历史记录 https://chrome.google.com/webstore/detail/clickclean/ghgabhipcejejjmh ...

  3. how to publish a UMD module

    how to publish a UMD module 如何发布UMD模块 npm https://github.com/xgqfrms/umd-npm-package https://www.npm ...

  4. CSS3 & transition & animation

    CSS3 & transition & animation https://developer.mozilla.org/en-US/docs/Web/CSS/transition-ti ...

  5. PAUL ADAMS ARCHITECT LTD:拜登上台后,美国房地产走势如何?

    受全球经济危机影响,美国经济的复苏之路并不平坦,然而住宅房地产市场却是少数的例外,表现得非常亮眼.而随着美国拜登总统上台的临近,美国房产市场还会持续当前的发展吗?对于这个问题,近日,美国知名房地产公司 ...

  6. django学习-21.优化表数据的标题展示

    目录结构 1.前言 2.表数据的标题默认展示的数据格式是[模型类名 object(主键名)]的相关信息 3.优化表数据的标题展示的数据格式是[改成我们想要展示的数据格式]的相关完整操作步骤 3.1.第 ...

  7. LinkedHashMap转对象

    当需要把map转为实体对象时,需要结合fastjson来实现,方法如下: LinkedHashMap<String,Object> hashMap = new LinkedHashMap& ...

  8. CentOS7安装Kibana7.9.2

    1:下载 wget https://artifacts.elastic.co/downloads/kibana/kibana-7.9.2-linux-x86_64.tar.gz 点击进入官网 安装手册 ...

  9. 中心化-ESB

    服务调用者与服务提供者通过企业服务总线相连接: ESB成为瓶颈:无论在性能上还是成本消耗上,ESB都会导致瓶颈出现.

  10. 面试系列二:精选大数据面试真题JVM专项-附答案详细解析

    公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ...