IDA分析发现题目所谓的迷宫没有一个数据结构来表示,而是每一个函数就是一关:

输入S后进入下一关:

然后一直过关到这个函数:

开始的时候我没注意看有多少个函数,以为就几十个,手工用crossref从结果逆推,搞了很久发现有问题,然后已统计,发现有7000多个函数(关),看来只能写脚本跑。
用IDA导出C代码,然后写python脚本处理,先解析每个关卡的函数,得到一个字典:

再用穷举路径来爆破,可以得到正确的输入:

import sys
with open(r'F:\share\20210731\baby_maze\maze.c','r') as f:srclines=f.readlines()totals=len(srclines)
line=0
infunc=0
funcdicts={}
while(line<391893):if infunc==0 and srclines[line][0:9]=="void sub_":func_name=srclines[line][5:].split("(")[0].strip()funcdict={}label=''infunc=1elif srclines[line]=="}\n":infunc=0funcdicts[func_name]=funcdictelif infunc:if srclines[line][0:11]=="      case ":key=srclines[line][12:13]if srclines[line+1][0:11]=="      case ":if srclines[line+2][0:11]=="      case ":if srclines[line+3][0:5]=="LABEL":label=srclines[line+3].split(":")[0]labeldo=srclines[line+4].split("(")[0].strip()funcdict[label]=labeldofuncdict[key]=labeldofuncdict[srclines[line+2][12:13]]=labeldofuncdict[srclines[line+1][12:13]]=labeldoline+=1elif srclines[line+3][0:13]=="        goto ":funcdict[srclines[line+1][12:13]]=srclines[line+3][13:].split(";")[0]funcdict[srclines[line+2][12:13]]=srclines[line+3][13:].split(";")[0]funcdict[key]=srclines[line+3][13:].split(";")[0]else:funcdict[srclines[line+1][12:13]]=srclines[line+3].split("(")[0].strip()funcdict[srclines[line+2][12:13]]=srclines[line+3].split("(")[0].strip()funcdict[key]=srclines[line+3].split("(")[0].strip()line+=1elif srclines[line+2][0:5]=="LABEL":label=srclines[line+2].split(":")[0]labeldo=srclines[line+3].split("(")[0].strip()funcdict[label]=labeldofuncdict[key]=labeldofuncdict[srclines[line+1][12:13]]=labeldoline+=1elif srclines[line+2][0:13]=="        goto ":funcdict[srclines[line+1][12:13]]=srclines[line+2][13:].split(";")[0]funcdict[key]=srclines[line+2][13:].split(";")[0]else:funcdict[srclines[line+1][12:13]]=srclines[line+2].split("(")[0].strip()funcdict[key]=srclines[line+2].split("(")[0].strip()line+=1elif srclines[line+1][0:13]=="        goto ":funcdict[key]=srclines[line+1][13:20]elif srclines[line+1][0:5]=="LABEL":label=srclines[line+1].split(":")[0]labeldo=srclines[line+2].split("(")[0].strip()funcdict[label]=labeldofuncdict[key]=labeldoline+=1else:funcdict[key]=srclines[line+1].split("(")[0].strip()line+=1elif srclines[line][0:5]=="LABEL":label=srclines[line].split(":")[0]labeldo=srclines[line+1].split("(")[0].strip()funcdict[label]=labeldoline+=1line+=1keys=['A','D','W','S']
for f in funcdicts:for k in keys:if funcdicts[f][k].count('LABEL'):l=funcdicts[f][k]funcdicts[f][k]=funcdicts[f][l]start='sub_40187C'
end='sub_54DE35'
def goforward(start,flag,path):if start=='sub_54DE35':print("done",'S'+flag)sys.exit(1)if start not in path:path=list(path)path.append(start)for k in keys:if start in funcdicts:if k in funcdicts[start]:if funcdicts[start][k][0:3]=='sub':#print(funcdicts[start][k],len(path),flag)goforward(funcdicts[start][k],flag+k,path)goforward(start,'',[])

不到1分钟可以跑出结果:

输入程序验证成功:

这题我开始手撸浪费了很多时间,不过感觉也没这么简单,为啥有61个队伍都做出来了,我个人觉得这题其实比medical_app要难一些,那题才38个队伍做出来。
可能这题有简便方法,麻烦有知道的大佬赐教下。

