nccstf_string

在这里插入图片描述
老样子,下载,查壳,64位,IDA打开

f5查看伪代码在这里插入图片描述

伪码分析:
一、整体流程
这个 main 函数只是一层输入输出外壳,本身不包含任何加密校验逻辑。所有核心的 flag 验证算法都封装在 flag() 函数里。
完整执行流程:
初始化栈保护机制
打印提示语,读取用户输入的字符串
将输入传入 flag() 函数执行校验
程序返回

点击flag函数,在这里插入图片描述
函数代码分析
DWORD 全称 Double Word(双字),是 Windows C 开发体系里的经典数据类型,IDA 反编译时沿用了这个命名,前面加下划线写作 _DWORD。
大小:4 字节(32 位),对应 C 标准里的 unsigned int,是无符号 32 位整数。
命名由来:1 个 Word(字)是 2 字节(16 位),双字就是两个 Word,共 4 字节。

这是一道入门逆向题的核心函数,整体逻辑分为长度校验和flag 生成输出两部分。输入字符串的内容不参与校验,只有长度会决定是否能触发 flag 输出。
逐段逻辑拆解

  1. 前半段大段代码:快速计算字符串长度
    你看到的大量位运算、循环跳转,本质是编译器内联优化的 strlen(字符串长度计算)实现,是标准的快速长度计算算法:
    先检查指针对齐状态,未对齐时先逐个字节遍历到对齐位置;
    对齐后按 4 字节(32 位)批量检测,通过经典位运算公式 ((i - 0x01010101) & ~i & 0x80808080) 快速判断 4 个字节中是否包含结束符 \0,大幅提升长字符串的计算效率;
    最后处理剩余不足 4 字节的部分,逐个字节定位结束符位置。
    最终 v6 会指向字符串末尾的 \0,v6 - 起始地址 就是输入字符串的总长度。
    注:伪代码里大量 (_DWORD)指针、+1 偏移是 IDA 反编译的类型推断瑕疵,把指针运算错误转成了整数运算,不影响核心逻辑判断。

核心代码:
puts(“The length of flag is 13”);//输出语句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(125);

说明flag长度是13,生成一个随机数,C语言的随机数是伪随机,同一个种子生成的随机数是一样的,所以种子相当于密钥,先获取到种子,双击seed,
在这里插入图片描述
说明种子是0x2766,写解题脚本

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

得到flag

内容概要:本文围绕基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化问题展开研究,旨在通过智能优化算法有效降低网络损耗、提升电压质量并增强配电系统的运行效率。研究系统地介绍了小生境粒子群算法的改进策略,构建了包含功率平衡、电压安全、设备容量等多重约束的多目标优化模型,并采用IEEE标准测试系统进行仿真验证,充分证明了该方法在处理多目标、多约束优化问题上的优越性能。全文涵盖从数学建模、算法设计、约束处理到多目标折衷解选择的完整流程,并配套提供了完整的Matlab代码实现,便于读者复现结果与进行二次开发。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事电力系统优化、智能算法研究或相关领域工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决配电网中有功与无功功率的协同优化问题,实现节能降耗与电压稳定;②学习并掌握多目标粒子群算法及其小生境改进策略在电力系统中的具体应用与实现细节;③通过Matlab代码进行仿真,加深对智能优化算法在工程实践中应用的理解,提升科研与工程实践能力。; 阅读建议:此资源以理论分析与代码实现紧密结合的方式呈现,建议读者在深入理解算法原理和模型构建的基础上,结合所提供的Matlab代码进行仿真实验,重点关注参数设置、收敛性分析与结果可视化等关键环节,从而实现从理论认知到实践验证的完整闭环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值