强大的正则表达式——Easy


进入题目界面输入难度1后,让我们输入正则表达式(regex):


目前不清楚题目要求,先去下载附件查看情况:

import re
import random

# pip install libscrc
import libscrc

allowed_chars = "0123456789()|*"
max_len = 1000000
num_tests = 300

difficulty = int(input("Enter difficulty level (1~3): "))
if difficulty not in [1, 2, 3]:
    raise ValueError("Invalid difficulty level")

regex_string = input("Enter your regex: ").strip()

if len(regex_string) > max_len:
    raise ValueError("Regex string too long")

if not all(c in allowed_chars for c in regex_string):
    raise ValueError("Invalid character in regex string")

regex = re.compile(regex_string)

for i in range(num_tests):
    expected_result = (i % 2 == 0)
    while True:
        t = random.randint(0, 2**64)  # random number for testing
        if difficulty == 1:
            test_string = str(t)  # decimal
            if (t % 16 == 0) == expected_result:  # mod 16
                break
        elif difficulty == 2:
            test_string = bin(t)[2:]  # binary
            if (t % 13 == 0) == expected_result:  # mod 13
                break
        elif difficulty == 3:
            test_string = str(t)  # decimal
            if (libscrc.gsm3(test_string.encode()) == 0) == expected_result:  # crc
                break
        else:
            raise ValueError("Invalid difficulty level")
    regex_result = bool(regex.fullmatch(test_string))
    if regex_result == expected_result:
        print("Pass", test_string, regex_result, expected_result)
    else:
        print("Fail", test_string, regex_result, expected_result)
        raise RuntimeError("Failed")

print(open(f"flag{difficulty}").read())

丢给ai分析一下:

1、定义常量:

allowed_chars:允许在正则表达式中使用的字符(0123456789()|*)。

max_len:正则表达式的最大长度(1000000个字符)。

num_tests:测试次数(300次)。


2、获取用户输入:

用户输入难度级别(1、2 或 3)。

用户输入正则表达式字符串。


3、验证正则表达式:

检查正则表达式字符串的长度是否超过最大限制。

检查正则表达式字符串中是否包含不允许的字符。

编译正则表达式。


4、生成测试用例并验证:

循环生成 num_tests 次测试用例。

根据难度级别生成不同的测试字符串:

难度 1:生成一个十进制数,检查其是否能被16整除。

难度 2:生成一个二进制数,检查其是否能被13整除。

难度 3:生成一个十进制数,检查其CRC校验码是否为0。

使用正则表达式匹配测试字符串,并与预期结果进行比较。

如果匹配结果与预期结果一致,打印“Pass”;否则,打印“Fail”并抛出异常。


5、读取并显示标志文件:


这下看懂了,难度1就是写一个正则表达式,要求能够匹配以能被16整除的四位数结尾的十进制数,其中正则表达式允许的字符包括数字(0-9)、括号(())、竖线(|)和星号(*),且正则表达式的长度不能超过最大限制(1000000字符),继续让AI写个python代码来生成一个满足要求的正则表达式:

def generate_divisible_by_16_regex():
    # 生成一个正则表达式,匹配以能被16整除的四位数结尾的十进制数
    string = ""
    for i in range(9999, -1, -1):
        if i % 16 == 0:
            string += f"{i:04d}|"
    
    # 去掉最后一个多余的竖线
    string = string[:-1]
    
    # 构建正则表达式
    regex = f"(0|1|2|3|4|5|6|7|8|9)*({string})"
    
    # 检查正则表达式的长度
    if len(regex) > 1000000:
        raise ValueError("生成的正则表达式超过了1000000字符的最大限制。")
    
    return regex

# 生成正则表达式
divisible_by_16_regex = generate_divisible_by_16_regex()
print(f"生成的正则表达式: {divisible_by_16_regex}")

得到的正则表达式:

