flag_in_a_flash, image_in_lab and roomates_disk update
This commit is contained in:
@@ -10,39 +10,39 @@
|
||||
|
||||
### 官方题解
|
||||
|
||||
| 题目 write-up | 文件、源代码 |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------ |
|
||||
| [签到](official/签到/README.md) | [文件、源代码](official/签到/src) |
|
||||
| [猫咪问答++](official/猫咪问答++/README.md) | [文件、源代码](official/猫咪问答++/src) |
|
||||
| [2048](official/2048/README.md) | [文件、源代码](official/2048/src) |
|
||||
| [一闪而过的 Flag](official/一闪而过的%20Flag/README.md) | [文件、源代码](official/一闪而过的%20Flag/src) |
|
||||
| [从零开始的记账工具人](official/从零开始的记账工具人/README.md) | [文件、源代码](official/从零开始的记账工具人/src) |
|
||||
| [超简单的世界模拟器](official/超简单的世界模拟器/README.md) | [文件、源代码](official/超简单的世界模拟器/src) |
|
||||
| [从零开始的火星文生活](official/从零开始的火星文生活/README.md) | [文件、源代码](official/从零开始的火星文生活/src) |
|
||||
| [自复读的复读机](official/自复读的复读机/README.md) | [文件、源代码](official/自复读的复读机/src) |
|
||||
| [233 同学的字符串工具](official/233%20同学的字符串工具/README.md) | [文件、源代码](official/233%20同学的字符串工具/src) |
|
||||
| [233 同学的 Docker](official/233%20同学的%20Docker/README.md) | [文件、源代码](official/233%20同学的%20Docker/src) |
|
||||
| [从零开始的 HTTP 链接](official/从零开始的%20HTTP%20链接/README.md) | [文件、源代码](official/从零开始的%20HTTP%20链接/src) |
|
||||
| [来自一教的图片](official/来自一教的图片/README.md) | [文件、源代码](official/来自一教的图片/src) |
|
||||
| 题目 write-up | 文件、源代码 |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------- |
|
||||
| [签到](official/签到/README.md) | [文件、源代码](official/签到/src) |
|
||||
| [猫咪问答++](official/猫咪问答++/README.md) | [文件、源代码](official/猫咪问答++/src) |
|
||||
| [2048](official/2048/README.md) | [文件、源代码](official/2048/src) |
|
||||
| [一闪而过的 Flag](official/一闪而过的%20Flag/README.md) | [文件、源代码](official/一闪而过的%20Flag/src) |
|
||||
| [从零开始的记账工具人](official/从零开始的记账工具人/README.md) | [文件、源代码](official/从零开始的记账工具人/src) |
|
||||
| [超简单的世界模拟器](official/超简单的世界模拟器/README.md) | [文件、源代码](official/超简单的世界模拟器/src) |
|
||||
| [从零开始的火星文生活](official/从零开始的火星文生活/README.md) | [文件、源代码](official/从零开始的火星文生活/src) |
|
||||
| [自复读的复读机](official/自复读的复读机/README.md) | [文件、源代码](official/自复读的复读机/src) |
|
||||
| [233 同学的字符串工具](official/233%20同学的字符串工具/README.md) | [文件、源代码](official/233%20同学的字符串工具/src) |
|
||||
| [233 同学的 Docker](official/233%20同学的%20Docker/README.md) | [文件、源代码](official/233%20同学的%20Docker/src) |
|
||||
| [从零开始的 HTTP 链接](official/从零开始的%20HTTP%20链接/README.md) | [文件、源代码](official/从零开始的%20HTTP%20链接/src) |
|
||||
| [来自一教的图片](official/来自一教的图片/README.md) | [文件、源代码](official/来自一教的图片) |
|
||||
| [超简陋的 OpenGL 小程序](official/超简陋的%20OpenGL%20小程序/README.md) | [文件、源代码](official/超简陋的%20OpenGL%20小程序/src) |
|
||||
| [生活在博弈树上](official/生活在博弈树上/README.md) | [文件、源代码](official/生活在博弈树上/src) |
|
||||
| [来自未来的信笺](official/来自未来的信笺/README.md) | [文件、源代码](official/来自未来的信笺/src) |
|
||||
| [狗狗银行](official/狗狗银行/README.md) | [文件、源代码](official/狗狗银行/src) |
|
||||
| [超基础的数理模拟器](official/超基础的数理模拟器/README.md) | [文件、源代码](official/超基础的数理模拟器/src) |
|
||||
| [永不溢出的计算器](official/永不溢出的计算器/README.md) | [文件、源代码](official/永不溢出的计算器/src) |
|
||||
| [普通的身份认证器](official/普通的身份认证器/README.md) | [文件、源代码](official/普通的身份认证器/src) |
|
||||
| [超精巧的数字论证器](official/超精巧的数字论证器/README.md) | [文件、源代码](official/超精巧的数字论证器/src) |
|
||||
| [超自动的开箱模拟器](official/超自动的开箱模拟器/README.md) | [文件、源代码](official/超自动的开箱模拟器/src) |
|
||||
| [室友的加密硬盘](official/室友的加密硬盘/README.md) | [文件、源代码](official/室友的加密硬盘/src) |
|
||||
| [超简易的网盘服务器](official/超简易的网盘服务器/README.md) | [文件、源代码](official/超简易的网盘服务器/src) |
|
||||
| [超安全的代理服务器](official/超安全的代理服务器/README.md) | [文件、源代码](official/超安全的代理服务器/src) |
|
||||
| [证验码](official/证验码/README.md) | [文件、源代码](official/证验码/src) |
|
||||
| [动态链接库检查器](official/动态链接库检查器/README.md) | [文件、源代码](official/动态链接库检查器/src) |
|
||||
| [超精准的宇宙射线模拟器](official/超精准的宇宙射线模拟器/README.md) | [文件、源代码](official/超精准的宇宙射线模拟器/src) |
|
||||
| [超迷你的挖矿模拟器](official/超迷你的挖矿模拟器/README.md) | [文件、源代码](official/超迷你的挖矿模拟器/src) |
|
||||
| [Flag 计算机](official/Flag%20计算机/README.md) | [文件、源代码](official/Flag%20计算机/src) |
|
||||
| [中间人](official/中间人/README.md) | [文件、源代码](official/中间人/src) |
|
||||
| [不经意传输](official/不经意传输/README.md) | [文件、源代码](official/不经意传输/src) |
|
||||
| [生活在博弈树上](official/生活在博弈树上/README.md) | [文件、源代码](official/生活在博弈树上/src) |
|
||||
| [来自未来的信笺](official/来自未来的信笺/README.md) | [文件、源代码](official/来自未来的信笺/src) |
|
||||
| [狗狗银行](official/狗狗银行/README.md) | [文件、源代码](official/狗狗银行/src) |
|
||||
| [超基础的数理模拟器](official/超基础的数理模拟器/README.md) | [文件、源代码](official/超基础的数理模拟器/src) |
|
||||
| [永不溢出的计算器](official/永不溢出的计算器/README.md) | [文件、源代码](official/永不溢出的计算器/src) |
|
||||
| [普通的身份认证器](official/普通的身份认证器/README.md) | [文件、源代码](official/普通的身份认证器/src) |
|
||||
| [超精巧的数字论证器](official/超精巧的数字论证器/README.md) | [文件、源代码](official/超精巧的数字论证器/src) |
|
||||
| [超自动的开箱模拟器](official/超自动的开箱模拟器/README.md) | [文件、源代码](official/超自动的开箱模拟器/src) |
|
||||
| [室友的加密硬盘](official/室友的加密硬盘/README.md) | [文件、源代码](official/室友的加密硬盘) |
|
||||
| [超简易的网盘服务器](official/超简易的网盘服务器/README.md) | [文件、源代码](official/超简易的网盘服务器/src) |
|
||||
| [超安全的代理服务器](official/超安全的代理服务器/README.md) | [文件、源代码](official/超安全的代理服务器/src) |
|
||||
| [证验码](official/证验码/README.md) | [文件、源代码](official/证验码/src) |
|
||||
| [动态链接库检查器](official/动态链接库检查器/README.md) | [文件、源代码](official/动态链接库检查器/src) |
|
||||
| [超精准的宇宙射线模拟器](official/超精准的宇宙射线模拟器/README.md) | [文件、源代码](official/超精准的宇宙射线模拟器/src) |
|
||||
| [超迷你的挖矿模拟器](official/超迷你的挖矿模拟器/README.md) | [文件、源代码](official/超迷你的挖矿模拟器/src) |
|
||||
| [Flag 计算机](official/Flag%20计算机/README.md) | [文件、源代码](official/Flag%20计算机/src) |
|
||||
| [中间人](official/中间人/README.md) | [文件、源代码](official/中间人/src) |
|
||||
| [不经意传输](official/不经意传输/README.md) | [文件、源代码](official/不经意传输/src) |
|
||||
|
||||
|
||||
### 来自选手
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# 一闪而过的 Flag
|
||||
|
||||
这道题怎么做应该不用多说了,在开始菜单中查找 cmd 或者 powershell 并打开,再将 Untitled01.exe 拖进去,回车,结束。用过命令行就应该能做出来。其他 OS 用户可用虚拟机和 wine 。唯一的坑可能是录屏不能解,因为 Windows 10 默认 cmd 和 powershell 字体中 1 和大写 I 几乎完全相同无法区分。
|
||||
这道题怎么做应该不用多说了,在开始菜单中查找 cmd 或者 powershell 并打开,再将 Untitled01.exe 拖进去,回车,结束。
|
||||
|
||||
其他 OS 用户可用虚拟机和 wine 。唯一的坑可能是录屏不能解,因为 Windows 10 默认 cmd 和 powershell 字体中 1 和大写 I 几乎完全相同无法区分。
|
||||
|
||||
本题非常简单但确实来自于生活中我多次遇到的真实事件:想想多年以前,刚刚学 C 语言~~或是使用 Mathematica 注册机~~的时候,你是否也被这个问题困扰过呢?
|
||||
|
||||
|
||||
Executable
+79
@@ -0,0 +1,79 @@
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
|
||||
void usleep(__int64 usec)
|
||||
{
|
||||
HANDLE timer;
|
||||
LARGE_INTEGER ft;
|
||||
|
||||
ft.QuadPart = -(10*usec); // Convert to 100 nanosecond interval, negative value indicates relative time
|
||||
|
||||
timer = CreateWaitableTimer(NULL, TRUE, NULL);
|
||||
SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
|
||||
WaitForSingleObject(timer, INFINITE);
|
||||
CloseHandle(timer);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
char flag[100];
|
||||
int n = 20;
|
||||
flag[n++] = 'f';
|
||||
flag[n++] = 'l';
|
||||
flag[n++] = 'a';
|
||||
flag[n++] = 'g';
|
||||
flag[n++] = '{';
|
||||
flag[n++] = 'A';
|
||||
flag[n++] = 'r';
|
||||
flag[n++] = 'e';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = 'y';
|
||||
flag[n++] = 'o';
|
||||
flag[n++] = 'u';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = 'e';
|
||||
flag[n++] = 'y';
|
||||
flag[n++] = 'e';
|
||||
flag[n++] = 's';
|
||||
flag[n++] = '1';
|
||||
flag[n++] = 'g';
|
||||
flag[n++] = 'h';
|
||||
flag[n++] = 't';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = 'g';
|
||||
flag[n++] = '0';
|
||||
flag[n++] = '0';
|
||||
flag[n++] = 'D';
|
||||
flag[n++] = '?';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = 'c';
|
||||
flag[n++] = 'a';
|
||||
flag[n++] = 'n';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = 'y';
|
||||
flag[n++] = 'o';
|
||||
flag[n++] = 'u';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = 'd';
|
||||
flag[n++] = 'I';
|
||||
flag[n++] = 's';
|
||||
flag[n++] = 't';
|
||||
flag[n++] = '1';
|
||||
flag[n++] = 'n';
|
||||
flag[n++] = 'g';
|
||||
flag[n++] = 'u';
|
||||
flag[n++] = 'i';
|
||||
flag[n++] = 's';
|
||||
flag[n++] = 'h';
|
||||
flag[n++] = '_';
|
||||
flag[n++] = '1';
|
||||
flag[n++] = 'i';
|
||||
flag[n++] = 'I';
|
||||
flag[n++] = '?';
|
||||
flag[n++] = '}';
|
||||
flag[n++] = '\0';
|
||||
|
||||
printf("%s\n", flag + 20);
|
||||
usleep(500000);
|
||||
return 0;
|
||||
}
|
||||
@@ -37,9 +37,9 @@ $ dd if=target.img of=swap.img bs=512 count=1497088 skip=393216
|
||||
$ dd if=target.img of=chome.img bs=512 count=1998848 skip=1892352
|
||||
```
|
||||
|
||||
用 file 查看一下并尝试 mount ,看出主分区是 ext4 格式的 boot 分区; 976M 分区 LUKS 加密,应该是题目中描述的家目录所在分区; swap 内有 SWSUSP1 镜像,表示有休眠存在;最后一个 6.1GB 分区只能是根分区了,因为虽然磁盘只得到了一小部分,分区表仍然是正常的。
|
||||
用 file 查看一下并尝试 mount ,看出主分区是 ext4 格式的 boot 分区; 976M 分区 LUKS 加密,应该是题目中描述的家目录所在分区; swap 内有 SWSUSP1 镜像,表示有休眠存在;最后一个 6.1GB 分区应该只能是根分区了。因为虽然磁盘只得到了一小部分,分区表仍然完整并会显示出所有的分区。
|
||||
|
||||
那么之后自然的思路是看看 boot 内有没有东西,毕竟有些不太注意安全的人是会图方便把 LUKS 的key 放在 boot 中以便开机输入密码的。于是:
|
||||
那么之后自然的思路是看看 boot 内有没有东西,毕竟有些不太注意安全的人是会图方便把 LUKS 的key 放在 boot 中以便开机不用输入密码的。于是:
|
||||
|
||||
```
|
||||
$ sudo mount boot.img /mnt
|
||||
@@ -49,9 +49,9 @@ I'm not that stupid to put plaintext key in /boot!
|
||||
|
||||
信不信由你,我是信了。
|
||||
|
||||
那怎么办呢? AES 又不能破解,那就只有 swap 和根分区有戏了。
|
||||
那怎么办呢? AES 又不能爆破,那就只有 swap 和根分区有戏了。
|
||||
|
||||
根分区只有一点点,但也可以通过 testdisk 之类看看内容,或者 strings 一下... 要是有更多的非预期解那也算是 OK 了。
|
||||
根分区只有一点点,但也可以通过 testdisk 之类看看内容,或者 strings 一下... 要是有更多的非预期解那也算是 OK 的。
|
||||
|
||||
那就看 swap 吧,既然休眠,那估计整个内存 dump 都在里头了,那就找一下 AES key 吧 -- 这一步萌新出题人不太清楚做题的人能不能想到,出题灵感来源于 cold boot attack ,本想弄一个真实冷启动 dump 出的内存镜像,但鉴于能力和成本不够,就索性用休眠导致的 memory dump 了。
|
||||
|
||||
@@ -126,7 +126,7 @@ https://blog.appsecco.com/breaking-full-disk-encryption-from-a-memory-dump-5a868
|
||||
https://access.redhat.com/solutions/1543373
|
||||
```
|
||||
|
||||
注意,第一篇文章中一个有问题的地方是 LUKS 分区的大小和物理分区大小不同,所以用里面类似于 `echo "0 <size> crypt aes-xts-plain64 <key> 0 </dev/drive> 4096" | sudo dmsetup create luks-volume` 的方法是不行的,并且其实具体的加密方式题目中也没有提到。你可以自己创建一个 LUKS 分区实验一下,对于题目,二者差了 4096 字节。而红帽文章中直接用 master key 添加 key slot 的方法不需要知道这些信息。但本人也不是专业人士,具体细节还要以正规渠道得到的信息为准。
|
||||
注意,第一篇文章中一个有问题的地方是 LUKS 分区的大小和物理分区大小不同(你可以自己创建一个 LUKS 分区实验一下,对于题目,二者差了 4096 字节),所以用里面类似于 `echo "0 <size> crypt aes-xts-plain64 <key> 0 </dev/drive> 4096" | sudo dmsetup create luks-volume` 的方法是不行的,并且具体的加密方式题目中也没有提到。而红帽文章中直接用 master key 添加 key slot 的方法不需要知道这些信息。但本人也不是专业人士,具体细节还要以正规渠道得到的信息为准。
|
||||
|
||||
如果你能够搜到这两篇文章,尤其是第一篇(其实还是比较容易搜到的),那应该可以解出这个题了。
|
||||
|
||||
@@ -134,9 +134,9 @@ https://access.redhat.com/solutions/1543373
|
||||
|
||||
### 一个非预期解
|
||||
|
||||
不知是因为 LUKS 分区打开的时候本该如此,还是出题人操作不慎在分区创建的时候密码复制到了剪贴板上,密码本身明文在 swap 中出现了,所以 strings 一下然后逐个字符串尝试就可以求解。但感觉其实这样做出来也算是正常解法了。密码是什么就留作练习吧。
|
||||
不知是因为 LUKS 分区打开的时候本该如此,还是出题人操作不慎在分区创建的时候密码复制到了剪贴板上,密码本身明文在 swap 中出现了,所以 strings 一下然后逐个字符串尝试就可以求解。但感觉其实这样做出来也算是正常解法了。密码是什么留作练习。
|
||||
|
||||
### 其他可能方法
|
||||
|
||||
本题目的制作方法是在虚拟机装装上 xubuntu ,休眠之后 dump 出磁盘的一部分。就算不知道这个过程,一个自然的想法是尝试恢复启动,在 Linux 启动至 initrd 时进行分析(libreliu的思路)。
|
||||
本题目的制作方法是在虚拟机装装上 xubuntu ,休眠之后 dump 出磁盘的一部分。就算不知道这个过程,一个自然的想法是尝试恢复启动,在 Linux 启动至 initrd 时进行分析(libreliu的思路)。我没有试过,也留作练习。
|
||||
|
||||
|
||||
@@ -26,11 +26,17 @@ plt.imshow(logf, 'gray')
|
||||
|
||||
题目中傅里叶光学是提示,文件名意思是 4F 成像系统中间,就对应物的傅里叶变换平面,也算是提示了,但或许对非物理专业的同学还是有点脑洞吧。
|
||||
|
||||
相关模拟可以参考[ Matlab 官方文档](https://www.mathworks.com/help/matlab/math/two-dimensional-fft.html)。
|
||||
相关模拟可以参考[ Matlab 官方文档](https://www.mathworks.com/help/matlab/math/two-dimensional-fft.html)。本题的图片其实也是通过 Matlab 制作的。
|
||||
|
||||
为什么题目中说是模拟呢,因为题目中的图片取的是物傅里叶变换的实部,而一般实验能直接观测光强(用 CCD )和相位分布(用 [SH波前探测器](https://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=5287)),看电场实部或者虚部还真没听说过。
|
||||
|
||||
这么做的原因是衍射光强分布不同地方差几个量级,如果这样存到图片里就损失了大量的信息。就算像本题这样取了实部,其实强度信息也基本损失完了,所以图片上除了黑点就是白点,几乎没有中间颜色。但因为实部包含了相位信息,所以仍能成功重构图像,因为[图像的细节信息其实在相位而不是强度中](https://people.eecs.berkeley.edu/~sastry/ee20/vision2/node6.html)。
|
||||
这么做的原因是衍射光强分布不同地方差几个量级,如果直接把光强存到图片里就损失了大量的信息,根本无法重构:你可以把圆孔衍射的光强分布存图片试一下,发现结果会肉眼可见地令人失望:
|
||||
|
||||

|
||||
|
||||
或许这方面图像处理有更好的方法,不过我不太懂。
|
||||
|
||||
就算像本题这样取了实部,其实强度信息也基本损失完了,所以图片上除了黑点就是白点,几乎没有中间颜色。但因为这种存储方式仍然包含了变换后图的相位信息,所以仍能成功重构图像,因为[图像的细节信息其实在相位而不是强度中](https://people.eecs.berkeley.edu/~sastry/ee20/vision2/node6.html)。
|
||||
|
||||
另外,真实情况的零频率分量是在成像中间的,模拟中其实需要进行 fftshift 操作,鉴于这里的图像根本区分不出中间还是边上,就也省去了。
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 353 KiB |
Reference in New Issue
Block a user