前言
NSS上的[NISACTF 2022]string
知识点
linux上的c
随机数
题目
下载题目附件,拖入ida并f5查看main函数
PS:附件改为exe后缀发现无法运行,猜测是linux下的文件
很明显要查看flag()函数
(此代码上方为定义初始化部分)
看得出来在NSSCTF{
与}
中间的这段for循环就是生成flag的语句
运用了随机数
思路
知识补充
Linux系统下执行C语言程序
gcc是linux自带的c语言编译器
- 编写c语言程序:使用
vim
等文本编辑器进行编写,保存为c文件 - 编译c语言程序(以hello.c为例)
gcc hello.c -o hello
这时在当前目录下会生成一个名为”hello”的可执行文件
- 运行程序
./hello
操作
查看seed
种子
得知seed
=0x2766
直接写c脚本跑最后的核心代码
#include <stdio.h>
int main()
{
srand(0x2766);
printf("NSSCTF{");
for (int m = 0; m < 13; ++m)
{
int v4 = rand();
printf("%d", (unsigned int)(v4 % 8 + 1));
}
putchar('}');
return 0;
}
这里要在linux环境下跑才能得到正确的flag
gcc 9.c -o 9.o
./9.o
>>>NSSCTF{5353316611126}
总结
Windows环境与Linux环境下随机数不同
了解Linux相关编译指令