REVERSE-PRACTICE-BUUCTF-24

  • [watevrCTF 2019]Timeout
  • [SUCTF2019]hardcpp
  • [CISCN2018]2ex
  • [UTCTF2020]babymips

[watevrCTF 2019]Timeout

elf文件,无壳,ida分析
main函数中signal,alarm,delay三个函数配合使用是为了反调试

交叉引用变量"can_continue",来到generate函数,验证"can_continue"是否等于1337,然后打印s
于是可以知道该程序是为了防止用户在main函数返回前修改EIP来执行generate函数从而获得flag



直接抠出来s的数据,转成字符串即为flag

data=[119,97,116,101,118,114,123,51,110,99,114,121,116,105,111,110,95,105,115,95,111,118,101,114,114,97,116,101,100,95,121,111,117,116,117,98,101,46,99,111,109,47,119,97,116,99,104,63,118,61,79,80,102,48,89,98,88,113,68,109,48,125]
print(''.join(chr(i) for i in data))
#watevr{3ncrytion_is_overrated_youtube.com/watch?v=OPf0YbXqDm0}

或者是patch程序,把alarm函数的参数增大,或者是在main函数返回后下断点,修改EIP去执行generate函数,都可得到flag

[SUCTF2019]hardcpp

elf文件,无壳,ida分析
main函数中加了混淆,还不能调试,只能硬着头分析
x和y那些都没用,主要的运算和判断逻辑在这里
第109行有个判断,验证enc[i-1]=v15=(s[i]+(s[i-1]%7))^(2+3*(18^s[i-1])),i从1开始,enc是已知的数据,s是输入
由此可以得到s[i]=((enc[i-1])^(2+3*(18^s[i-1])))-(s[i-1]%7)),i从1开始,所以s[0]需要爆破一下

写脚本即可得到flag

enc=[0xF3, 0x2E, 0x18, 0x36, 0xE1, 0x4C, 0x22, 0xD1, 0xF9, 0x8C,0x40, 0x76, 0xF4, 0x0E, 0x00, 0x05, 0xA3, 0x90, 0x0E, 0xA5]
for i in range(32,127):s=[]s.append(i)flag=""flag+=chr(i)for j in range(1,len(enc)+1):tmp=(enc[j-1]^(2+3*(18^s[j-1])))-(s[j-1]%7)s.append(tmp&0xff)flag+=chr(tmp&0xff)if "flag" in flag:print(flag)break
# #flag{mY-CurR1ed_Fns}

[CISCN2018]2ex

mips文件,ida7.5打开
shift+F12,在字符串窗口看到这样一串字符,长度为64

out.txt文件里的字符串"│_r-+_Cl5;vgq_pdme7#7eC0=",最后是个等号,猜测是变表base64
用工具解base64即可得到flag

[UTCTF2020]babymips

mips文件,无壳,ida7.5打开
main函数,读取输入,将已知的unk_4015F4拷贝到v7,传递v7和输入到check函数,验证输入

进入check函数,验证输入的长度是否为78,检验input[i]^(i+23)==v7[i]是否成立

写脚本即可得到flag

v7=[0x62, 0x6C, 0x7F, 0x76, 0x7A, 0x7B, 0x66, 0x73, 0x76, 0x50,0x52, 0x7D, 0x40, 0x54, 0x55, 0x79, 0x40, 0x49, 0x47, 0x4D,0x74, 0x19, 0x7B, 0x6A, 0x42, 0x0A, 0x4F, 0x52, 0x7D, 0x69,0x4F, 0x53, 0x0C, 0x64, 0x10, 0x0F, 0x1E, 0x4A, 0x67, 0x03,0x7C, 0x67, 0x02, 0x6A, 0x31, 0x67, 0x61, 0x37, 0x7A, 0x62,0x2C, 0x2C, 0x0F, 0x6E, 0x17, 0x00, 0x16, 0x0F, 0x16, 0x0A,0x6D, 0x62, 0x73, 0x25, 0x39, 0x76, 0x2E, 0x1C, 0x63, 0x78,0x2B, 0x74, 0x32, 0x16, 0x20, 0x22, 0x44, 0x19]
flag=""
for i in range(len(v7)):flag+=chr(v7[i]^(i+23))
print(flag)
# utflag{mips_cpp_gang_5VDm:~`N]ze;\)5%vZ=C'C(r#$q=*efD"ZNY_GX>6&sn.wF8$v*mvA@'}

