当前位置: 首页 > news >正文

NSSCTF-[NISACTF 2022]string_WP

NSSCTF-[NISACTF 2022]string_WP

一、做题过程

将文件拖入DIE中,64位,无壳,在ida中打开

image-20250829175222454

<shift + f12>查看可打印字符串

先看第一段函数,并没有什么收获

image-20250829175311261

跟进flag函数中查看,伪码如下:

char *__fastcall flag(char *input)
{char *v1; // raxchar *v2; // raxchar *v3; // raxint v4; // eaxchar *i_1; // [rsp+8h] [rbp-38h]int i; // [rsp+1Ch] [rbp-24h]int j; // [rsp+20h] [rbp-20h]int k; // [rsp+20h] [rbp-20h]int n13; // [rsp+24h] [rbp-1Ch]int m; // [rsp+28h] [rbp-18h]int v12; // [rsp+2Ch] [rbp-14h]int i_2; // [rsp+34h] [rbp-Ch]i_1 = input;v12 = (_DWORD)input + 1;if ( (_DWORD)input << 30 ){while ( 1 ){v1 = i_1++;if ( !*v1 )break;if ( !((_DWORD)i_1 << 30) )goto LABEL_4;}}else{
LABEL_4:for ( i = (int)i_1; ((i - 16843009) & ~i & 0x80808080) == 0; i = i_2 ){i_2 = i_1[1];i_1 += 4;}v2 = i_1++;for ( j = *v2; j; j = *v3 )v3 = i_1++;}puts("This a magic!");n13 = (_DWORD)i_1 - v12;for ( k = 0; (int)i_1 - v12 > k; ++k )n13 ^= 0x1Au;if ( n13 != 13 ){puts("error!");exit(0);}puts("The length of flag is 13");srand(seed);printf("NSSCTF{");for ( m = 0; m < 13; ++m ){v4 = rand();printf("%d", v4 % 8 + 1);}putchar(125);return &i_1[-v12];
}

代码很长,但是核心代码只有这部分:

image-20250829175429828

双击跟进seed值,发现是0x2766

image-20250829175501746

这是一个伪随机数生成器,所以我们可以直接编写代码复现

#include <stdio.h>
#include <stdlib.h>
int main()
{int seed=0x2766;srand(seed);for(int i=0;i<13;i++){int v4=rand();printf("%d",(v4%8+1));}return 0;
}

但是注意需要在linux中运行,因为伪随机数列不同

依次使用命令gedit test.c,进入编辑代码

然后gcc编译,gcc test.c -o test.out

最后运行test.out,./test.out

最后得到伪随机数列

image-20250829175825607

Get_flag:NSSCTF{5353316611126}

二、需要注意的

  • 对于伪随机数复现需要在对应系统中运行,比如ELF文件就在linux中运行
  • kali linux中运行C语言代码步骤就是:

1.gedit test.c

2.gcc test.c -o test.out

需要注意的

  • 对于伪随机数复现需要在对应系统中运行,比如ELF文件就在linux中运行
  • kali linux中运行C语言代码步骤就是:

1.gedit test.c

2.gcc test.c -o test.out

3../test.out

http://www.dtcms.com/a/356789.html

相关文章:

  • 第6.4节:awk语言 for 语句
  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • (二)Python语法基础(下)
  • web端播放flv视频流demo(flv.js的使用)
  • 【C语言16天强化训练】从基础入门到进阶:Day 15
  • 量化研究--开放ptrade西蒙斯全天候ETF策略动量策略
  • 一文说清楚ABAP中的‘显示提交(Explicit Commit)’和‘隐式提交(Implicit Commit)’
  • CesiumJS 封装 - 初始化与配置
  • Ubuntu 搭建 Solana 区块链开发环境 + Anchor 智能合约完整教程
  • 2025年防窜货系统行业深度分析报告
  • 将数据赋值到Word并下载
  • Cesium 入门教程(十三):粒子系统实例
  • 无人机中的坐标系理解:机体坐标系,东北天(NED)坐标系,世界大地(WGS84)坐标系
  • Python的一次实际应用:利用Python操作Word文档的页码
  • AI 与脑机接口的交叉融合:当机器 “读懂” 大脑信号,医疗将迎来哪些变革?
  • CPP学习之map和set
  • 渗透测试学习笔记
  • 【论文阅读】SegCLIP:用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习
  • Minio临时地址访问资源提示SignatureDoesNotMatch问题记录
  • gdb打印长字符产变量信息
  • TypeScript的Type
  • Linux(0)|梦开始的地方:xshell下载
  • MAC spotlight 搜不到应用程序和 tags 生效
  • 五、Callable 接口
  • Spring为什么需要三级缓存
  • 海康相机开发---设备布防(Setup Alarm)
  • 数据库Mysql
  • 微积分 | 积分代换
  • 如何将iPhone日历传输到电脑
  • 内置高压MOS的智能调光方案:AP5126 LED降压恒流驱动芯片