2021巅峰极客逆向baby_maze题wp

2024-01-09 11:08

本文主要是介绍2021巅峰极客逆向baby_maze题wp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586901

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

转:android ro.debuggable属性调试修改(mprop逆向)

android ro属性调试修改(mprop逆向)      大家都知道如果需要调试android 的程序,以下两个条件满足一个就行。第一是apk的配置文件内的AndroidManifest.xml的 android:debuggable=”true”,第二就是/default.prop中ro.debuggable=1。两种方式第一种通常是解包添加属性再打包,随着加壳软件以及apk校验等,容易出

某里227逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解阿里227版本滑块参数n的逆向分析流程以及简单的补环境,如果有疑问可以在评论区交流讨论,我看到会及时回复的,另外,有需要可联系我。 一

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

【MyBatis学习14】MyBatis的逆向工程生成代码

1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。 2. 使用逆向工程 使用mybatis的逆向工程,需要导入逆向

js逆向--cai招网

js逆向--cai招网 一、寻找加密入口1、抓包2、关键字搜索寻找加密入口 二、调试js三、python代码实现 一、寻找加密入口 1、抓包 目标数据来源网址为:https://search.bidcenter.com.cn/search?keywords=%E5%85%AC%E5%85%B1%E4%BD%8F%E5%AE%85,打开开发者工具进行抓包。 目标响应数据被加密。