(0|1|2|3|4|5|6|7|8|9)*(9984|9968|9952|9936|9920|9904|9888|9872|9856|9840|9824|9808|9792|9776|9760|9744|9728|9712|9696|9680|9664|9648|9632|9616|9600|9584|9568|9552|9536|9520|9504|9488|9472|9456|9440|9424|9408|9392|9376|9360|9344|9328|9312|9296|9280|9264|9248|9232|9216|9200|9184|9168|9152|9136|9120|9104|9088|9072|9056|9040|9024|9008|8992|8976|8960|8944|8928|8912|8896|8880|8864|8848|8832|8816|8800|8784|8768|8752|8736|8720|8704|8688|8672|8656|8640|8624|8608|8592|8576|8560|8544|8528|8512|8496|8480|8464|8448|8432|8416|8400|8384|8368|8352|8336|8320|8304|8288|8272|8256|8240|8224|8208|8192|8176|8160|8144|8128|8112|8096|8080|8064|8048|8032|8016|8000|7984|7968|7952|7936|7920|7904|7888|7872|7856|7840|7824|7808|7792|7776|7760|7744|7728|7712|7696|7680|7664|7648|7632|7616|7600|7584|7568|7552|7536|7520|7504|7488|7472|7456|7440|7424|7408|7392|7376|7360|7344|7328|7312|7296|7280|7264|7248|7232|7216|7200|7184|7168|7152|7136|7120|7104|7088|7072|7056|7040|7024|7008|6992|6976|6960|6944|6928|6912|6896|6880|6864|6848|6832|6816|6800|6784|6768|6752|6736|6720|6704|6688|6672|6656|6640|6624|6608|6592|6576|6560|6544|6528|6512|6496|6480|6464|6448|6432|6416|6400|6384|6368|6352|6336|6320|6304|6288|6272|6256|6240|6224|6208|6192|6176|6160|6144|6128|6112|6096|6080|6064|6048|6032|6016|6000|5984|5968|5952|5936|5920|5904|5888|5872|5856|5840|5824|5808|5792|5776|5760|5744|5728|5712|5696|5680|5664|5648|5632|5616|5600|5584|5568|5552|5536|5520|5504|5488|5472|5456|5440|5424|5408|5392|5376|5360|5344|5328|5312|5296|5280|5264|5248|5232|5216|5200|5184|5168|5152|5136|5120|5104|5088|5072|5056|5040|5024|5008|4992|4976|4960|4944|4928|4912|4896|4880|4864|4848|4832|4816|4800|4784|4768|4752|4736|4720|4704|4688|4672|4656|4640|4624|4608|4592|4576|4560|4544|4528|4512|4496|4480|4464|4448|4432|4416|4400|4384|4368|4352|4336|4320|4304|4288|4272|4256|4240|4224|4208|4192|4176|4160|4144|4128|4112|4096|4080|4064|4048|4032|4016|4000|3984|3968|3952|3936|3920|3904|3888|3872|3856|3840|3824|3808|3792|3776|3760|3744|3728|3712|3696|3680|3664|3648|3632|3616|3600|3584|3568|3552|3536|3520|3504|3488|3472|3456|3440|3424|3408|3392|3376|3360|3344|3328|3312|3296|3280|3264|3248|3232|3216|3200|3184|3168|3152|3136|3120|3104|3088|3072|3056|3040|3024|3008|2992|2976|2960|2944|2928|2912|2896|2880|2864|2848|2832|2816|2800|2784|2768|2752|2736|2720|2704|2688|2672|2656|2640|2624|2608|2592|2576|2560|2544|2528|2512|2496|2480|2464|2448|2432|2416|2400|2384|2368|2352|2336|2320|2304|2288|2272|2256|2240|2224|2208|2192|2176|2160|2144|2128|2112|2096|2080|2064|2048|2032|2016|2000|1984|1968|1952|1936|1920|1904|1888|1872|1856|1840|1824|1808|1792|1776|1760|1744|1728|1712|1696|1680|1664|1648|1632|1616|1600|1584|1568|1552|1536|1520|1504|1488|1472|1456|1440|1424|1408|1392|1376|1360|1344|1328|1312|1296|1280|1264|1248|1232|1216|1200|1184|1168|1152|1136|1120|1104|1088|1072|1056|1040|1024|1008|0992|0976|0960|0944|0928|0912|0896|0880|0864|0848|0832|0816|0800|0784|0768|0752|0736|0720|0704|0688|0672|0656|0640|0624|0608|0592|0576|0560|0544|0528|0512|0496|0480|0464|0448|0432|0416|0400|0384|0368|0352|0336|0320|0304|0288|0272|0256|0240|0224|0208|0192|0176|0160|0144|0128|0112|0096|0080|0064|0048|0032|0016|0000)


输入难度1再输入得到的正则表达式:

成功得到flag

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

【安卓恶意软件检测-论文】DroidEvoler:自我进化的 Android 恶意软件检测系统

DroidEvolver:自我进化的 Android 恶意软件检测系统 摘要 鉴于Android框架的频繁变化和Android恶意软件的不断演变,随着时间的推移以有效且可扩展的方式检测恶意软件具有挑战性。为了应对这一挑战,我们提出了DroidEvolver,这是一…

