ctfshow MISC 2023愚人杯做题笔记

2023愚人杯

1.奇怪的压缩包

下载的题目压缩包是ZIP伪加密,修改后,解开得一个图片文件black.png。使用01编辑器打开,发现尾部有一个压缩包。

 把尾部的压缩包另存后,发现该压缩包为加密包。再用01打开,发现尾部有一个base64码串eXVyZW5qaWU=,解码后得yurenjie,猜测为加密密码。

解压后,得到一个图片,打开显然只显示一半。使用01打开,图片文件高度203,修改为400,保存后,就能显示flag

2. 阿尼亚哇库哇库

压缩包为加密包,有提示信息,解压密码应该是这个级数的前12位有效数字。这里的坑是n是从0开始。2.71828182846

key = 2
n_jc=1
i = 1
keystr1 = ''
keystr2 = '1'
while True:i += 1n_jc  *= ikey += 1 / n_jckeystr1 = keystr2keystr2 = str(key)print(i,'----------------------')print(keystr1)print(keystr2)if len(keystr2) > 15 and keystr1[:15] == keystr2[:15]:break
#17 ----------------------
#2.718281828459043
#2.7182818284590455

解压后,先看HINT.png,图片打不开

使用01打开:

 发现文件头有问题,前几位修改为89 50 4E 47后,图片打开依然不正常。发现长高尺寸不对。用脚本根据CRC值,爆破得长高值,填入后,打开正常。

 爆破脚本:

import zlib
import struct#根据png的CRC校验值,爆破png图片的宽w高h
filename = 'HINT1.png'
with open(filename, 'rb') as f:all_b = f.read()crc32key = int(all_b[29:33].hex(), 16)data = bytearray(all_b[12:29])n = 4095  # 理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了for w in range(n):  # 高和宽一起爆破width = bytearray(struct.pack('>i', w))  # q为8字节,i为4字节,h为2字节for h in range(n):height = bytearray(struct.pack('>i', h))for x in range(4):data[x + 4] = width[x]data[x + 8] = height[x]crc32result = zlib.crc32(data)if crc32result == crc32key:# 2021.7.20,有时候显示的宽高依然看不出具体的值,干脆输出data部分print(data.hex())print("宽为:", end="")print(width)print("高为:", end="")print(height)exit(0)

修补后打开:

除了GB2312,冒失没啥提示信息

把 阿尼亚哇库哇库!.doc中的内容转存为一个文本文件waku.txt

使用脚本,提取文件中的。?!,转存为.?!,然后解码得ctfshow{4niya_KaWa1i!}

f1 = open("./waku.txt", "r", encoding='utf-8')
f2 = open("./waku1.txt", 'w', encoding='utf-8')
text = f1.readlines()
text = list(text)
ls = []
for i in text:print(i[-2])if i[-2] =='。':f2.write('.')elif i[-2] =='?':f2.write('?')elif i[-2] == '!':f2.write('!')
f1.close()
f2.close()

3. 琴柳感

 打开压缩包里的qlg.txt,发现主要是四句话的重复:

'你有没有感受到城市在分崩离析?','你不曾注意阴谋得逞者在狞笑。','你有没有听见孩子们的悲鸣?,'你是否想过......朋友不再是朋友,家园不再是家园。'

猜测对应0,1,2,3.可能是base4编码。但不知是怎么对应,因此在脚本里爆破。ctfshow{xingbucengxing_yibuzaiyi_zaikelianyilianba}

####base4解码脚本base4.py
#base4编码:把每个字节八位二进制值切成4个2位,分别用0,1,2,3表示。
def b4decode(b4str):if len(b4str) % 4 != 0:print('必须是4的倍数')return ''res = [ chr( (int(b4str[i])<<6) + (int(b4str[i+1])<<4) + (int(b4str[i+2])<<2) + int(b4str[i+3]) )for i in range(0,len(b4str),4)]return ''.join(res)####爆破脚本
import base4,itertoolsstrs = [['你有没有感受到城市在分崩离析?','0'],['你不曾注意阴谋得逞者在狞笑。','1'],['你有没有听见孩子们的悲鸣?','2'],['你是否想过......朋友不再是朋友,家园不再是家园。','3'] ]def decode(text,strs):str1 = ''while True:pos,val,length = 99999,None,Nonenofound = 0for i in range(4):try:pos1 = text.index(strs[i][0])#print(pos1)if pos > pos1:pos = pos1val = strs[i][1]length = len(strs[i][0])except:nofound += 1if nofound >= 4:return str1str1 += valtext = text[pos+length:]#print(text[0:100])#input()with open('qlg.txt','r',encoding='gbk') as f:text = f.read()#遍历每种对应的值
count = 0
for i in itertools.permutations('0123'):strs[0][1] = i[0]strs[1][1] = i[1]strs[2][1] = i[2]strs[3][1] = i[3]print('\n%d-------------------------------'%count)count += 1#print(strs)b4str = decode(text,strs)print(b4str)res = base4.b4decode(b4str)print(res)if 'ctfshow{' in res:exit()

