ByteCTF

极限逃脱

题目描述:本题需要通过动态调试分析出要输入的内容,可能在某些地方会有提示出现。

这是一个IOS逆向,因为没有设备只能静态分析

流程和安卓逆向大概一致 解压拖进ida

提示输入flag格式 根据"-"进行切割

其实就是uuid格式,正确输入后有一个赋值操作

然后往下看注意到

{%@-%@-%@-%@-%@} part5,part2,part3,part4,part5

计算这个字符串的sha256

后面是根据每一部分的长度进行切片操作,然后是一个替换

注意每个部分的起始位置

最后进行比较

最后切片进行替换

a="6c9838a3c6810bdb2633ed5910b8547c09a7a4c08bf69ae3a95c5c37f9e8f57e"
#print 1 to 9
for i in range(1,9):
print(a[i],end='')
print("-",end='')
for i in range(9,13):
print(a[i],end='')
print("-",end='')
for i in range(5,9):
print(a[i],end='')
print("-",end='')
for i in range(5,9):
print(a[i],end='')
print("-",end='')
for i in range(5,17):
print(a[i],end='') # c9838a3c-6810-8a3c-8a3c-8a3c6810bdb2

ByteBuffer

FlatBuffers 的序列化格式

FlatBuffers 就是把对象数据,保存在一个一维的数组中,将数据都缓存在一个 ByteBuffer 中,每个对象在数组中被分为两部分。

元数据部分:负责存放索引。真实数据部分:存放实际的值

使用 4 字节的 UInt 来存储 10 位数字的整数。

FlatBuffers 对序列化基本使用原则:

  • 小端模式。FlatBuffers 对各种基本数据的存储都是按照小端模式来进行的,因为这种模式目前和大部分处理器的存储模式是一致的,可以加快数据读写的数据。
  • 写入数据方向和读取数据方向不同

从给的二进制文件看

一部分给的是dot数据

另一部分给的是Edge数据

对应着点和边,我们需要恢复原来的数据

dot数据 每4位为一组

这里采用小端序排序

x1=06 40=1600 y1=4B=75 依次每四位可以拿到所有的点的数据

同理 在边上

Edge #103对应着 0x77 0x75 即点119 117

根据原理可以写出梭哈脚本

cnt = 0

