[ pwn 学习 ] CTFshow-pwn14
2026-08-22 20:36:38

pwn14

题目说****给定 key 为 “CTFshow”,编译运行即可获得 flag

读一下程序 这个程序需要读取一个名为key的二进制文件 将其中的每个字节转换为 8 位二进制字符串 然后按特定格式输出 最终格式是ctfshow{}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE 1024

int main() {
FILE *fp;
unsigned char buffer[BUFFER_SIZE];
size_t n;
fp = fopen("key", "rb");
-- 以二进制只读模式打开文件“key”
if (fp == NULL) {
perror("Nothing here!");
return -1;
}
char output[BUFFER_SIZE * 9 + 12];
int offset = 0;
offset += sprintf(output + offset, "ctfshow{");
while ((n = fread(buffer, sizeof(unsigned char), BUFFER_SIZE, fp)) > 0) {
for (size_t i = 0; i < n; i++) {

if (i != n - 1) {
offset += sprintf(output + offset, "_");
}
}
if (!feof(fp)) {
offset += sprintf(output + offset, " ");
}
}
offset += sprintf(output + offset, "}");
printf("%s\n", output);
fclose(fp);
return 0;
}

unsigned char无符号字节

存放原始字节数据。unsigned表示范围 0-255

1
2
3
for (int j = 7; j >= 0; j--) {
offset += sprintf(output + offset, "%d", (buffer[i] >> j) & 1);
}

buffer[i]>>j是把第 i 个字节右移 j 位

& 1是和 1 做按位与 只保留最低位

创建名为 key的文件

根据题目说给定keyCTFshow

CTFshow写入文件key

1
printf 'CTFshow' > key

看程序对 key 的处理

1
while ((n = fread(buffer, sizeof(unsignedchar), BUFFER_SIZE, fp)) > 0)

程序从 key 文件里读字节

1
2
3
for (int j = 7; j >= 0; j--) {
offset += sprintf(output + offset, "%d", (buffer[i] >> j) & 1);
}

说明它会把每个字节从第 7 位到第 0 位取出来

也就是把每个字符转成 8 位二进制

Step4:看输出格式

offset += sprintf(output + offset, "ctfshow{");

offset += sprintf(output + offset, "}");

offset += sprintf(output + offset, "_");

说明最终格式是:

ctfshow{每个字符的8位二进制_每个字符的8位二进制_...}

Step5:算 key 的结果

key=ctfshow

逐字符转二进制:

C -> 01000011

T -> 01010100

F -> 01000110

s -> 01110011

h -> 01101000

o -> 01101111

w -> 01110111

ctfshow{01000011_01010100_01000110_01110011_01101000_01101111_01110111}

Sol

1
2
3
printf 'CTFshow' > key
gcc flag14.c -o flag14
./flag14

相关笔记

  • pwn13 — GCC 编译 + ASCII 码转字符
  • pwn16gcc 编译汇编 + hex 字符串解码
  • pwn15 — 汇编编译:nasm + ld 工具链
  • pwn5 — ELF 文件结构与 section 概念
上一页
2026-08-22 20:36:38
下一页