picoCTF 2022 Crypto Write-ups
被拉来打的,只做了 Crypto。做啥写啥。
被拉来打的,只做了 Crypto。做啥写啥。
最近突然对渗透测试很感兴趣,充了个 htb 会员才发现基础不牢地动山摇,趁着会员快过期了先把 Intro to Dante Track 做完了,给报 Dante Pro Lab 打一下基础,之后先去 TryHackMe 学一手再回来开 htb 会员刷 Box。
闲着无聊做做,看看退役选手还能写出来些啥。
题解 memo,保持更新。(反正应该没几天就腻了)
久仰 Hackergame 大名,虽然今年是预定摸了的,但是有个朋友拉我来打,打着打着我自己上头了,也就认真搞了。
CTF noob 第一次打相关类型的比赛,幸好运气好拿到了 67 名的好成绩(至少对我这个水平来说)。学到很多东西,跟算法竞赛的体验还是不一样的,以后有时间可以多打。
对于一门对内存控制足够精细的语言来说,值类型与引用类型的区别是十分重要的:值类型通常意味着较低的拷贝成本,通常来说,这样的类型被分配在栈上(当然,对于 C/C++ 来说,我们可以在堆上直接分配一个值类型对象,如 int
),而引用类型则通常分配在堆上,我们需要用一个包装过的对象去维护。
在 Rust 中,值类型和引用类型的界限在语言上提供了很明确的区分,而为了避免 C/C++ 中用户可以不受限制使用裸指针的情况,Rust 将很多裸指针操作都包在了 unsafe
块内,用户使用时必须对这种行为有足够的认知。当然,当用户需要使用指针,或者说引用类型的时候,Rust 也提供了 7 种包装类型来帮助用户更好的管理堆上的内存。
然而,Rust 官方教程和文档对这 7 种包装类型的介绍有很多容易混淆之处,同时网上的很多文章也已经完全脱离了最新版 Rust 的功能描述(如很多文章仍然描述 Cell
只接受实现了 Copy
的类型),导致很多初学者学习时容易产生迷惑和误用。这篇文章是我在复习 Rust 时重新学习包装类型相关时做出的笔记,希望能更好的帮助大家理解 Rust 的包装类型。
本文写作时的 Rust 版本为 Stable Channel 1.48.0。
这篇文章已经咕了一年了,原先的前言已经完全脱离时代了,在第一版到最终成文的期间过去了很多事情,趁现在毕业前夕有点时间迅速把坑给填了,也算是给大学和竞赛生涯画个句号吧。
这次的刷题对象是 AtCoder 的 Educational DP Round。从简单到困难的问题都有,倒挺适合我这种不会 DP 的人的。