【CTF-编程-NC】罗马数字和整数的转换
题目罗马数字转整数欢迎来到编程世界你将连接到一个交互式服务。在每一轮中服务端会向你提供一个罗马数字你的任务是将其正确转换为对应的整数。请使用NC连接分数连接测试编写代码#!/usr/bin/env python3# -*- coding: utf-8 -*- CTF 解题脚本 - 罗马数字转整数自动解题器 该脚本用于自动连接 CTF 挑战服务器接收罗马数字转换题目计算答案并发送回服务器 直到获得 flag 或连接断开。 依赖库: - socket: 用于建立 TCP 连接 - re: 用于正则表达式匹配罗马数字 - time: 用于添加延迟防止请求过快 使用方法: 1. 确保脚本具有执行权限: chmod x exploit.py 2. 直接运行脚本: python3 exploit.py 注意事项: - 请确保网络连接正常 - 服务器地址和端口可能需要根据实际情况修改 - 脚本设置了 30 秒超时可根据需要调整 importsocket# 导入 socket 库用于网络通信importre# 导入正则表达式库用于解析罗马数字importtime# 导入时间库用于添加延迟defroman_to_int(roman): 将罗马数字字符串转换为整数的核心函数 参数: roman (str): 输入的罗马数字字符串仅包含大写字母 IVXLCDM 返回: int: 转换后的整数值 罗马数字转换规则: 1. 基本字符对应的值: I 1, V 5, X 10, L 50, C 100, D 500, M 1000 2. 组合规则: - 当较小的数字出现在较大的数字左边时需要减去该值如 IV 4, IX 9, XL 40 - 当较小的数字出现在较大的数字右边时需要加上该值如 VI 6, XI 11, LX 60 3. 限制规则: - 相同的数字最多连续出现三次如 III 3, XXX 30 - 左减不能跨越一个位数如 99 是 XCIX不是 IC 算法原理: 从右到左遍历罗马数字字符串维护一个前一个字符的值: - 如果当前字符值小于前一个字符值说明需要减去当前值 - 否则加上当前值 这种方法可以高效处理所有罗马数字组合包括特殊的左减情况 # 定义罗马数字字符到整数的映射字典roman_map{I:1,# 基本字符: I 1V:5,# 基本字符: V 5X:10,# 基本字符: X 10L:50,# 基本字符: L 50C:100,# 基本字符: C 100D:500,# 基本字符: D 500M:1000# 基本字符: M 1000}total0# 初始化总和为 0prev_value0# 初始化前一个字符的值为 0# 从右到左遍历罗马数字字符串forcharinreversed(roman):# 获取当前字符对应的整数值valueroman_map[char]# 根据规则判断是加还是减ifvalueprev_value:total-value# 当前值小于前一个值需要减去当前值else:totalvalue# 当前值大于等于前一个值需要加上当前值# 更新前一个字符的值用于下一次循环比较prev_valuevaluereturntotal# 返回转换后的整数值defsolve(): 主解题函数负责处理与 CTF 服务器的通信和解题流程 详细流程: 1. 配置服务器连接信息主机名和端口 2. 创建 TCP socket 并设置超时 3. 连接到指定的 CTF 服务器 4. 进入主循环持续接收服务器数据: a. 接收服务器发送的数据并解码 b. 检查是否接收到 flag 或连接断开 c. 检查是否需要退出收到 Bye 消息 d. 如果收到输入提示符 则解析题目: i. 分割接收到的数据为多行 ii. 查找包含 Round 的行表示新的一轮题目 iii. 获取下一行作为罗马数字行 iv. 使用正则表达式提取罗马数字 v. 调用 roman_to_int 函数计算答案 vi. 将答案发送回服务器 vii. 清空缓冲区准备下一轮 5. 异常处理捕获并打印所有异常 6. 无论是否发生异常都确保关闭 socket 连接 # 服务器配置信息hostchallenge.qsnctf.com# CTF 服务器主机名port32813# CTF 服务器端口号# 创建 TCP socket 对象# socket.AF_INET: 使用 IPv4 地址# socket.SOCK_STREAM: 使用 TCP 协议socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 设置 socket 超时时间为 30 秒防止无限等待sock.settimeout(30)# 连接到 CTF 服务器sock.connect((host,port))try:# 初始化缓冲区用于存储接收到的数据buffer# 主循环持续处理服务器数据whileTrue:# 接收服务器数据最多接收 4096 字节# decode(utf-8, errorsignore): 使用 UTF-8 解码忽略解码错误datasock.recv(4096).decode(utf-8,errorsignore)# 如果没有接收到数据说明连接已断开退出循环ifnotdata:break# 将新接收到的数据添加到缓冲区bufferdata# 打印接收到的数据使用 repr() 显示不可见字符print(Received:,repr(data))# 检查缓冲区中是否包含 flag 或 qsnctf不区分大小写ifflaginbuffer.lower()orqsnctfinbuffer.lower():print(Found flag!)# 找到 flag打印提示print(buffer)# 打印完整的缓冲区内容break# 退出循环# 检查是否收到退出消息ifByeinbufferorbyeinbuffer:print(buffer)# 打印退出消息break# 退出循环# 检查是否收到输入提示符 ifinbuffer:# 将缓冲区按换行符分割为多行linesbuffer.split(\n)# 遍历每一行查找包含 Round 的行表示新的一轮forlineinlines:ifRoundinline:# 获取包含 Round 的行在列表中的索引idxlines.index(line)# 检查下一行是否存在ifidx1len(lines):# 获取下一行并去除首尾空白字符roman_linelines[idx1].strip()# 使用正则表达式匹配罗马数字仅包含 IVXLCDM 字符matchre.search(r[IVXLCDM],roman_line)ifmatch:# 提取匹配到的罗马数字romanmatch.group()print(Roman numeral:,roman)# 打印提取到的罗马数字# 调用罗马数字转换函数计算答案resultroman_to_int(roman)print(Answer:,result)# 打印计算结果# 将答案转换为字符串并添加换行符然后编码为字节发送sock.send((str(result)\n).encode(utf-8))# 清空缓冲区准备接收下一轮数据buffer# 添加 0.5 秒延迟防止请求过快导致服务器拒绝time.sleep(0.5)break# 跳出当前循环处理下一轮数据exceptExceptionase:# 捕获并打印所有异常print(Error:,e)finally:# 无论是否发生异常都确保关闭 socket 连接sock.close()# 主程序入口if__name____main__:# 调用主解题函数solve()运行结果Received:You need to convert the Roman numerals I provided to integersReceived:\nRound 1:\nMMDCCCIX\n Roman numeral: MMDCCCIX Answer:2809Received:Correct!\n\nRound 2:\nMMMCXLIV\n Roman numeral: MMMCXLIV Answer:3144Received:Correct!\n\nRound 3:\nCMXCIII\n Roman numeral: CMXCIII Answer:993Received:Correct!\n\nRound 4:\nMCDLXI\n Answer:528......Received:Correct!\n\nRound 97:\nMMCDXLIV\n Roman numeral: MMCDXLIV Answer:2444Received:Correct!\n\nRound 98:\nMMMLXX\n Roman numeral: MMMLXX Answer:3070Received:Correct!\n\nRound 99:\nMMDCXII\n Roman numeral: MMDCXII Answer:2612Received:Correct!\n\nRound 100:\nDCCXXXII\n Roman numeral: DCCXXXII Answer:732Received:Correct!\n\nCongratulations! Here is your flag:\nqsnctf{e1dc67cb2e7b4cf6a6247939ce2acdc7}\nFound flag!Correct!Congratulations!Here is your flag: qsnctf{e1dc67cb2e7b4cf6a6247939ce2acdc7}

