XYNU2024信安杯-REVERSE(复现)

news2025/4/28 8:07:32

前言

记录记录

1.Can_you_find_me?

签到题,秒了

2.ea_re

快速定位

int __cdecl main_0(int argc, const char **argv, const char **envp)
{
  int v4; // [esp+0h] [ebp-1A0h]
  const char **v5; // [esp+4h] [ebp-19Ch]
  const char **v6; // [esp+8h] [ebp-198h]
  char v7; // [esp+Ch] [ebp-194h]
  int i; // [esp+D4h] [ebp-CCh]
  int v9; // [esp+E0h] [ebp-C0h]
  int v10[24]; // [esp+ECh] [ebp-B4h]
  char v11; // [esp+14Fh] [ebp-51h]
  char v12[36]; // [esp+178h] [ebp-28h]

  v11 = 0;
  v10[0] = 1;
  v10[1] = 4;
  v10[2] = 14;
  v10[3] = 10;
  v10[4] = 5;
  v10[5] = 36;
  v10[6] = 23;
  v10[7] = 42;
  v10[8] = 13;
  v10[9] = 19;
  v10[10] = 28;
  v10[11] = 13;
  v10[12] = 27;
  v10[13] = 39;
  v10[14] = 48;
  v10[15] = 41;
  v10[16] = 42;
  v10[17] = 26;
  v10[18] = 20;
  v10[19] = 59;
  v10[20] = 4;
  v10[21] = 0;
  printf("plz enter the flag:");
  while ( 1 )
  {
    v7 = getch();
    v12[v11] = v7;
    if ( !v7 || v12[v11] == 13 )
      break;
    if ( v12[v11] == 8 )
    {
      printf("\b\b");
      --v11;
    }
    else
    {
      printf("%c", v12[v11++]);
    }
  }
  v9 = 0;
  for ( i = 0; i < 17; ++i )
  {
    if ( v12[i] != byte_415768[v10[i]] )
      v9 = 1;
  }
  if ( v12[17] != 49 || v12[18] != 48 || v12[19] != 50 || v12[20] != 52 || v12[21] != 125 )
    v9 = 1;
  v12[v11] = 0;
  printf("\r\n");
  if ( v9 )
  {
    printf("u r wrong\r\n\r\n");
    main(v4, v5, v6);
  }
  else
  {
    printf("u r right!\r\n");
  }
  system("pause");
  return 0;
}

分析一波

ok,开始提取字符

写一个脚本

# 给定的字符串和v10数组
aSkfxeeftFGyryg = "sKfxEeft}f{gyrYgthtyhifsjei53UUrrr_t2cdsef66246087138\\0087138"
v10 = [1, 4, 14, 10, 5, 36, 23, 42, 13, 19, 28, 13, 27, 39, 48, 41, 42]
ending = "1024}"

# 构建flag
flag = ""
for index in v10:
    if index < len(aSkfxeeftFGyryg):
        flag += aSkfxeeftFGyryg[index]
    else:
        print(f"Index {index} is out of range for the given string.")
        # 如果需要,可以在这里处理超出范围的情况

# 添加已知的结尾字符
flag += ending

print("Possible flag:", flag)

输出

完成

3.rere000

