sign_in
拖入exe
然后拖入ida32直接得到flag
flag{really_sign_in}
ezpyc
下载下来是pyc文件直接放入pyc文件夹下
在终端cmd执行指令pycdc.exe+文件名
由上图分析得到 这个password经过第一个tmp转化成长整型
ans是一个先base58加密然后base64加密的过程
逆过程过来就是将ans先base64解码然后base58解码
直接放入赛博厨子
得到一个数字串22385992650816784030032474165,但是还要变成长整型
找一个变成长整型的代码得到一串字符然后
from Crypto.Util.number import long_to_bytes
password = '22385992650816784030032474165'
password_int = int(password)
tmp = long_to_bytes(password_int)
print(tmp) #b'HUBUCTF@1405'
根据题目信息md5
还是赛博厨子
得到flag {fd78ee3399dd6a3c1d0b637fdca0c075}
ezre
本题考察rc4和base64但是这个base64有改
拖入exe
拖入ida64然后分析,F5进入伪代码
前两个函数加起来就是一个rc4加密
第三个函数是一个base64没有改表就是把四个字符一组换成了三个字符一组
# base64部分解密
x = "Z`TzzTrD|fQP[_VVL|yneURyUmFklVJgLasJroZpHRxIUlH\\vZE=" # 注:'\'在字符串中要用'\\'表示
flag = ""
for i in range(0, len(x), 4):
flag += hex(((ord(x[i]) - 61) & 0x3f) << 2 | ((ord(x[i + 1]) - 61) & 0x30) >> 4) + ' '
flag += hex(((ord(x[i + 1]) - 61) & 0xf) << 4 | ((ord(x[i + 2]) - 61) & 0x3c) >> 2) + ' '
flag += hex(((ord(x[i + 2]) - 61) & 0x3) << 6 | (ord(x[i + 3]) - 61) & 0x3f) + ' '
# RC4解密
c = flag.split(' ')
input = [0] * 39
for i in range(len(c) - 1):
input[i] = c[i]
print(input) # 得出密文
t = []
key = [0x10, 0x20, 0x30, 0x30, 0x20, 0x20, 0x10, 0x40] # 密钥
ch = ''
j = 0
s = list(range(256))
for i in range(256): #将s盒打乱
j = (j + s[i] + (key[i % len(key)])) % 256
s[i], s[j] = s[j], s[i]
i = 0
j = 0
for k in input: #得到密钥
i = (1 + i) % 256
j = (j + s[i]) % 256
s[i], s[j] = s[j], s[i]
x = (s[i] + (s[j] % 256)) % 256
ch += chr(eval(k) ^ s[x])
print(ch) #flag{e10adc3949ba59abbe56e057f20f883e}
flag{e10adc3949ba59abbe56e057f20f883e}