相关新闻

Ghidra逆向工程:系统化恢复函数签名与类型信息的方法论

Ghidra逆向工程:系统化恢复函数签名与类型信息的方法论

1. 项目概述:当Ghidra的“魔法”失灵时如果你和我一样,长期混迹于逆向工程和安全分析领域,那么Ghidra绝对是你工具箱里不可或缺的瑞士军刀。作为NSA开源的神器,它免费、强大,集成了反汇编、反编译、脚本化分析等一系列…

2026/7/28 2:13:29 阅读更多 →
3步破解电子课本获取难题:智能解析工具深度指南

3步破解电子课本获取难题:智能解析工具深度指南

3步破解电子课本获取难题:智能解析工具深度指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址: http…

2026/7/28 2:13:29 阅读更多 →
SpringBoot智慧乡村旅游平台架构设计与实践

SpringBoot智慧乡村旅游平台架构设计与实践

1. 项目背景与核心价值乡村旅游作为乡村振兴战略的重要抓手,正经历从传统观光向智慧化服务的转型。这个基于SpringBoot的智慧乡村旅游服务平台,本质上是一个农旅融合的数字化解决方案,旨在解决三个行业痛点:信息孤岛问题&#xff…

2026/7/28 2:13:29 阅读更多 →

最新新闻

