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. Pandas库学习笔记(1)

    参考:菜鸟教程 pandas库使用了NumPy的大多数功能.建议您先阅读有关NumPy的教程,然后再继续本教程. Pandas 适用于处理以下类型的数据: 与 SQL 或 Excel 表类似的,含异构 ...

  2. 单细胞测序最好的教程(八): 细胞类型自动注释-1|基于marker的自动注释

    作者按 本章节主要讲解了基于marker的自动注释方法,一般来说,我会先自动注释,再手动去确认marker,这是因为,对于一个陌生的组织,我对marker是不了解的,自动注释可以帮助我快速熟悉细胞类型 ...

  3. fasterWhisper和MoneyPrinterPlus无缝集成

    MoneyPrinterPlus之前使用的是各种云厂商的语音识别服务来进行语音的视频和字幕的识别工作. 但是很多小伙伴说云服务用不起. 那么没办法,MoneyPrinterPlus上线最新版本,支持f ...

  4. vscode添加python文件头模板

    pycharm可以自动生成python的文件头模板,但是vscode目前还不可以(不支持python,c的似乎有插件支持了).琢磨了一下,可以通过用户代码片段来实现. 1. 什么是用户代码片段 参考文 ...

  5. 硬件开发笔记(二十八):TPS54331电源设计(一):5V电源供电原理图设计

    前言   电源供电电路设计很重要,为了更好的给对硬件设计有需求的人,特意将电源设计的基础过程描述出来.  本篇描述设计常用的12V转5V电路3A.   TPS54331(DC-DC稳压器) 概述    ...

  6. SemanticKernel/C#:检索增强生成(RAG)简易实践

    检索增强生成(RAG)是什么? RAG是"Reference-based Generative model with Attention"的缩写,也可以被称为"Retri ...

  7. 【Tutorial C】05 操作符 & 表达式

    基本运算符 C使用运算符(operator)来代表算术运算.例如,+运算符可以使它两侧的值加在一起. 如果您觉得术语"运算符"听起来比较奇怪,那么请您记住那些东西总得有个名称. 与 ...

  8. 【英伟达】GTC 2024|黄仁勋2小时演讲精华版|六大亮点| Blackwell GPU | DGX B200 | NVL72 | cuLitho | GROOT | Omniverse Cloud —— 智能机器人元年

    视频地址: https://www.youtube.com/watch?v=zBIddyiMXsU

  9. Cython.Compiler.Errors.CompileError: Cython.Compiler.Errors.CompileError: /home/devil/anaconda3/envs/chainerRL/lib/python3.6/site-packages/mujoco_py/cymj.pyx

    ubuntu系统下,python3.6,anaconda下配置mujoco210环境时遇到报错: /home/devil/anaconda3/envs/chainerRL/lib/python3.6/ ...

  10. 为wsl ubuntu设置固定IP

    参考: https://www.cnblogs.com/lidabo/p/16855858.html https://zhuanlan.zhihu.com/p/515068209 ========== ...