首页 > 其他分享 >[SWPUCTF 2021 新生赛]简简单单的逻辑

[SWPUCTF 2021 新生赛]简简单单的逻辑

时间:2024-06-12 16:56:23浏览次数:28  
标签:SWPUCTF list 简简单单 list2 flag 2021 key 0xf result

查看源代码,大概意思就是已知result反推flag

flag = 'xxxxxxxxxxxxxxxxxx'
list = [47, 138, 127, 57, 117, 188, 51, 143, 17, 84, 42, 135, 76, 105, 28, 169, 25]
result = ''
for i in range(len(list)):
    key = (list[i]>>4)+((list[i] & 0xf)<<4)
    result += str(hex(ord(flag[i])^key))[2:].zfill(2)
print(result)
# result=bcfba4d0038d48bd4b00f82796d393dfec

观察代码可以发现,在每一轮循环中keyresult所对应的字符都是已知的但是flag的字符是未知的,而且对于每一个i,都有flag[i]^key=result[i]

注:若A、C已知,B未知且A^B=C,则B=A^C,即flag[i]=key^result[i]

for循环中

遍历 list 的每个元素。

  • key = (list[i]>>4)+((list[i] & 0xf)<<4):这行代码对 list[i] 进行了位操作。
    • list[i]>>4:将 list[i] 右移 4 位。
    • list[i] & 0xf:将 list[i] 与 15(二进制中的 00001111)进行按位与操作,从而得到 list[i] 的低 4 位。
    • ((list[i] & 0xf)<<4):将上一步得到的低 4 位左移 4 位。
    • 将两部分相加,得到 key
  • result += str(hex(ord(flag[i])^key))[2:].zfill(2):这行代码执行了几个操作。
    • ord(flag[i]):获取 flag 字符串中第 i 个字符的 ASCII 值。
    • ord(flag[i])^key:将上述 ASCII 值与 key 进行按位异或操作。
    • hex(...):将异或结果转换为十六进制字符串。
    • str(hex(...))[2:]:从十六进制字符串中去除开头的 '0x'
    • .zfill(2):如果结果字符串长度小于 2,则在前面填充 '0' 以确保长度为 2。
    • 将结果添加到 result 字符串中。

构造payload

result='bcfba4d0038d48bd4b00f82796d393dfec'
list = [47, 138, 127, 57, 117, 188, 51, 143, 17, 84, 42, 135, 76, 105, 28, 169, 25]
list2=[]
flag=[]
for i in range(0,34,2):   #i的步长为2
    list2.append(result[i:i+2])    #将result两两分为一组依次放入list2中
print(list2)            #打印list2
for i in range(17):
    if list2[i].startswith('0'):      #判断list2中的每个元素是否是以0开头,如果是则说明这个0是之前补上的
        list2[i]=list2[i][1:]         #选择字符串第一个字符及其后面的部分,在这里去掉即为去掉开头的0
print(list2)
for i in range(17):
    list2[i]=bin(int(list2[i],16))[2:]       #转换为16进制
    list2[i]=list2[i].zfill(8)               #不足8位的在前面补0,补足8位
print(list2)
for i in range(17):
    key = bin((list[i] >> 4) + ((list[i] & 0xf) << 4))[2:]     #这里的key与源代码中的key相同
    key=key.zfill(8)                                           #不足8位的在前面补0,补足8位
    flag.append(format(int(key, 2) ^ int(list2[i], 2), '08b'))   #异或求得flag中的每一个字符的ascii码对应的二进制数值
    print(flag[i],end=",")

print('\n')
for i in range(17):
    flag[i]=int(flag[i],2)   #将flag中的每个元素(二进制字符串)转换为整数
finall_flag= ''.join([chr(i) for i in flag])        #将flag中的每个整数转换为对应的ASCII字符
print(finall_flag)                                  #输出flag

得到flag