机器人竞赛执行机构选型实战:步进与直流电机深度解析及驱动电路设计

机器人竞赛执行机构选型实战:步进与直流电机深度解析及驱动电路设计

1. 项目概述:从“能动”到“动好”的跨越搞机器人大赛,尤其是像睿抗这类综合性的开发者大赛,最让人头疼的往往不是算法和代码,而是让机器人“动起来”这个最基础、也最要命的问题。上篇我们聊了动力系统的整体框架和能源部分&…

2026/7/28 2:32:36 阅读更多 →
TileLang与TVM:基于DSL的GPU内核自动生成与优化实践

TileLang与TVM:基于DSL的GPU内核自动生成与优化实践

在实际深度学习和高性能计算项目中,直接编写 CUDA 内核来优化 GPU 计算既复杂又容易出错。TileLang 作为一种基于 Python 的高级领域特定语言(DSL),允许开发者使用更直观的语法描述计算和数据分块(Tiling)策…

2026/7/28 2:32:36 阅读更多 →
HarmonyOS应用开发实战:猫猫大作战-setInterval 定时器、100ms 物理周期、主循环与 ArkUI 帧的协同、暂停时短路返回

HarmonyOS应用开发实战:猫猫大作战-setInterval 定时器、100ms 物理周期、主循环与 ArkUI 帧的协同、暂停时短路返回

前言 游戏和静态 UI 的本质区别是——UI 是事件驱动的(用户点击才更新),游戏是时间驱动的(每帧更新物理,无论用户是否交互)。ArkUI 没有内置「游戏循环」,需要开发者用 setInterval 自己搭主循…

2026/7/28 2:32:36 阅读更多 →
魔兽争霸3终极兼容性修复工具:WarcraftHelper让你的经典游戏焕然新生

魔兽争霸3终极兼容性修复工具:WarcraftHelper让你的经典游戏焕然新生

魔兽争霸3终极兼容性修复工具:WarcraftHelper让你的经典游戏焕然新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现…

2026/7/28 2:32:36 阅读更多 →
如何让数字PDF拥有真实扫描质感:3分钟快速解决方案

如何让数字PDF拥有真实扫描质感:3分钟快速解决方案

如何让数字PDF拥有真实扫描质感:3分钟快速解决方案 【免费下载链接】lookscanned.io 📚 LookScanned.io - Make your PDFs look scanned 项目地址: https://gitcode.com/gh_mirrors/lo/lookscanned.io 你是否曾为数字生成的PDF文档太过"完美…

2026/7/28 2:32:35 阅读更多 →
视觉SLAM核心技术实战:从稀疏特征到稠密建图的完整工程方案

视觉SLAM核心技术实战:从稀疏特征到稠密建图的完整工程方案

视觉SLAM核心技术实战:从稀疏特征到稠密建图的完整工程方案 【免费下载链接】slambook2 edition 2 of the slambook 项目地址: https://gitcode.com/gh_mirrors/sl/slambook2 在自动驾驶、机器人导航和增强现实等前沿技术领域,如何让机器仅凭视觉…

2026/7/28 2:31:35 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