BUU-crypto-刷题记录26

EasyProgram

题目

Eeemmm…this is a easy game.Have fun~

file

 簭+"烸?K?镝?灸註? z?Q碉=??

附件

get buf unsign s[256]
get buf t[256]
we have key:whoami
we have flag:????????????????????????????????

for i:0 to 256
    set s[i]:i

for i:0 to 256
    set t[i]:key[(i)mod(key.lenth)]

for i:0 to 256
    set j:(j+s[i]+t[i])mod(256)
        swap:s[i],s[j]

for m:0 to 38
    set i:(i + 1)mod(256)
    set j:(j + S[i])mod(256)
    swap:s[i],s[j]
    set x:(s[i] + (s[j]mod(256))mod(256))
    set flag[m]:flag[m]^s[x]

fprint flagx to file

解题

读附件里类似程序的东西,
最后一行将flagx写入file,所以对应file里的应该就是flagx

尝试使用十六进制,则flagx为

flagx = ' 簭+"烸?K?镝?灸註? z?Q碉=??'

解密代码:

s=[]
t=[]
flag = '????????????????????????????????'
key = 'whoami'

flagx = [0x20,0xe7,0xb0,0xad,0x11,0x2b,0x22,0xe7,0x83,0xb8,0x3f,0xee,0x81,0xb4,0x4b,0x3f,0xe9,0x95,0x9d,0x3f,0xe7,0x81,0xb8,0xe8,0xa8,0xbb,0x03,0x3f,0x20,0x7a,0x3f,0x51,0xee,0x98,0x99,0xe7,0xa2,0x89,0x3d,0x3f,0x3f]


for i in range(257):
    s.append(i)

for i in range(257):
    t.append(key[i % len(key)])
j=0
for i in range(257):
    j = (j+s[i]+ord(t[i])) % (256)
    s[j],s[i] = s[i],s[j]
i=0
j=0
for m in range(38):
    i = (i + 1) % (256)
    j = (j + s[i]) % (256)
    s[j],s[i] = s[i],s[j]
    x = (s[i] + (s[j]% 256)) % 256
    print(chr(flagx[m] ^ s[x]),end='')

运行出:F1^ÛAo îákòPFã}F¼¹VgœŽ‰ ‘^ýcNÁ õGõ

???

尝试将file直接用十六进制打开,则
在这里插入图片描述

flagx=[0x00,0xBA,0x8F,0x11,0x2B,0x22,0x9F,0x51,0xA1,0x2F,0xAB,0xB7,0x4B,0xD7,0x3F,0xEF,0xE1,0xB5,0x13,0xBE,0xC4,0xD4,0x5D,0x03,0xD9,0x00,0x7A,0xCA,0x1D,0x51,0xA4,0x73,0xB5,0xEF,0x3D,0x9B,0x31,0xB3]

改完之后,运行得到:flag{f238yu28323uf28u2yef2ud8uf289euf}

答案

flag{f238yu28323uf28u2yef2ud8uf289euf}

[AFCTF2018]BASE

题目
在这里插入图片描述
解题

已知是base加密,但不知道是base16还是base32还是base64

而且问题在于密文太长,没办法往在线解密上,那就还是程序解决吧


import base64
file = open("flag_encode.txt",'r')
file2 = open("flag.txt",'w') 
flag = file.read()
while(1):
    try:
        flag = base64.b32decode(base).decode()
    except:
        try:
            flag = base64.b64decode(base).decode()
        except:
            try:
                flag = base64.b16decode(base).decode()
            except:
                file2.write(base)
                break

自己没看出来问题,但是啥也运行不出来

辗转得到了正确解题程序

#Python3
# Solution.py
from base64 import *
s = ""
with open('flag_encode.txt', 'r') as file:
    s = bytes(file.read(),'ascii')
    file.close()

lis1 = [s]
lis2 = []
lis3 = []
lis4 = []
while(1):
	for a in lis1:
		ok = 0
		try:
			lis2.append(b64decode(a).decode('ascii'))
			ok = 1
		except:
			pass
		try:
			lis2.append(b32decode(a).decode('ascii'))
			ok = 1
		except:
			pass
		try:
			lis2.append(b16decode(a).decode('ascii'))
			ok = 1
		except:
			pass
		if not ok:
			lis3.append(a)
	if not len(lis2):
		break
	lis1=lis2.copy()
	lis2.clear()
for a in range(0,len(lis3)):
	ok = 1
	for b in lis3[a]:
		if ord(b)>126 or ord(b)<32:
			ok = 0
			break
	if ok:
		lis4.append(lis3[a])
print(lis4)

答案
flag{U_5h0u1d_Us3_T00l5}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值