2024 NewStar CTF比赛有感
2024 NewStar CTF比赛有感
前情提要:帮老板娘在她们学校参加她们校内信息安全社的校内赛,笔者第一次了解到了CTF这个比赛,颇觉得有趣,于是撰写如下博客
一、CTF比赛
CTF(Capture The Flag,夺旗赛)是一种流行于网络安全技术人员之间的一种信息安全技术竞赛。 其前身是传统黑客之间网络技术比拼的游戏,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。 起源于1996年第四届DEFCON。 现在已成为全球范围网络安全圈流行的竞赛形式。
比赛形式大抵是从加密串、网页、存在漏洞的可执行程序中找到形如flag{}的答案,所以被成为夺旗赛。
题目类型主要包含 Web 网络攻防 、 RE 逆向工程 、 Pwn 二进制漏洞利用 、 Crypto 密码攻击 、 Mobile 移动安全 以及 Misc 安全杂项 这六个类别。
Misc 是英文 Miscellaneous 的前四个字母,杂项、混合体、大杂烩的意思。
Recon(信息搜集)
主要介绍一些获取信息的渠道和一些利用百度、谷歌等搜索引擎的技巧
Encode(编码转换)
主要介绍 ...
Ranger妙用
Ranger妙用
相信大家在日常生活中总能看到一群人,以vim为主要工具,桌面环境使用平铺式窗口。纯键盘操作在一些技术社区中广受推崇,尤其是在开发者、黑客文化和开源社区中。这种操作方式不仅是一种工具使用习惯,也代表了高效工作、掌控技术的理念。Vim、Emacs 等编辑器自 Unix 时代以来就有着深厚的文化积淀,很多用户在学习过程中受到了这些经典工具的影响,从而养成了纯键盘操作的习惯。这类人群热衷于手指在键盘上跳舞的快感,鼠标对他们来说就是个摆设,连桌面都懒得给它留地方。仿佛手指越少离开键盘,他们的生产力就越接近超能力。他们相信:在键盘上打出一长串复杂命令,才是人生的终极艺术形式。
今天要介绍的ranger就是这样一个工具,而对于这些键盘艺术家来说,Ranger 就是他们心头好。作为一个纯键盘操作的文件管理器,Ranger 可以让你在终端里潇洒地穿梭文件夹、预览文件,靠着几个快捷键轻松完成各种文件操作,而手指只需要在键盘上上下翻飞。
当然,对于我们不那么高贵的(笑)程序员来说,ranger的优势往往体现在我们操作没有图形界面的服务器操作系统时,也能让我们轻松的操作各种文件。
零、特 ...
Python优雅计划(一)
Python优雅计划(一)
众所周知,从OI赛场里出来的选手总有一些奇奇怪怪的编码习惯,而压行缩减代码量又是其最为广为流传的《恶习》之一,我曾经也是他们的一员;对着执行了十几亿次的GTA代码嗤之以鼻,对着Windows的多年屎山表示不屑,然而……
时代变了,进入大学的笔者也有幸加入了一个工程性的项目组,写了廖廖几千行的工程性代码。
天哪,每当我打开一个月之前的代码时,我都要鼓起莫大的勇气,边看着边咒骂着一个月前的自己。
当一个函数套一个try-catch成为习惯,if的缩进套五六层成为常态,字典找不到key的报错成为日常,很显然我也成为了创造屎山代码的一员。
这篇文章的产生背景就是这样,我希望以Python为例子,回顾一下如何写出优雅的代码。当然,由于熵增定律的存在,你最终可能还是会创作出一个属于你的屎山(笑),但是笔者寄希望于这篇文章能让你在读自己屎山的时候能减少一点负罪感(大笑)
本次Python优雅计划(又称:屎山消消乐计划,乐) 将分为代码规范、模块化编程、Python小技巧和异常处理这四个章节来介绍,或在一篇文章中,或分为两篇文章进行实用性的阐述。
一、代码规范
或许在做 ...
OTA更新系统(详细设计)
OTA
包的content.json
键值
类型
备注
package
字符串
包名称
description
字符串
描述
updateInfo
字符串
更新描述
version
字符串
版本号
branch
字符串
分支
local
字符串
本地包位置
remote
字符串
OTA服务器
sha256
字符串
升级包的SHA256校验码
AfterUpdate
字符串
更新后指令
dependencies
JSON
依赖
一、生产运行侧
重启设备
daemon程序
依赖:flask、requests
JSON配置文件
由于单个设备的包较少,所以维护一个json文件
daemon整体配置文件(device.json):
键值
类型
备注
id
INT
设备唯一id
device
字符串
设备名称
registry
字符串
设备注册服务地址
description
字符串
描述
flask
JSON
flask配置项(见下)
package
列表
列表中每一项是一个json,为每 ...
OTA更新系统(一)
OTA更新系统(一)
OTA(Over-The-Air)更新对于物联网(IoT)系统非常重要,在整个物联网系统中,各个设备的控制方式、编程语言、配置文件往往有着十分巨大的区别。本文旨在探索出一种高可用性、低耦合性的物联网升级结构。
这篇文章为系列第一篇,旨在介绍整个架构系统
一、更新包设计
由于各个设备(模块)之间的差异较大,我们需要一种特殊的打包方式,在保留文件各方面关系与属性的情况下对整个文件夹进行传输;同时,为了保证能方便地读取更新包的各类信息,例如版本号、包名、前后启动等方式,我们需要将文件格式进行一定程度的规范修改。
1.更新包
在打包方式方面,我们选择了tar这一文件归档类型。相比于其他的压缩类型,tar类型的压缩率不高,但是其能完整保留所归档文件的属性,例如Linux文件的权限等。
2.打包方式
开发者可通过提供的Python脚本进行打包,假设脚本为pack.py
1python3 pack.py FOLDER
也可以手工进行tar打包
3.上传包
开发者可通过提供的Python脚本进行上传,假设脚本为update.py
1python3 update.py * ...
C++输入输出效率测试
C++输入输出效率测试
前情提要:
默认情况下,C++的标准库(iostream,例如 std::cin 和 std::cout)与C的标准库(stdio,例如 scanf 和 printf)之间是同步的。这意味着它们共享相同的缓冲区,并且在每次I/O操作时都会进行刷新和同步,以确保它们之间的一致性。这种同步确保了你可以在程序中混合使用C和C++风格的I/O,而不会出现数据错乱或顺序错误的问题。
然而,这种同步会带来性能开销。当你知道在程序中不需要混合使用C和C++风格的I/O时,可以通过调用std::ios::sync_with_stdio(false) 来关闭它们之间的同步。这样做之后,C++的I/O操作会变得更快,因为它们不再需要在每次操作时与C的I/O函数保持同步。
在竞赛中,除非用快读之类的技巧,一般选手都会选择使用C标准输入输出,这篇博客是探究关闭同步流后的C++的流输入输出与C标准输入输出在效率上的优劣对比。需要注意的是,本测试将输入输出合并在一个程序中,以期得出一个综合成绩,如果有不妥之处,请诸位提出。
本篇测试全程在Linux下进行,以下是测试环境:
gcc版 ...
面向对象(二)
面向对象(二)
面向对象(二)
在上一篇文章 面向对象(一) | 四叶草の博客 (wzcwzc.cool) 中,我们介绍了面向对象的基本概念,以及C++中类和对象的基础知识。在这篇文章中,我们将深入探讨C++面向对象编程的其他重要特性,包括继承、多态和运算符重载。
一、继承
继承是面向对象编程的一个核心概念,它允许我们创建一个新类,继承并重用现有类的属性和方法。这样,新类可以基于现有类进行扩展,而无需从头开始。
1. 基类 & 派生类
基类:被继承的类称为基类、父类或超类。
派生类:执行继承操作的类称为派生类或子类。
123456789101112131415class BaseClass { public: int baseVar; void baseFunc() { cout << "Function in Base Class" << endl; }};class DerivedClass: public Ba ...
苏大校园网の小妙招
苏大校园网直接连接
苏大校园网の小妙招
一、前言
众所周知,苏大的SUDA_WIFI需要进行认证。虽然可以开启校园漫游,但是似乎在大部分时间中,当我们断开wifi然后再重新连接的时候,都需要重新认证。
虽然我没有仔细求证过其中的判断标准,不过现在的设备连接wifi一般都会有一个随机MAC地址的选项。
MAC地址,全称为“媒体访问控制地址”(Media Access Control Address),是一个用于确保网络设备唯一性的地址。它是一个通常由六组两位十六进制数字组成的地址,例如:08:00:27:4A:2D:1F。
每个网络接口控制器(NIC)都有一个唯一的MAC地址,这个地址在生产时被烧录到硬件中,通常是不可更改的。无论是有线还是无线的网络设备,如以太网卡、Wi-Fi设备等,都有一个MAC地址。
MAC地址在数据链路层(OSI模型的第二层)被用于标识网络上的设备。当数据包在局域网(LAN)内传输时,它是基于MAC地址进行路由的,而不是IP地址。
MAC地址一般标志着网络中的唯一硬件,wifi认证过程中很有可能就是通过相同的MAC地址来判断登陆的设备是否是同一个,既然使用 ...
双向宽度优先搜索
双向宽度优先搜索
BFS(宽度优先搜索)是我们最先接触的几个算法之一,和DFS(深度优先搜索)一起,成为初学者必学的两大搜索算法。使用队列这种先进先出的数据结构,在遍历图、树等方面有着巨大的作用,同时由BFS优化而来的SPFA最短路径算法、Dijkstra最短路算法等,也是非常经典的算法。
今天我要介绍的是一种不一样的BFS,以 P1379 八数码难题 - 洛谷 为例,介绍双向BFS。
对于一种起始状态和终末状态确定的搜索,很容易就能想到我们可以同时从头和尾开始搜索,直到搜索树相交时,我们就可以找到路径,这就是双向BFS。
以下这个图简单的介绍了双向BFS的原理:
题目描述
在 3×33\times 33×3 的棋盘上,摆有八个棋子,每个棋子上标有 111 至 888 的某一数字。棋盘中留有一个空格,空格用 000 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为 123804765123804765123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
输入格式
输入初始 ...
C++ STL教程
C++ STL
C++ STL教程
一直以来在竞赛界一直有着一种传言,自己手搓的数组、栈、队列效率比STL高很多,甚至于还有江湖传说,有的人用自己写的就过了,用STL就超时。但其实STL恰恰在C++一众繁复的特性中,是最受人欢迎的之一。使用STL其实并不会让效率降低很多,反而可以让自己的程序更具有可读性,以及获得更低的编程复杂度(笑,现在真的还有人讲究编程复杂度这种玩意么)。
所以特此写下一篇教程。(也是为了让自己以后忘记STL用法的时候能记起来,hhh)
一、概念
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
组件
描述
容器(Containers)
容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms)
算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
...