打开题目附件,发现是python2.x的字节码

  0 LOAD_GLOBAL              0 (raw_input)
              3 LOAD_CONST               1 ('plz input your flag:')
              6 CALL_FUNCTION            1
              9 STORE_FAST               0 (a)

  5          12 LOAD_CONST               2 (0)
             15 BUILD_LIST               1
             18 LOAD_GLOBAL              1 (len)
             21 LOAD_FAST                0 (a)
             24 CALL_FUNCTION            1
             27 BINARY_MULTIPLY     
             28 STORE_FAST               1 (b)

  6          31 LOAD_CONST               3 (68)
             34 LOAD_CONST               4 (5)
             37 LOAD_CONST               5 (164)
             40 LOAD_CONST               6 (100)
             43 LOAD_CONST               7 (231)
             46 LOAD_CONST               8 (228)
             49 LOAD_CONST               9 (175)
             52 LOAD_CONST              10 (36)
             55 LOAD_CONST              11 (142)
             58 LOAD_CONST               9 (175)
             61 LOAD_CONST              12 (78)
             64 LOAD_CONST              13 (206)
             67 LOAD_CONST              14 (4)
             70 LOAD_CONST              15 (45)
             73 LOAD_CONST              11 (142)
             76 LOAD_CONST              16 (174)
             79 LOAD_CONST              17 (238)
             82 LOAD_CONST               5 (164)
             85 LOAD_CONST              15 (45)
             88 LOAD_CONST              18 (14)
             91 LOAD_CONST               9 (175)
             94 LOAD_CONST              19 (46)
             97 LOAD_CONST              17 (238)
            100 LOAD_CONST              15 (45)
            103 LOAD_CONST               5 (164)
            106 LOAD_CONST              16 (174)
            109 LOAD_CONST              10 (36)
            112 LOAD_CONST               9 (175)
            115 LOAD_CONST              15 (45)
            118 LOAD_CONST              20 (196)
            121 LOAD_CONST              20 (196)
            124 LOAD_CONST              12 (78)
            127 LOAD_CONST               9 (175)
            130 LOAD_CONST              10 (36)
            133 LOAD_CONST              19 (46)
            136 LOAD_CONST              17 (238)
            139 LOAD_CONST              20 (196)
            142 LOAD_CONST              13 (206)
            145 LOAD_CONST              12 (78)
            148 LOAD_CONST              12 (78)
            151 LOAD_CONST               3 (68)
            154 LOAD_CONST              21 (39)
            157 BUILD_LIST              42
            160 STORE_FAST               2 (c)

  7         163 LOAD_GLOBAL              1 (len)
            166 LOAD_FAST                0 (a)
            169 CALL_FUNCTION            1
            172 LOAD_CONST              22 (42)
            175 COMPARE_OP               3 (!=)
            178 POP_JUMP_IF_FALSE      190

  8         181 LOAD_CONST              23 ('wrong length')
            184 PRINT_ITEM          
            185 PRINT_NEWLINE       

  9         186 LOAD_CONST               2 (0)
            189 RETURN_VALUE        

 10     >>  190 SETUP_LOOP             117 (to 310)
            193 LOAD_GLOBAL              2 (range)
            196 LOAD_GLOBAL              1 (len)
            199 LOAD_FAST                0 (a)
            202 CALL_FUNCTION            1
            205 CALL_FUNCTION            1
            208 GET_ITER            
        >>  209 FOR_ITER                97 (to 309)
            212 STORE_FAST               3 (i)

 11         215 LOAD_GLOBAL              3 (ord)
            218 LOAD_FAST                0 (a)
            221 LOAD_FAST                3 (i)
            224 BINARY_SUBSCR       
            225 CALL_FUNCTION            1
            228 LOAD_CONST              24 (3)
            231 BINARY_RSHIFT       
            232 LOAD_GLOBAL              3 (ord)
            235 LOAD_FAST                0 (a)
            238 LOAD_FAST                3 (i)
            241 BINARY_SUBSCR       
            242 CALL_FUNCTION            1
            245 LOAD_CONST               4 (5)
            248 BINARY_LSHIFT       
            249 BINARY_XOR          
            250 LOAD_CONST              25 (255)
            253 BINARY_AND          
            254 LOAD_FAST                1 (b)
            257 LOAD_FAST                3 (i)
            260 STORE_SUBSCR        

 12         261 LOAD_FAST                1 (b)
            264 LOAD_FAST                3 (i)
            267 DUP_TOPX                 2
            270 BINARY_SUBSCR       
            271 LOAD_CONST              26 (136)
            274 INPLACE_XOR         
            275 ROT_THREE           
            276 STORE_SUBSCR        

 13         277 LOAD_FAST                1 (b)
            280 LOAD_FAST                3 (i)
            283 BINARY_SUBSCR       
            284 LOAD_FAST                2 (c)
            287 LOAD_FAST                3 (i)
            290 BINARY_SUBSCR       
            291 COMPARE_OP               3 (!=)
            294 POP_JUMP_IF_FALSE      209

 14         297 LOAD_CONST              27 ('wrong')
            300 PRINT_ITEM          
            301 PRINT_NEWLINE       

 15         302 LOAD_CONST               2 (0)
            305 RETURN_VALUE        
            306 JUMP_ABSOLUTE          209
        >>  309 POP_BLOCK           

 16     >>  310 LOAD_CONST              28 ('win')
            313 PRINT_ITEM          
            314 PRINT_NEWLINE       
            315 LOAD_CONST               0 (None)
            318 RETURN_VALUE        

然后转换一下

