2023年磐石行动第十六周

2023-12-25 18:30
文章标签 2023 行动 第十六 磐石

本文主要是介绍2023年磐石行动第十六周,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、冰冰给我flag可以吗

题目内容:

png文件解密,flag用DASCTF包裹

题目下载之后发现pypy.exe和一个无法显示的图片,根据题目的描述,应该是图片被这个程序加密了,需要解密才能得到正确的图片:

通过pyinsxtractor.py将exe程序解包,发现使用python3.7(满足<3.9的条件),直接使用

uncompyle6 pypy.PYC > pypy.py

得到加密程序的源码

# uncompyle6 version 3.9.0
# Python bytecode version base 3.7.0 (3394)
# Decompiled from: Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
# Embedded file name: pypy.py
import base58def enc(stream, file):text = base58.b58encode(stream) #base58编码temp = list(bytes.decode(text))return tempif __name__ == '__main__':fp = open('冰冰给我flag可以吗.png', 'rb')context = fp.read()key = context[0] #文件第一个字节 0x89fp.close()fp = open('冰冰给我flag可以吗.png', 'wb')tmp = enc(context, fp) #enc编码for i in range(len(tmp)):tmp[i] = chr(ord(tmp[i]) ^ key) #异或keyfp.write(bytes((''.join(tmp)), encoding='utf-8'))fp.close()
# okay decompiling .\pypy.pyc

加密过程就是base58编码+异或0x89,编写exp如下:

import base58
import timedef main():print('begin')begin_time = time.time()#读入图片with open('0.png','rb') as f:datas = f.read()datas = list(bytes.decode(datas)) #字节转字符listkey = 0x89#存储png_datapng_data = ''for data in datas:png_data += chr(ord(data)^key) #获得异或之后的png数据#base58解码png_data = base58.b58decode(png_data)#写入图片with open('flag.png','wb') as f:f.write(png_data)print('end')print('used time is %.2fs'%(time.time()-begin_time))if __name__ == '__main__':main()#begin
#end
#used time is 9.11s

得到flag图片如下:

在这里插入图片描述

图片中flag如下:

DASCTF{S@Y_nO_13u7_tH3_6odY_!s_H0Ne~T}

但是这个题目flag错了,需要提交,将6odY修改为6ody

DASCTF{S@Y_nO_13u7_tH3_6ody_!s_H0Ne~T}

2、Yusa的密码学课堂——密码分析

题目描述

这节课老师给Yusa讲述了一个黄道十二宫杀手的故事。。。

题目下载之后得到task.py

import random
from secret import flag,tableone = []
zero = []
for each in table:if round(random.random()):one.append(each)else:zero.append(each)
output=""
for each in flag:each = bin(ord(each))[2:].rjust(8,'0')for i in each:if i == '1':output += random.choice(one)if i == '0':output += random.choice(zero)
print(output)'''
♥•∧∨∨◦∧Δ∨♠∧⇑⇐⇑♥∞∨ℵ⇐•∧6◦♣⇑⊗⊕∧⇐∧ℵ⇒Δ•⊕ℵ6♠⊕∧∨ΩΔΔ⊕ℵ⊗♥∨Ω◦♠⊗♥⊗ℵ8♣•∧⊕8∧⊗⊕⇑⊗◦∧⊕◦∞Δ∨ℵ⊗∧∧∧Δ∧⇓⇒⇑⊕♦♣8⊕∞Θ⊕⊕⇐∞∧⊕♦∇∞ℵ6⊕♦♦Δ♠♣∨⊕∞∧∨⊕◦ΩΩΔ♦⇑6⇐ℵ∞∨8⇐♠6⇐◦∞⇐⊕Δ∇8•◦∧∧♥⇓Θ♥♠∞ΔΔ◦⇑8∨⊕⊗◦♥♦∧⇒♦♦♣♠8∞ℵ8♦∨••∨∧♣⇐⇑6Θ⇓∧Θ⇐♦8∨⊗∞⇑∧⊗•♦∨∇⇒∧⊗⇐⊕8⇓♠⇑∨••8♥⊕Ω•⇐⇒◦♠⇐♦♠∞⇓⇑⇐⇐6∨◦Θ6♠∇ℵ♦♥◦•∇⇑⇐♣⊕8ℵΘ⇑⇒•♥∧◦∞∨∨♦⊗⇒8♥Θ♣⇑∞∨♦⇑◦♠⇑♥♥♠Δ8Δ⇒⇒Δ6♣⇒♦∇ΘΔ8♣♦⊕⇑♠Θ♥⇐8Δ•∧ℵ•68∧ΩΘ∨∞♣♦∨⇓6•Δ⊗♠♣⇓ℵ♥∞
'''

这个题目初始看着特别唬人,加密原理

1、将table的字符通过round(计算小数四舍五入情况)添加到one和zero中
2、接着将flag中的字符转为二进制,如果不足8位,在高位补0
3、根据字符二进制0和1情况将one和zero中的字符随机输出

从上述分析发现存在两次随机,感觉特别有难度,但是仔细思考就会发现,其实第二个随机其实没啥用,只要知道one和zero,判断输出的字符是在one中,那么那一位就是1,如果字符在zero中,那一位就是0,具体输出那个字符不需要关心,接着就发现table无法知道,随机数也没有办法预测啊,接着分析就会发现一个隐藏的条件,flag应该是可见字符,那么ascii范围<127,那么flag的最高位一定是0,我们通过这个条件知道一部分zero或者全部zero,接着判断output是不是在zero判断当前位是1还是0,接着编写exp如下:

