AAA CTF101 安全攻防实践短学期 Misc Lab 1
仅供参考。
Task 1
1 |
|
GB 2312 的编码方式:
- 单字节:0xxxxxxx(如同 ASCII)
- 双字节:1xxxxxxx 1xxxxxxx
B0 | B1 |
---|---|
0x00 – 0x7F | |
0xA1 – 0xA9 0xB0 – 0xF7 | 0xA1 – 0xFE |
GBK 的编码方式:
- 单字节:0xxxxxxx(如同 ASCII)
- 双字节:1xxxxxxx xxxxxxxx
B0 | B1 |
---|---|
0x00 – 0x7F | |
0xA1 – 0xA9 0xB0 – 0xF7 | 0xA1 – 0xFE |
0x81 – 0xA0 | 0x40 – 0x7E 0x80 – 0xFE |
0xA8 – 0xA9 0xAA – 0xFE | 0x40 – 0x7E 0x80 – 0xA0 |
GB18030 的编码方式:
- 单字节:0xxxxxxx(如同 ASCII)
- 双字节:1xxxxxxx xxxxxxxx(如同 GBK)
- 四字节:1xxxxxxx 0011xxxx 1xxxxxxx 0011xxxx
B0 | B1 | B2 | B3 |
---|---|---|---|
0x00 – 0x7F | |||
0x81 – 0xFE | 0x40 – 0x7F 0x80 – 0xFE | ||
0x81 – 0xFE | 0x30 – 0x3F | 0x81 – 0xFE | 0x30 – 0x3F |
如果编解码的过程中出现了无法解析的字符或字节序列(例如 GBK 编码 \uFFFD
字符时),编解码就会出错。那么此时就必须选择忽略这个字符(ignore)或将其替换为特定字符(replace),这两个步骤都势必会造成信息的丢失。这种情况下信息就不可恢复。
也就是说,实验指导中所给的六种乱码情况中,3 和 4 是一定可以恢复的,因为 Latin-1 是单字节编码,不存在解码失败的问题。而 1,2,5,6 都有可能出现无法恢复的编码错误。
例如在 Python 中对于字符串“绫地”的编解码过程:
步骤 | 字符/字节序列 | 说明 |
---|---|---|
绫地 | ||
.encode('utf-8') | \xe7\xbb\xab\xe5\x9c\xb0 | 三字节编码 |
.decode('gbk', 'replace') | 缁�鍦� | 双字节编码,\xab 与 \xb0 替换为 “�” |
.encode('gbk', 'replace') | \xe7\xbb?\xe5\x9c? | “�” 替换为 “?” |
.decode('utf-8', 'replace') | �?�? | \xe7\xbb 与 \xe5\x9c 替换为 “�” |
步骤 | 字符/字节序列 | 说明 |
---|---|---|
绫地 | ||
.encode('gbk') | \xe7\xb1\xb5\xd8 | 双字节编码 |
.decode('utf-8', 'replace') | 籵� | \xd8 替换为 “�” |
.encode('utf-8') | \xe7\xb1\xb5\xef\xbf\xbd | 三字节编码 |
.decode('gbk') | 绫碉拷 |
而对于字符串“宁宁”:
步骤 | 字符/字节序列 | 说明 |
---|---|---|
宁宁 | ||
.encode('utf-8') | \xe5\xae\x81\xe5\xae\x81 | 三字节编码 |
.decode('gbk') | 瀹佸畞 | 双字节编码 |
.encode('gbk') | \xe5\xae\x81\xe5\xae\x81 | |
.decode('utf-8') | 宁宁 |
步骤 | 字符/字节序列 | 说明 |
---|---|---|
宁宁 | ||
.encode('gbk') | \xc4\xfe\xc4\xfe | 双字节编码 |
.decode('utf-8', 'replace') | ���� | \xc4 与 \xfe 替换为“�” |
.encode('utf-8') | \xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd | |
.decode('gbk') | 锟斤拷锟斤拷 |
在这里我们也可以看到,“��”(\xef\xbf\xbd
\xef\xbf\xbd
)会被 GBK 解码为“锟斤拷”(\xef\xbf
\xbd\xef
\xbf\xbd
)。
绫地宁宁天下第一!
Challange 1
可以发现 cipher.txt
中的重复字符串: {gY
K`cfeZK
其中前者的出现位置为 [2, 60, 611, 1104, 1278, 1655, 2090]
1 |
|
可以确定密钥长度为 29。经过一些正则匹配:[A-Za-z0-9 ,.!?\'"-]+
基本可以确定大多数正确的 key,再经过手动修改几个 key,最终成功解密。
Challenge 2
TonyCrane’s easy OSINT
1 |
|
所以,拍摄图片时 TonyCrane 位于海拔 63.4 m,时间为 2023 年 2 月 9 日 21:28:31.122 UTC+9。
yyy’s real OSINT
1 |
|
根据图片中的一些高大建筑物,识图得知地点在厦门的南湖公园。
AAA CTF101 安全攻防实践短学期 Misc Lab 1
https://heap.45gfg9.net/t/ZJU/2023-CTF101/cd45fec93111/