def decrypt_flag():
    # 加密后的数组
    c = [68, 5, 164, 100, 231, 228, 175, 36, 142, 175, 78, 206, 4, 45, 142, 
         174, 238, 164, 45, 14, 175, 46, 238, 45, 164, 174, 36, 175, 45, 196, 
         196, 78, 175, 36, 46, 238, 196, 206, 78, 78, 68, 39]
    
    flag = ''
    
    for val in c:
        # 第一步:反向异或136
        val ^= 136
        
        # 第二步:尝试所有可能的字符值(0-255)
        # 找到经过原始加密算法后能得到当前值的字符
        for x in range(256):
            if (x >> 3) ^ ((x << 5) & 255) == val:
                flag += chr(x)
                break
    
    return flag

if __name__ == "__main__":
    flag = decrypt_flag()
    print("解密后的flag是:", flag)

输出一下,解密逻辑就是根据原来加密后数组进行变一个个的逆向暴力破解,然后才能得出正确答案

flag{c9e0962d-013a-4953-a1e9-bb69e53b266f}

4.神奇的小按钮(题目有点小问题)

查壳发现无壳进入ida64中查壳字符串

分析可知

那么对flag[15:]进行与7逐字符异或后提交

写个脚本

encrypted = 'KEYmd57e0cad17016b0>?45?f7c>0>4a>1c3a0'
result = encrypted[:15]  # 保持前15位不变

# 对第15位之后的字符进行异或运算
for c in encrypted[15:]:
    result += chr(ord(c) ^ 7)  # 与7异或得到原始字符

print(result)  

输出

KEYmd57e0cad17061e798328a0d9793f96d4f7

然后提交即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的MVCC【学习笔记】

MVCC 事务的隔离级别分为四种&#xff0c;其中Read Committed和Repeatable Read隔离级别&#xff0c;部分实现就是通过MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09; 版本链 版本链是通过undo日志实现的&#xff0c; 事务每次修改…

达梦数据库压力测试报错超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE解决

1.名词解释&#xff1a;达梦数据库中的HJ_BUF_GLOBAL_SIZE是所有哈希连接操作可用的最大哈希缓冲区大小&#xff0c;单位为兆字节&#xff08;MB&#xff09; 2.达梦压测报错&#xff1a; 3.找到达梦数据库安装文件 4.压力测试脚本 import http.client import multiprocessi…

Oracle--SQL性能优化与提升策略

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、导致性能问题的内在原因 系统性能问题的底层原因主要有三个方面&#xff1a; CPU占用率过高导致资源争用和等待内存使用率过高导致内存不足并需…

六个能够白嫖学习资料的网站

一、咖喱君的资源库 地址&#xff1a;https://flowus.cn/galijun/share/de0f6d2f-df17-4075-86ed-ebead0394a77 这是一个学习资料/学习网站分享平台&#xff0c;包含了英语、法语、德语、韩语、日语、泰语等几十种外国语言的学习资料及平台&#xff0c;这个网站的优势就是外语…

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤

以下是在 IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤&#xff1a; 步骤 1&#xff1a;创建 Maven Web 项目 新建项目 File -> New -> Project → 选择 Maven → 勾选 Create from archetype → 选择 maven-archetype-webapp。输入 GroupId&#xff08;如 com.examp…

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段 --本地AI电话机器人 前言 书接上一篇&#xff0c;《手机打电话通话时如何向对方播放录制的IVR引导词声音》中介绍了【蓝牙电话SDK示例App】可以实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能。…

SpringCloud——负载均衡

一.负载均衡 1.问题提出 上一篇文章写了服务注册和服务发现的相关内容。这里再提出一个新问题&#xff0c;如果我给一个服务开了多个端口&#xff0c;这几个端口都可以访问服务。 例如&#xff0c;在上一篇文章的基础上&#xff0c;我又新开了9091和9092端口&#xff0c;现在…

string的基本使用

string的模拟实现 string的基本用法string的遍历&#xff08;三种方式&#xff09;&#xff1a;关于auto&#xff08;自动推导&#xff09;:范围for: 迭代器普通迭代器(可读可改&#xff09;const迭代器&#xff08;可读不可改&#xff09; string细小知识点string的常见接口引…

深入解析Mlivus Cloud核心架构:rootcoord组件的最佳实践与调优指南

作为大禹智库的向量数据库高级研究员,同时也是《向量数据库指南》的作者,我在过去30年的向量数据库和AI应用实战中见证了这项技术的演进与革新。今天,我将以专业视角为您深入剖析Mlivus Cloud的核心组件之一——rootcoord,这个组件在系统架构中扮演着至关重要的角色。如果您…

