[NISACTF 2022]string

呜呜呜这道题有坑……

先看题目
image

查壳

无壳,64位

image

丢入64ida,找main函数,f5

image

然鹅什么都没有,再看函数列表有一个flag函数,点进去看伪代码

image

点击查看代码
puts("The length of flag is 13");
  srand(seed);
  printf("NSSCTF{");
  for ( m = 0; m < 13; ++m )
  {
    v4 = rand();
    printf("%d", (unsigned int)(v4 % 8 + 1));
  }
  putchar('}');
  return &v6[-v12];

这个源码很好写,只不过要注意一个点,需要去找seed种子数

不过好在双击seed,就跳转到种子数那

image

这里的种子数是十六进制,可以在ida里选中这个值右键,就能转换十进制数了

image

image

即seed=10086

由此写脚本

几乎不用做大的改动

image

点击查看代码

#include<stdio.h>
#include<stdlib.h> 
int main()
{
	  srand(10086);
	  printf("NSSCTF{");
	  for (int m = 0; m < 13; ++m )
	  {
	  	int v4 = rand();
	    printf("%d",(v4 % 8 + 1));
	  }
	  putchar('}');
	  return 0;
}

到这里有一个坑!!!

你会发现在Windows系统上运行的值提交flag并不正确

后来看别人的wp,才知道要放在Linux上运行的才正确

我用的Ubuntu16运行脚本

image

点击查看代码
zer0@ubuntu:~$ cat '/home/zer0/桌面/1.c' 

#include<stdio.h>
#include<stdlib.h> 
int main()
{
	  
	  srand(10086);
	  printf("NSSCTF{");
	  for (int m = 0; m < 13; ++m )
	  {
	  	int v4 = rand();
	    printf("%d",(v4 % 8 + 1));
	  }
	  putchar('}');
	  return 0;
}zer0@ubuntu:~$ ^C
zer0@ubuntu:~$ gcc '/home/zer0/桌面/1.c' -o 1.o
zer0@ubuntu:~$ ./1.o
NSSCTF{5353316611126}zer0@ubuntu:~$ 

flag:NSSCTF{5353316611126}

posted @ 2022-11-13 18:45  Zer0o  阅读(464)  评论(1)    收藏  举报