#encoding=utf-8output = '♥•∧∨∨◦∧Δ∨♠∧⇑⇐⇑♥∞∨ℵ⇐•∧6◦♣⇑⊗⊕∧⇐∧ℵ⇒Δ•⊕ℵ6♠⊕∧∨ΩΔΔ⊕ℵ⊗♥∨Ω◦♠⊗♥⊗ℵ8♣•∧⊕8∧⊗⊕⇑⊗◦∧⊕◦∞Δ∨ℵ⊗∧∧∧Δ∧⇓⇒⇑⊕♦♣8⊕∞Θ⊕⊕⇐∞∧⊕♦∇∞ℵ6⊕♦♦Δ♠♣∨⊕∞∧∨⊕◦ΩΩΔ♦⇑6⇐ℵ∞∨8⇐♠6⇐◦∞⇐⊕Δ∇8•◦∧∧♥⇓Θ♥♠∞ΔΔ◦⇑8∨⊕⊗◦♥♦∧⇒♦♦♣♠8∞ℵ8♦∨••∨∧♣⇐⇑6Θ⇓∧Θ⇐♦8∨⊗∞⇑∧⊗•♦∨∇⇒∧⊗⇐⊕8⇓♠⇑∨••8♥⊕Ω•⇐⇒◦♠⇐♦♠∞⇓⇑⇐⇐6∨◦Θ6♠∇ℵ♦♥◦•∇⇑⇐♣⊕8ℵΘ⇑⇒•♥∧◦∞∨∨♦⊗⇒8♥Θ♣⇑∞∨♦⇑◦♠⇑♥♥♠Δ8Δ⇒⇒Δ6♣⇒♦∇ΘΔ8♣♦⊕⇑♠Θ♥⇐8Δ•∧ℵ•68∧ΩΘ∨∞♣♦∨⇓6•Δ⊗♠♣⇓ℵ♥∞'#构造zero字典
zero = []
for i in range(0,len(output),8):if output[i] not in zero:zero.append(output[i])#通过判断当前位置0和1构造二进制flag字符串
flag = ''
for i in range(len(output)):if output[i] in zero:flag += '0'else:flag += '1'#二进制转字符串
for i in range(0,len(flag),8):print(chr(int(flag[i:i+8],2)),end='')
#DASCTF{a30bb82811cd162434f78796c4b3dace}

得到flag如下:

DASCTF{a30bb82811cd162434f78796c4b3dace}

这篇关于2023年磐石行动第十六周的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接:Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面: contest-37054-zh.pdf (codeforces.com) G. Path 链接: Problem - G - Codeforces

HNU-2023电路与电子学-实验1

写在前面: 这是电路与电子学课程的第一次实验,按照指导书的需求在Multisim软件搭建一个电路传感器模型,难度较小,细心完成就没有问题。 小tips:22级实验是采用上传到测试平台来进行功能检测,如果不通过则会打回修改后再重新提交,(我们那时候的评测系统特别特别慢,一次只能测一个同学,剩下同学就排队等着,久的时候甚至超过10个小时),这里列举一个常见的错误:热噪声有+号这端需要连接有源滤波器

第十六篇:走入计算机网络的传输层--传输层概述

1. 传输层的功能 ① 分割与重组数据 一次数据传输有大小限制,传输层需要做数据分割,所以在数据送达后必然也需要做数据重组。 ② 按端口号寻址 IP只能定位数据哪台主机,无法判断数据报文应该交给哪个应用,传输层给每个应用都设置了一个编号,这个编号就是端口,目的端口可以定位报文应该发给哪个应用处理。 ③ 连接管理 面向连接的传输,需要对连接进行管理。 ④ 差错控制和流量控制

第十六题:最接近的三数之和

题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1, 2, 1, -4], target = 1 输出:2 解释:与 target 最接近的和为 2 (-1 + 2 + 1 = 2)。 注意: 3 <= nu

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件         本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用requests库发送HTTP请求使用lxml库解析HTML文档使用dateti

Acrobat Pro DC 2023 for Mac/Win:全能型PDF编辑器深度解析

Adobe Acrobat Pro DC 2023作为一款跨平台的PDF编辑器,无论是对于Mac还是Windows用户,都提供了极为全面且强大的PDF处理功能。该软件凭借其卓越的性能和丰富的特性,成为了全球范围内用户处理PDF文档的首选工具。 一、强大的编辑功能 Acrobat Pro DC 2023内置了多种编辑工具,如文本编辑器、图片替换、页面调整等,使用户能够轻松地对PDF文档进行修改和

【行业报告】2023年消除类手游全球市场洞察

​更多消除内容: 长线消除游戏商业化设计案例:《梦幻花园》 - 游戏干饭之家 谈谈《开心消消乐》是如何做游戏商业化活动 - 游戏干饭之家 消除游戏展现了从简单的游戏玩法到复杂的社交互动,再到精细化运营的发展历程,其通过不断的创新和适应现代游戏的市场变化,依然活跃在市场的前沿 一、消除游戏分类定义 二、消除手游市场现状分析 消除手游近两年下载量增速表现优于整体手游表现,下

【数据分享】2000—2023年我国省市县三级逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2023年逐月归一化植被指数(NDVI)栅格数据(可查看之前的文章获悉详情),该数据来源于NASA定期发布的MOD13A3数据集!很多小伙伴拿到数据后反馈栅格数据不太方便使用,问我们能不能把数据处理为更方便使用的Shp和Excel格式的数据! 我们特地对数值在-0.2—1之间的NDVI栅格数据进行了处理,将2000-2023年逐月的归一化植被指数栅格分别按照我国省级行政边