Python常用的第三方模块之【pymysql库】操作数据库

pymysql是在Python3.x版本中用于连接MySQL服务器的一个实现库&#xff0c;Python2中则是使用musqldb。 PyMySQL 是一个纯 Python 实现的 MySQL 客户端库&#xff0c;它允许我们直接在 Python 中执行 SQL 语句并与 MySQL 数据库进行交互。下面我们将详细介绍如何使用 PyMySQL 进…

【Python数据分析】Pandas模块之pd.concat 函数

💭 写在前面:合并多个数据框,收集各种数据,并将其合并为一个数据框进行分析。本章我们介绍 Pandas 库中数据框合并的函数 —— concat。 0x00 引入:数据框的合并操作 合并多个数据框:收集各种数据,并将其合并为一个数据框进行分析。 下面介绍一些常用的 Pandas 库中数…

C# 综合示例 库存管理系统7 主界面(FormMain)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 图99A-22 主界面窗口设计 主界面是多文档界面容器,需要将窗体属性IsMdiContainer设置为True。关于多文档界面编程请参看教程第7.12节《多文档界面》。 主界面并不提…

系统思考:看清问题背后的结构

组织的挑战&#xff0c;往往不是因为不努力&#xff0c;而是“看不清” 结束了为期两天系统思考课程的第一天&#xff0c;被学员的全情投入深深打动。我们用系统结构图&#xff0c;一步步揭示那些表面看起来“习以为常”的问题&#xff1a; 什么原因跨部门协作总是磕磕绊绊&am…

Langchain_Agent+数据库

本处使用Agent数据库&#xff0c;可以直接执行SQL语句。可以多次循环查询问题 前文通过chain去联系数据库并进行操作&#xff1b; 通过链的不断内嵌组合&#xff0c;生成SQL在执行SQL再返回。 初始化 import os from operator import itemgetterimport bs4 from langchain.ch…

QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码

&#xff08;1&#xff09; &#xff08;2&#xff09;本类的继承关系如下&#xff0c;所以说分隔条属于容器&#xff1a; &#xff08;3&#xff09;本类的属性&#xff1a; &#xff08;4&#xff09; 这是一份 QSplitter 的举例代码&#xff0c;注意其构造函数时候的传参&am…

Huffman(哈夫曼)解/压缩算法实现

一、文件压缩 哈夫曼压缩算法需要对输入的文件&#xff0c;逐字节扫描&#xff0c;统计出不同字节出现的数量&#xff08;频率&#xff09;&#xff0c;根据的得到的频率生成一组叶子节点&#xff0c;这些节点存储着<字节信息>和<频率>,通常需要按频率排序后存储在…

迭代器模式:统一数据遍历方式的设计模式

迭代器模式&#xff1a;统一数据遍历方式的设计模式 一、模式核心&#xff1a;将数据遍历逻辑与数据结构解耦 在软件开发中&#xff0c;不同的数据结构&#xff08;如数组、链表、集合&#xff09;有不同的遍历方式。如果客户端直接依赖这些数据结构的内部实现来遍历元素&…

LeetCode每日一题4.23

题目 问题分析 计算每个数字的数位和&#xff1a;对于从 1 到 n 的每个整数&#xff0c;计算其十进制表示下的数位和。 分组&#xff1a;将数位和相等的数字放到同一个组中。 统计每个组的数字数目&#xff1a;统计每个组中有多少个数字。 找到并列最多的组&#xff1a;返回数…

RunnerGo API性能测试实战与高并发调优

API 性能测试通过模拟不同负载场景&#xff0c;量化评估 API 的响应时间、吞吐量、稳定性、可扩展性等性能指标&#xff0c;关注其在正常、高峰甚至极限负载下的表现。这有助于确保 API 稳定高效地运行&#xff0c;为调用者提供优质服务。 接下来&#xff0c;我们借助 RunnerG…

STM32——相关软件安装

本文是根据江协科技提供的教学视频所写&#xff0c;旨在便于日后复习&#xff0c;同时供学习嵌入式的朋友们参考&#xff0c;文中涉及到的所有资料也均来源于江协科技&#xff08;资料下载&#xff09;。 Keil5 MDK安装 1.安装Keil5 MDK2.安装器件支持包方法一&#xff1a;离线…