2021巅峰极客逆向baby_maze题wp相关推荐

  1. 巅峰极客pwn wp

    Pwn gift 程序保护全开 程序功能: add:最多只能申请十次堆块,每次申请大小为0x60或0x100,往里写内容的时候是往user_data+0x10处写. delete:有UAF show: ...

  2. 2020巅峰极客wp

    2020巅峰极客 巅峰极客是给开封市信网办做护网的时候打的比赛,所以比赛体验感并不好,简单写一下wp virus-re 代码分为三部分 以'-'为间隔,将flag的第一部分转换为整型数字,并且满足后项 ...

  3. 巅峰极客2022wp

    巅峰极客2022 文章目录 巅峰极客2022 web babyweb ezWeb web babyweb 提示cbc padding oracle攻击,这是一个服务端的密码学漏洞,buu上做过原题[N ...

  4. 巅峰极客2022初赛 部分题解

    文章目录 Crypto point-power strange curve Misc easy_Forensic Lost 巅峰极客2022初赛,团队共解决7道题,合计2234分,排名第11位,晋级复 ...

  5. 巅峰极客第一场CTF部分writeup

    额,上午驾校学车,中午打了会儿安恒的月赛,就来看巅峰极客的题了.时间关系实力原因没做几个emmmm太菜了wa MISC-warmup-100pt 拿到一个bmp文件,套路走一波,右键查看属性emmm啥 ...

  6. 2018巅峰极客writeup(Misc)

    原文地址:https://mistsatan.github.io/articles/2018-Peakgeek-Writeup-Misc.html 作为一个渣渣,带着去看各路神仙打架的想法报名了这次的 ...

  7. [代码审计][PHAR]巅峰极客babyphp2学习压缩过滤器触发phar

    前言:我要当赛棍!!! 文章目录 序列化与反序列化 基本介绍 PHP反序列化漏洞原理 常用的魔法函数 __wakeup()绕过:CVE-2016-7124 __set:巅峰极客babyphp2 解决p ...

  8. 2022巅峰极客WriteUp By EDISEC

    2022巅峰极客WriteUp By EDISEC Web babyweb ezWeb Crypto point-power strange curve Pwn Gift smallcontainer ...

  9. GeekPwn 2021上演极客之夜攻防秀,腾讯安全携手推动网络安全人才培养

    10月24日,以"让智能更安全.让安全更智能"为主题的GeekPwn 2021 极棒之夜在上海举办.本届大赛汇集了全国20组顶尖的安全极客团队,他们从AI.产业.智能生活的细节中挖 ...

最新文章

  1. 通过RunLoop监听主线程的卡顿
  2. 两台Ubuntu主机共享文件
  3. PHP str_word_count
  4. 骄阳似火 细数史上数据中心火灾 如何才能重蹈覆辙?
  5. 转载的SSO文章,很基础
  6. P4630-[APIO2018]Duathlon铁人两项【圆方树】
  7. Dart 10-Day
  8. ArcEngine由点生成TIN
  9. MySQL命令行格式化输出
  10. glDeleteTextures函数对内存的优化
  11. 如何用VsCode进行Debug
  12. 视频截取软件哪个好用?免费的视频截取软件分享
  13. 某大厂算法工程师面试题详解,问题+答案
  14. 第一章第二题(显示五条消息)(Display five messages)
  15. java计算机毕业设计H5女娲宫旅游网站设计与实现MyBatis+系统+LW文档+源码+调试部署
  16. DigiCert SSL证书过期了怎么办
  17. 从0到1,如何从知乎赚到第一笔佣金
  18. 艾永亮:创新凭运气?老板该如何避坑?
  19. java solarsystem,桌面小游戏二:模拟太阳系solarSystem
  20. AQS之独占模式和共享模式

热门文章

  1. 怎样使用JPQL查询出每个部门员工的平均工资和最高工资
  2. 软件生存周期的图示——DO-178B/ED-12B学习笔记之九
  3. Win10,Ubuntu双系统,格式化Ubuntu系统分区后启动问题
  4. eclipse 背景色 豆沙绿
  5. MySQL的各种安装方式都给你
  6. 《郑军的回忆》文章记录了我3年的痛苦过去
  7. 龙芯+银河麒麟QT环境配置+fpm打包
  8. 全球AI专家分布:人工智能,你真的了解吗?
  9. python excel提取 替换_python代替excel的常用操作
  10. 362 种材质的 IOR(Index Of Refraction,折射索引) 列表