3.26周赛


abbrlink: 0

3.26周赛

MISC

里在干什莫?

用010打开,发现什么都不是
在这里插入图片描述
但结合提示,反了,把16进制数据倒叙
在这里插入图片描述
发现是zip文件,然后将其保持位zip文件,解压得到flag.txt
在这里插入图片描述
将其倒序得到flag

xor

打开文件发现两个文本,其中一个是ascii扩展码
ASCII扩展码
在这里插入图片描述
在这里插入图片描述
已知最后应该是flag{}形式,所以jaks与key.txt中前四个异或结果为flag,直接异或发现结果不为flag。
那么中间需要处理然后再异或。异或是对称的,可以让flag与jaks进行异或,观察其结果的二进制与key的二进制,判断怎么处理的。从图中比较很明显是进行按位取反。
在这里插入图片描述
用脚本先将key.txt取反,然后与flag.txt异或。最终得到flag

key = 'jaks{qwertyui-opas-dfgh-jklz-xcvbnmqwertu}'
flag = 'óòõëÿ¾»®¿íâë÷ÿñë­îÿ¨ û ÿ¤­¥±ÿ¿ú½®÷öﺮº²¼ÿ'
data = [0xff ^ ord(i) for i in flag]  # 0xff二进制为11111111,与其异或即可完成按位取反
for i in range(len(data)):
    print(chr(ord(key[i])^data[i]),end='')

在这里插入图片描述

Revrse

re2

解压,查壳发现有壳,用upx脱壳
在这里插入图片描述
用IDA打开,进入反汇编
点开date,可以看到一串字符,大概可以知道通过v4中字符的ascii对应date中的字符,得到flag
在这里插入图片描述
将v4中字符转为ASCII码
在这里插入图片描述
用py脚本得到flag
在这里插入图片描述
在这里插入图片描述

来玩贪吃蛇吧

解压查壳,发现没有壳,是32位的
在这里插入图片描述
进行反汇编,可以看到主菜单,获得flag需要分数到60分
在这里插入图片描述

进入主函数,发现分数是v18-4,结合贪吃蛇的初始长度可以知道,初始分数为4,而不是0。
在这里插入图片描述
用ce修改分数,首次扫描,数值为4,然后控制蛇吃几分,然后扫描数值增加了几,得到唯一的一个地址即为分数的地址,修改数值(数值大于等于64)即可得到flag
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

CRYPTO

base?

放进010,得到文本
在这里插入图片描述
是base64换表加密,在网上找到py脚本,运行得到flag

import base64

dict={0: 'J', 1: 'K', 2: 'L', 3: 'x', 4: 'N', 5: 'O', 6: 'M', 7: 'y', 8: 'U', 9: 'z', 10: 'V', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '9', 21: '8', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'c', 27: 'b', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h',33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'S', 50: 'R', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}

a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='    #标准表

c='9nSTaPCu8MimQoamdXmg9qGRIPsXa8wjIQCmQTIngF=='

ds=''  #把dict转换成字符串方便处理
for i in range(65):
    ds+=dict[i]

l=[]
for i in range(len(c)):
    l.append(ds.index(c[i]))  #无论换不换表,base64变换本身产生的6位二进制数对应的十进制数是不变的,这里就是找到密文c的每个字符在dict表中键值

#print(l)  #l中存的是索引值(下标数字)

m1=''
for ll in l:
    m1+=a[ll]  #找到l中所存的每个数字在标准的base64加密表中所对应的字符
print(m1)  #m1是标准base64表编码结果

m2=base64.b64decode(m1)  #直接调用函数恢复出明文
print(m2)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值