Vulnhub靶场 Billu_b0x 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件包含2. SQL注入3. 文件上传4. 反弹shell5. 提权(思路1:ssh)6. 提权(思路2:内核)7. 补充 0x04 总结 0x00 准备 下载链接&#…

LabVIEW弧焊参数测控系统

在现代制造业中,焊接技术作为关键的生产工艺之一,其质量直接影响到最终产品的性能与稳定性。焊接过程中,电流、电压等焊接参数的精确控制是保证焊接质量的核心。基于LabVIEW开发的弧焊参数测控系统,通过实时监控和控制焊接过程中关…

CentOS网络配置

上一篇文章:VMware Workstation安装Centos系统 在CentOS系统中进行网络配置是确保系统能够顺畅接入网络的重要步骤。本文将详细介绍如何配置静态IP地址、网关、DNS等关键网络参数,以帮助需要的人快速掌握CentOS网络配置的基本方法和技巧。通过遵循本文的…

低速接口项目之串口Uart开发(一)——串口UART

本节目录 一、串口UART 二、串口协议 三、串口硬件 四、往期文章链接本节内容 一、串口UART 串口UART,通用异步收发传输器(Universal Asynchronnous Receiver / Transmitter),一种异步收发传输器,全双工传输。数据发送时,将并行…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17,本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

SQL 外连接

1 外连接 外连接是一种用于结合两个或多个表的方式,返回至少一个表中的所有记录。 左外连接 LEFT JOIN,左表为驱动表,右表为从表。返回驱动表的所有记录以及从表中的匹配记录。如果从表没有匹配,则结果中从表的部分为NULL。 右…

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因,我的东西最终需要跑在amd64上,但是因为mac的架构师arm64,所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构: docker inspect 8135f475e221 | grep Arc…

SAP+Internet主题HTML样式选择

SAP目前只支持三种HTML样式选择: 样式一 背景色:深色,蓝 特点:适中型排列,与SAP界面排列相同,富含UI特征,整齐美观 URL地址:http://cn1000-sap-01.sc.com:8000/sap/bc/gui/sap/it…

使用 Qt 实现基于海康相机的图像采集和显示系统(不使用外部视觉库,如Halcon\OpenCv)[工程源码联系博主索要]

本文将梳理一个不借助外部视觉库(如 OpenCV/Halcon)的海康相机图像采集和显示 Demo。该程序直接使用 Qt GUI 来显示图像。通过海康 MVS SDK 实现相机的连接、参数设置、图像采集和异常处理等功能,并通过 Qt 界面展示操作结果。 1. 功能概述 …

C# 异步Task异常处理和堆栈追踪显示

Task的问题 在C#中异步Task是一个很方便的语法,经常用在处理异步,例如需要下载等待等方法中,不用函数跳转,代码阅读性大大提高,深受大家喜欢。 但是有时候发现我们的异步函数可能出现了报错,但是异常又没…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大,采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要: 警告的定义:警告是编译器用来告诉你某些地方可能存在问题,尽管编译器不强制要求你修复…

解析煤矿一张图

解析煤矿一张图 ​ 煤矿一张图是指通过数字化、智能化技术将煤矿的各项信息、数据和资源进行集中展示和管理,形成一个综合的可视化平台。这一平台将矿井的地理信息、设备状态、人员位置、安全生产、环境监测等信息整合成一个统一的“图形”,以便于管理者…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1: # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2,依次取出value for value in dict.values():print(value)# 遍历3:依次取出key,value …

【伪造检测】Noise Based Deepfake Detection via Multi-Head Relative-Interaction

一、研究动机 [!note] 动机:目前基于噪声的检测是利用Photo Response Non-Uniformity (PRNU)实现的,这是一种由于相机感光传感器而造成的缺陷噪声,主要用图像的源识别,在伪造检测的任务中并没有很好的表现。因此在文中提出了一种基…

【eNSP】企业网络架构实验——vlan间的路由通信(三)

VLAN间的路由是指不同VLAN之间的通信,通常VLAN是用来分割网络流量和提高网络安全性的。 一、VLAN 1. 什么是VLAN? VLAN,全称是虚拟局域网(Virtual Local Area Network),是一种将物理局域网(LA…

github 模型下载方法

github 模型权重,如果是项目下载,pth文件有时下载后只有1kb 本人测试ok下载方法: 点击view raw,然后可以下载模型权重文件了。

【微软:多模态基础模型】(2)视觉理解

欢迎关注【youcans的AGI学习笔记】原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微软:多模态基础模型】(3)视觉生成 【微…