REVERSE-PRACTICE-BUUCTF-24相关推荐

  1. 01python语言程序设计基础——初识python

    1.python的字符串中format函数用法 format 函数可以接受不限个参数,位置可以不按顺序. In [2]: "{} {}".format("hello&qu ...

  2. 坚持不懈续集 (二) 初学者挑战学习Python编程30天

    这里写目录标题 第 5 天 - 列表 如何创建列表 使用正索引访问列表项 使用负索引访问列表项 拆箱清单项目 从列表中切片项目 修改列表 检查列表中的项目 将项目添加到列表 将项目插入列表 从列表中删 ...

  3. 给数组倒序_22个超详细的 JS 数组方法

    作者:Yushiahttps://juejin.cn/post/6907109642917117965 数组是 js 中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工 ...

  4. python 多维list 排序_人生苦短 | Python列表和元组归纳整理

    1. 列表 1.1. 列表是什么? 列表是由一系列按特定顺序排列的元素组成,所以是有序的集合.列表中的元素可以是不同类型的,列表中也可以嵌套列表.在Python中,用方括号[]来表示列表,并用逗号来分 ...

  5. JavaScript数组方法大全(推荐)

    数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习,下面小编给大家整理了关于数组的操作方法,一起看看吧. 数组创建 JavaScript ...

  6. if break语句_8、嵌套if语句、switch语句

    1.嵌套if语句 嵌套if语句是指在 if...else分支中还存在if...else 语句. 不大难,题目后期当练习再补. 2.switch语句 示例3.20: 看起来不难,先判断是否是2种情况,不 ...

  7. JavaScript对数组的处理(一)

    数组创建JavaScript中创建数组有两种方式,第一种是使用 Array 构造函数:var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20 ...

  8. JS----JavaScript数组方法及总结

    JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20); / ...

  9. 数组方法大全ES5+ES6

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. 使用 Array 构造函数 2. 使用数组字面量表示法 数组原型方法 1. join() 2.push()和pop() ...

  10. C#使用TCP/IP与ModBus进行通讯

    C#使用TCP/IP与ModBus进行通讯 1. ModBus的 Client/Server模型 2. 数据包格式及MBAP header (MODBUS Application Protocol h ...

最新文章

  1. R主成分分析PCA示例
  2. emacs命令速查 摘
  3. [Cocos2d-x For WP8]DrawPrimitives画图
  4. 2021-04-07 In literature VS In the literature
  5. html表格的表头怎么合并单元格,使用tableGrob合并表头单元格
  6. 作者:夏梓峻(1986-),男,国家超级计算天津中心应用研发部副部长。
  7. java 8 new feature_java 8 new feature --- default method
  8. 将packages/apps/下的app导入eclipse
  9. 有没有四十多岁快五十的女人突然想逃离家庭?
  10. [洛谷P2257] YY的GCD (莫比乌斯反演)
  11. Linux 下非 root 用户安装 theano(配置 GPU)
  12. CCF推荐期刊/会议历年发表论文数据库:CCF Rec-Paper DB
  13. DLNA和UPnP是什么关系?通俗解释
  14. Android启动模式分析
  15. hackthebox - blunder (Bludit渗透cewl使用 sudo提权)
  16. VR头显设备相关接口详解
  17. neo4j 入门例子
  18. Chapter 5 Eigenvalues and Eigenvectors
  19. 互联网人群画像和你所不知道的真相
  20. 计算机中的网络协议包括哪些,网络协议三要素有什么关系

热门文章

  1. 邻结矩阵的建立和 BFS,DFS;;
  2. hdu--1231--并查集连分量的个数
  3. 花花酱leetcode 题目-二分搜索
  4. [剑指offer][JAVA]面试题第[33]题[二叉搜索树的后序遍历][单调栈][递归分治]
  5. [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]
  6. 前端中标签页的手写方法
  7. wampserver php乱码,WampServer搭建php环境可能遇到的问题
  8. mysql分布式一致性hash_分布式哈希一致性
  9. 红石32位cpu通用计算机,我的世界无命令方块32位红石电脑装置详解
  10. 1108D. Diverse Garland