首页 > 其他 > 详细

SECCON-CTF-2014:Shuffle

时间:2019-06-17 19:30:11      阅读:132      评论:0      收藏:0      [点我收藏+]

这道题比较简单

 

下载附件,在Linux中运行。

技术分享图片

发现直接输出一串字符,再次运行,输出一串不同的字符串,重复操作,发现每次的输出都不相同。

 

将文件拖入IDA中反汇编。

  v50 = __readgsdword(0x14u);
  s = 83;
  v11 = 69;
  v12 = 67;
  v13 = 67;
  v14 = 79;
  v15 = 78;
  v16 = 123;
  v17 = 87;
  v18 = 101;
  v19 = 108;
  v20 = 99;
  v21 = 111;
  v22 = 109;
  v23 = 101;
  v24 = 32;
  v25 = 116;
  v26 = 111;
  v27 = 32;
  v28 = 116;
  v29 = 104;
  v30 = 101;
  v31 = 32;
  v32 = 83;
  v33 = 69;
  v34 = 67;
  v35 = 67;
  v36 = 79;
  v37 = 78;
  v38 = 32;
  v39 = 50;
  v40 = 48;
  v41 = 49;
  v42 = 52;
  v43 = 32;
  v44 = 67;
  v45 = 84;
  v46 = 70;
  v47 = 33;
  v48 = 125;
  v49 = 0;
  v3 = time(0);
  v4 = getpid();
  srand(v3 + v4);
  for ( i = 0; i <= 99; ++i )
  {
    v5 = rand() % 0x28u;
    v6 = rand() % 0x28u;
    v7 = *(&s + v5);
    *(&s + v5) = *(&s + v6);
    *(&s + v6) = v7;
  }
  puts(&s);
  return 0;
}

分析上部关键代码,发现程序根据时间和进程识别,提供的生成伪随机数序列的种子。

利用随机数对字符串进行随机的交换。

 

至此发现了一个问题,既然为随机交换字符串,那为何多次运行输出的字符串,长度也不尽相同。

分析发现 v5 和 v7 不一定在字符长度的范围内,则在对 v5 和 v7 下标的字符进行交换时,可能会将空字符串置换进字符串,这样会导致字符串的长度缩减。

 

编写python脚本

s = [83, 69, 67, 67, 79, 78, 123, 87, 101, 108, 99, 111, 109, 101, 32,
     116, 111, 32, 116, 104, 101, 32, 83, 69, 67, 67, 79, 78, 32, 50,
     48, 49, 52, 32, 67, 84, 70, 33, 125, 0]

flag = ‘‘

for i in s:
    flag += chr(i)

print(flag)

输出:SECCON{Welcome to the SECCON 2014 CTF!}

 

解题结束!

SECCON-CTF-2014:Shuffle

原文:https://www.cnblogs.com/MuZiShiYe/p/11041469.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!