4.低端的base64

发现flag.txt中的字符串非常象base64编码,但是没有大写字母。猜测所有大写字母都转成了小写。所以按4个字符一组,爆破所有字母。

import base64,itertoolswith open("./flag.txt","r") as f:text = f.read()for i in range(0, len(text), 4):item = text[i:i+4]itemlist = []for ch in item:if ch.isalpha():itemlist.append([ch,ch.upper()])else:itemlist.append([ch])for random_list in  itertools.product(itemlist[0],itemlist[1],itemlist[2],itemlist[3]):s = ''.join(random_list)try:res = base64.b64decode(s).decode()if res.isprintable():print(res,end='     ')except:passprint('')

ctfshow{base64_1s太难了!!I服了U!}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2803290.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

日常工作软件安装总结

日常工作软件安装总结 系统服务安装集成 Skywalking SpringBoot集成Skywalking服务 地址&#xff1a;http://192.168.1.52:8686/general nohup java -javaagent:/mnt/skywalking-agent/skywalking-agent/skywalking-agent.jar -DSW_AGENT_NAMEdev::rms-risk-service agent…

Web Serial API串口通信,实现web和electron扫码枪读取数据

文章目录 前言一、Serial API是什么&#xff1f;二、API使用步骤1.navigator.serial.requestPort()2.port.open(options)3.reader.read()4.port.close()其他常见API:完整代码 三、electron使用 前言 本文将讲述Web Serial API简单应用&#xff0c;以扫码枪为示例&#xff0c;通…

idea查找所有未使用的代码

1.背景 最近在做无用代码下线的时候发现一个方法里会引用很多个方法&#xff0c;一旦该方法删除以后&#xff0c;里面被引用的方法应该也一同下线&#xff0c;但是一个一个的找过去比较耗费精力&#xff0c;下面给大家推荐一个idea自带的代码分析工具 2.代码分析工具 Code-&…

【无标题】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘

项目场景&#xff1a; 做单链表反转题目&#xff0c;报错&#xff1a;member access within null pointer of type ‘struct ListNode’ 题目链接:LINK 问题描述 我明明在初始化指针时候&#xff0c;已经处理了n2->next情况却依然报错 这个报错提示含义是&#xff1a;大概就…

创新性3D数据合成模型,微软推出EgoGen

随着AR、VR等设备的广泛应用,第一人称的应用开始增多。但在研发方面面临不同的挑战,例如&#xff0c;图像模糊、视觉混乱、遮挡更严重等&#xff0c;给视觉模型的训练带来重大挑战。 一方面,人工标注真实第一视角数据集&#xff0c;来培训深度学习模型的成本和难度都很高。另一…

第八章 shell编程之sed

目录 1.1. 概念 1.1.1. 工作原理&#xff1a; 1.2. 基本语法 1.2.1. 格式 1.2.2. 参数 1.2.3. 定址符 1.2.4. 操作 1.3. 输出文本 1.3.1. 范例文件&#xff1a; 1.3.2. 示例 1.4. 文本替换 1.4.1. 范例文件 1.4.2. 格式&#xff1a; 1.4.3. 示例 1.5. 删除文本 …

提升生产能力的必备工具——MES系统自动排产

在现代制造业中&#xff0c;生产能力的提升对企业发展至关重要。随着市场竞争的日益激烈&#xff0c;企业不仅需要提高产品质量&#xff0c;还需要提高生产效率。而MES系统自动排产作为一种先进的生产管理工具&#xff0c;可以帮助企业高效地安排生产&#xff0c;实现生产能力的…

江科大stm32学习笔记——【3-2】GPIO输出:LED闪烁LED流水灯蜂鸣器

&#xff08;一&#xff09; 硬件连接 1.LED闪烁 LED灯正极连接面包板电源正极&#xff0c;LED负极连接单片机A0口 (也可以LED负极连面包板负极&#xff0c;LED正极连接单片机A0口) 跳线连接单片机3.3和面包板正极&#xff0c;连接单片机GND和面包板负极 2.LED流水灯 3.蜂鸣…