['bc', 'fb', 'a4', 'd0', '03', '8d', '48', 'bd', '4b', '00', 'f8', '27', '96', 'd3', '93', 'df', 'ec']
['bc', 'fb', 'a4', 'd0', '3', '8d', '48', 'bd', '4b', '0', 'f8', '27', '96', 'd3', '93', 'df', 'ec']
['10111100', '11111011', '10100100', '11010000', '00000011', '10001101', '01001000', '10111101', '01001011', '00000000', '11111000', '00100111', '10010110', '11010011', '10010011', '11011111', '11101100']
01001110,01010011,01010011,01000011,01010100,01000110,01111011,01000101,01011010,01000101,01011010,01011111,01010010,01000101,01010010,01000101,01111101,

NSSCTF{EZEZ_RERE}

标签:SWPUCTF,list,简简单单,list2,flag,2021,key,0xf,result
From: https://www.cnblogs.com/evo-lution/p/18244258

相关文章

  • 数据分享 I 1970-2021年各区县碳排放总量
    基本信息.数据名称:  1970-2021年各区县碳排放总量数据格式: Shp+excel数据几何类型: 面数据坐标系:  WGS84数据来源:网络公开数据......
  • CorelDRAW2021破解精简版,平面设计神器来袭!
    CorelDRAW平面设计软件2021精简版,是一款让设计师们为之疯狂的工具!作为一名专业的软件评测师,我对它的功能和性能进行了全面的了解和体验。让我来为大家详细介绍一下这款软件的新特性和对设计师工作流程的影响吧!「CorelDRAW全系列汉化版下载」,来自夸克网盘分享链接:抓紧保存以防......
  • 超级实用的设计工具CorelDRAW平面设计软件2021精简版下载
    嘿,小伙伴们!今天我要给大家种草一款超级实用的设计工具——CorelDRAW平面设计软件2021精简版!✨这款软件不仅功能强大,而且操作简便,简直是设计师和学生们的福音啊!......
  • 2021/6/8 日常练习
    一、实验目的1、基本要求掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。 二、实验内容(1)求解无约束优化问题:;(2)终止准则取;(3)完成Newton法(牛顿法)的MATLAB编程、调试......
  • window下的随机数与随机数种子——[MTCTF 2021]Random
    题目 Die  IDA main函数 dword_1B336C 与 v7 ,是两个记录循环次数的计数器红框:加密逻辑,很简单绿框:成功条件,需要满足两个,第一个是 dword_1B336C==43 ,当 dword_1B336C 不等于43的时候进入else,然后需要满足条件 input[v9]==key[v8] 与 v7==42  key......
  • Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读
    paper:PyramidVisionTransformer:AVersatileBackboneforDensePredictionwithoutConvolutionsofficialimplementation:GitHub-whai362/PVT:OfficialimplementationofPVTseries存在的问题现有的VisionTransformer(ViT)主要设计用于图像分类任务,难以直接用......
  • 【机器学习】TensorFlow 202107090086
    【源代码】importtensorflowastfl2_reg=tf.keras.regularizers.l2(0.1)#设置模型model=tf.keras.models.Sequential([tf.keras.layers.Dense(30,activation='relu',kernel_initializer='he_normal',kernel_regula......
  • [COCI2020-2021#2] Sjekira 题解
    题目大意:把一棵树完全分解,每次分解一条边的代价是这条边连接的两个连通块的最大点权之和,求最小代价。逆序模拟,既然题目要求将树完全分解,那我们就每次逆序连接当前权值最小的两个点,也就是贪心的思路。尝试将贪心的值写成一个表达式:$$\sum_{i=1}^na_i+\sum_{(u,v)\inE}\max(a......
  • LeViT(ICCV 2021)原理与代码解析
    paper:LeViT:aVisionTransformerinConvNet'sClothingforFasterInferenceofficialimplementation:https://github.com/facebookresearch/LeViTthird-partyimplementation:https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/levit.......
  • 打卡信奥刷题(52)用Scratch图形化工具信奥P7909 [普及组] [CSP-J 2021] 分糖果
    [CSP-J2021]分糖果题目背景红太阳幼儿园的小朋友们开始分糖果啦!题目描述红太阳幼儿园有nnn个小朋友,你是其中之一。保证......