目录

  1. 1. 前言
  2. 2. 知识点
  3. 3. 题目
  4. 4. 思路
    1. 4.1. 知识补充
      1. 4.1.1. Linux系统下执行C语言程序
      2. 4.1.2. 操作
  5. 5. 总结

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

RE初探索0x09

2023/4/13 Reverse
  |     |   总文章阅读量:

前言

NSS上的[NISACTF 2022]string

知识点

linux上的c

随机数

题目

下载题目附件,拖入ida并f5查看main函数

PS:附件改为exe后缀发现无法运行,猜测是linux下的文件

image-20230413200522364

很明显要查看flag()函数

image-20230413200700683

(此代码上方为定义初始化部分)

看得出来在NSSCTF{}中间的这段for循环就是生成flag的语句

运用了随机数

思路

知识补充

Linux系统下执行C语言程序

gcc是linux自带的c语言编译器

  1. 编写c语言程序:使用vim等文本编辑器进行编写,保存为c文件
  2. 编译c语言程序(以hello.c为例)
gcc hello.c -o hello

这时在当前目录下会生成一个名为”hello”的可执行文件

  1. 运行程序
./hello

操作

查看seed种子

image-20230413205136018

得知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相关编译指令