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}