with open("ByteBuffer.bin", "rb") as file:
ans = file.read() # print(ans)
import struct edge_index = 0x3AC
dot_index = 0x1230 while edge_index < 0x120C:
tmp = struct.unpack("<Q", ans[edge_index : edge_index + 8])[0]
edge_index += 8
dot1 = struct.unpack("<L", ans[edge_index : edge_index + 4])[0]
edge_index += 4
dot2 = struct.unpack("<L", ans[edge_index : edge_index + 4])[0]
edge_index += 4
edge_index += 4
length = ((struct.unpack("<L", ans[edge_index : edge_index + 4])[0] + 4) // 4) * 4
# print(length)
edge_index += 4
name = ans[edge_index : edge_index + length].decode() print("line_name:" + name)
print("linked_dot1:" + str(dot1))
print("linked_dot2:" + str(dot2))
edge_index += length print("line_name:" + "Edge #0")
print("linked_dot1:" + str(2))
print("linked_dot2:" + str(1)) while dot_index < 0x1F88:
tmp = struct.unpack("<L", ans[dot_index : dot_index + 4])[0]
dot_index += 4
x1 = struct.unpack("<L", ans[dot_index : dot_index + 4])[0]
dot_index += 4
y1 = struct.unpack("<L", ans[dot_index : dot_index + 4])[0]
dot_index += 4
dot_index += 4
length = ((struct.unpack("<L", ans[dot_index : dot_index + 4])[0] + 4) // 4) * 4
# print(length)
dot_index += 4
name = ans[dot_index : dot_index + length].decode() print("dot_name:" + name)
print("x:" + str(x1))
print("y:" + str(y1))
dot_index += length print("dot_name:" + "Dot #2")
print("x:" + str(0x19))
print("y:" + str(0x4B))

得到

然后根据点和线的关系进行绘图

import matplotlib.pyplot as plt

# 读取数据
dots = {}
edges = [] with open("1(1).txt", "r") as f:
lines = f.readlines() for i in range(0, len(lines), 3):
line = lines[i].strip()
if line.startswith("dot_name"):
dot_name = line.split(":")[1].split("#")[1]
line2 = lines[i + 1].strip()
line3 = lines[i + 2].strip()
x = int(line2.split(":")[1])
y = int(line3.split(":")[1])
dots[dot_name] = (y, x)
elif line.startswith("line_name"):
line_name = line.split(":")[1]
line2 = lines[i + 1].strip()
line3 = lines[i + 2].strip()
dot1 = line2.split(":")[1]
dot2 = line3.split(":")[1]
edges.append((dot1, dot2)) # 绘制点
for dot_name, (x, y) in dots.items():
plt.plot(x, y) # 绘制线段
for dot1, dot2 in edges:
x1, y1 = dots[dot1]
x2, y2 = dots[dot2]
plt.plot([x1, x2], [y1, y2], "b-") # 设置标签
plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()

得到flag

2024 ByteCTF的更多相关文章

  1. HDU 2024 C语言合法标识符

    http://acm.hdu.edu.cn/showproblem.php?pid=2024 Problem Description 输入一个字符串,判断其是否是C的合法标识符.   Input 输入 ...

  2. [Luogu 2024] 食物链

    [Luogu 2024] 食物链 几句随感 我依稀记得联赛前本来想做这题的时候. 当年啊弱到题目与标签就令我望而生畏. 还有翻阅很多遍那现在已经被遗弃的博客. 看到题解中「三倍数组」的字眼就怕难而放弃 ...

  3. 【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)

    2024: [SHOI2009] 舞会 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 368  Solved: 102 Description OIto ...

  4. loj #2024. 「JLOI / SHOI2016」侦查守卫

    #2024. 「JLOI / SHOI2016」侦查守卫   题目描述 小 R 和 B 神正在玩一款游戏.这款游戏的地图由 nnn 个点和 n−1n - 1n−1 条无向边组成,每条无向边连接两个点, ...

  5. 刷题记录:[ByteCTF 2019]EZCMS

    目录 刷题记录:[ByteCTF 2019]EZCMS 一.知识点 1.源码泄露 2.MD5长度扩展攻击 3.php://filter绕过正则实现phar反序列化 刷题记录:[ByteCTF 2019 ...

  6. 杭电2024 C语言合法标识符

    链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2024 开始真的对这题是一点头绪都没有,简直了.然后事实证明是我想多了,这题主要是把概念给弄清楚 ...

  7. 记ByteCTF中的Node题

    记ByteCTF中的Node题 我总觉得字节是跟Node过不去了,初赛和决赛都整了个Node题目,当然PHP.Java都是必不可少的,只是我觉得Node类型的比较少见,所以感觉挺新鲜的. Nothin ...

  8. 延期!欧盟新标EN IEC 62368-1:2020延至2024年7月6日生效

    近日,TC108X成员投票同意将EN IEC 62368-1:2020(对应IEC 62368-1第三版)的DOW (Date Of Withdrawn)日期由原先的2023年1月6日延长至2024年 ...

  9. COJ 2024 仙境传奇(五)——一个天才的觉醒 素数筛

    整理模板,同时测了一下memset,for,fill到底谁快... 结果:memset最快,其次是for,fill最慢QAQ.... #include<iostream> #include ...

  10. BZOJ 2024: [SHOI2009] 舞会 [容斥原理 高精度]

    题意:和上题基本一样,求至少k对a>b的方案数.不取模!!! 做k+1遍容斥就行了 高精度超强!!!几乎把所有的都用上了 然后,注意有负数,所以容斥的时候正负分别保存然后再一减就行了 这是我省选 ...

随机推荐

  1. 03-springboot使用单元测试和日志框架

    目录 1,springboot使用单元测试 2,使用日志框架 1,springboot使用单元测试 A:springboot使用单元测试需要引入一个单元测试启动器,该启动器的坐标为: <depe ...

  2. MySQL原始密码登录出现错误

    1.首先查看自己的MySQL安装目录下有没有data文件夹,和bin目录是同级的.要是有就删除,然后执行下列操作.没有就直接执行操作: 2. 以管理员身份运行 cmd.遇到个同学,可能我强调的不够明显 ...

  3. Fiddler的工作原理

    Fiddler是位于客户端和服务器端中间的HTTP代理,是目前最常用的http抓包工具之一 . Fiddler抓取客户端和服务器之间的所有HTTP请求后进行分析.断点.过滤等操作. Fiddler可以 ...

  4. web3产品介绍:mask将Web3的隐私和优势引入像Facebook和Twitter这样的社交媒体平台

    介绍: Mask Network是一个开源的浏览器扩展,将Web3的隐私和优势引入像Facebook和Twitter这样的社交媒体平台.它是一个功能强大的工具,允许用户在社交媒体上享受区块链的隐私保护 ...

  5. 【RabbitMQ】01 简单模式

    参考自腾讯云的实验课堂,减少部署时间的折腾 1.创建Erlang.Repo库 curl -s https://packagecloud.io/install/repositories/rabbitmq ...

  6. 【Linux】00 Docker下载安装(CentOS8)

    官方安装文档: https://docs.docker.com/engine/install/centos/ 先全部卸载Docker有无关系的一些环境 [保证一个干净的部署环境] sudo yum r ...

  7. 2024-08-03:用go语言,给定一个从 0 开始的字符串数组 `words`, 我们定义一个名为 `isPrefixAndSuffix` 的布尔函数,该函数接受两个字符串参数 `str1` 和

    2024-08-03:用go语言,给定一个从 0 开始的字符串数组 words, 我们定义一个名为 isPrefixAndSuffix 的布尔函数,该函数接受两个字符串参数 str1 和 str2. ...

  8. 植物大战僵尸杂交版v2.1整合包全解锁+高清工具

    植物大战僵尸杂交版v2.1整合包全解锁+高清工具   引言 <植物大战僵尸>作为一款经典的塔防游戏,自2009年发布以来,就以其独特的游戏机制和幽默的风格赢得了全球玩家的喜爱.随着游戏的不 ...

  9. 目前国内全地形能力最强的双足机器人 —— 逐际动力 —— 提出迭代式预训练(Iterative Pre-training)方法的强化学习算法

    相关: https://weibo.com/1255595687/O5k4Aj8l2 该公司对其产品的强化学习训练算法给出了较少的描述: 提出迭代式预训练(Iterative Pre-training ...

  10. java模拟并发请求工具类(测试专用)

    1.背景 实际生产中,我们开发好接口后可能会简单的压力测试一下,也就是说模拟并发测试,测试工具类如下: 2.工具类 package tentative.normal.other; import cn. ...