[ pwn 学习 ] CTFshow-pwn14
2026-08-22 20:36:38
pwn14
题目说****给定 key 为 “CTFshow”,编译运行即可获得 flag
读一下程序 这个程序需要读取一个名为key的二进制文件 将其中的每个字节转换为 8 位二进制字符串 然后按特定格式输出 最终格式是ctfshow{}
1 | #include <stdio.h> |
unsigned char无符号字节
存放原始字节数据。unsigned表示范围 0-255
1 | for (int j = 7; j >= 0; j--) { |
buffer[i]>>j是把第 i 个字节右移 j 位
& 1是和 1 做按位与 只保留最低位
创建名为 key的文件
根据题目说给定key为CTFshow
把CTFshow写入文件key
1 | printf 'CTFshow' > key |
看程序对 key 的处理
1 | while ((n = fread(buffer, sizeof(unsignedchar), BUFFER_SIZE, fp)) > 0) |
程序从 key 文件里读字节
1 | for (int j = 7; j >= 0; j--) { |
说明它会把每个字节从第 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 | printf 'CTFshow' > key |