你并不了解 JavaScript:入门 - 第二版 - 第二章:JS 概观

第二章&#xff1a;JS 概观 学习 JS 的最好方法就是开始写 JS。 要做到这一点&#xff0c;你需要知道这门语言是如何工作的&#xff0c;而这正是我们在这里要重点讨论的。即使你以前用过其他语言编程&#xff0c;也要慢慢适应 JS&#xff0c;并确保练习每一块。 这一章并不是…

自学黑客的这些坑千万别踩,不然就是在做无用功!

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键知识并不多 一般人如果想要把编程学好再开始学习网络安全往…

并发编程(3)JMM

5 共享模型之内存 本章内容 上一章讲解的 Monitor 主要关注的是访问共享变量时&#xff0c;保证临界区代码的原子性. 这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题 5.1 Java 内存模型 JMM 即 Java Memory Model&#xff…

SQL库操作

1、创建数据库 概念 创建数据库&#xff1a;根据项目需求创建一个存储数据的仓库 使用create database 数据库名字创建 数据库层面可以指定字符集:charset/character set 数据库层面可以指定校对集:collate 创建数据库会在磁盘指定存放处产生一个文件夹 创建语法 create …

六.生成makefile文件 并基于makefile文件编译opencv

1.点击【Generate】 生成makefile文件 2.进入目录下编译opencv源码&#xff0c;mingw32-make -j 8 3..编译出现报错 4.取消[WITH_OPENCL_D3D11_NV]选项&#xff0c;再次【configure】【generate】 然后再次编译&#xff1a;mingw32-make -j 8

【springblade】springblade(bladeX) 数据权限失效原因分析

文章目录 数据权限接口权限 前言&#xff1a;最近博主在按照bladeX官方文档 配置数据权限 结果发现失效了&#xff0c;网上搜了一下没找到合适的答案&#xff0c;本着求人不如求己的精神&#xff0c;自己调试了一下发现了问题所在&#xff0c;也大致看了一下bladeX的权限逻辑。…

这份攻略帮助你分分钟构建出“幻兽帕鲁游戏”极致体验【下】

在上一篇文章这份攻略帮助你分分钟构建出“幻兽帕鲁游戏”极致体验【上】中写了&#xff0c;极狐GitLab 将 terraform state 文件管理了起来。这篇文章将演示如何将所有的 terraform 文件存储到极狐GitLab 中&#xff0c;并且使用 CI/CD 自动实现 terraform 命令的执行。 在 D…

最简单方式把jar打包成Windows服务

废话 &#x1f622; 将JAR文件转化为Windows服务是一种高效且常见的Java应用部署策略。这种转变赋予了Java应用程序在Windows操作系统上以无界面后台服务模式运行的能力&#xff0c;从而实现了持续、稳定且可靠的功能提供。这种部署方式不仅提升了应用的可用性&#xff0c…

re-迷宫题学习

re中的迷宫问题有以下特点: 在内存中布置一张 "地图"将用户输入限制在少数几个字符范围内.一般只有一个迷宫入口和一个迷宫出口 布置的地图可以由可显字符 (比如#和*)组合而成 (这非常明显, 查看字符串基本就知道这是个迷宫题了.), 也可以单纯用不可显的十六进制值进…

【鸿蒙 HarmonyOS 4.0】UIAbility、页面及组件的生命周期

一、背景 主要梳理下鸿蒙系统开发中常用的生命周期 二、UIAbility组件 UIAbility组件是一种包含UI界面的应用组件&#xff0c;主要用于和用户交互。 UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口&#xff1b;一个UIAbility组件中可以通过多个页…

【大厂AI课学习笔记NO.50】2.3深度学习开发任务实例(3)任务背景与目标

我们经常在做项目的时候&#xff0c;觉得分析背景和目标是浪费时间&#xff0c;觉得不过如此。 其实目标梳理特别重要&#xff0c;直接决定你数据的需求分析&#xff0c;模型的选择&#xff0c;决定你交付的质量。 人工智能项目也和其他项目一样&#xff0c;不要想当然&#…

7-liunx服务器规范

目录 概况liunx日志liunx系统日志syslog函数openlog 可以改变syslog默认输出方式 &#xff0c;进一步结构化 用户信息进程间的关系会话ps命令查看进程关系 系统资源限制改变工作目录和根目录服务器程序后台话 概况 liunx服务器上有很多细节需要注意 &#xff0c;这些细节很重要…