[ACTF新生赛2020]easyre
enc='~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\0x27&%$# !"'
v4='''*F'\"N,\"(I?+@'''
v4=list(map(ord,v4))
print(v4)
#( v4[i] != _data_start__[*((char *)v5 + i) - 1] )
flag=list('ACTF{')+['']*12+['}']
print(flag)
#['A', 'C', 'T', 'F', '{', '', '', '', '', '', '', '', '', '', '', '', '', '}']
for i in range(12):
flag[i+5]=chr(ord(enc[v4[i]])+1)
print(''.join(flag))
就是一个下标匹配的题
要注意的是字符串都是在 0 处结束,不要少取了
凯撒
也可以直接爆破
[V&N2020 公开赛]strangeCpp
flag 寻找题,估计是藏到那个不明显函数里去了
中间这个数组很可疑,去跟踪一下
估计是要求这个 dword_7ff
hh=0x123
v5=0x242ee21a
for i in range(0,14549743):
if (i<<8)^(i>>12)==v5//hh:
print(i)
break
也是没跑出来
因为 python 的 int 类型没有位数限制
在左移 8 位和乘 291 时都不存在截断和溢出,所以需要手动给他截断一下(& 0xFFFFFFFF)
((i << 8) ^ (i >> 12)) * 291 & 0xFFFFFFFF == 607052314
还是要这么写,得到 123456
key = 0
for i in range(14549744):
if ((i << 8) ^ (i >> 12)) * 291 & 0xFFFFFFFF == 607052314:
key = i
print ("Key: " + str(key))
break
data=[ 0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 0x04, 0x75, 0x68, 0x34,
0x28, 0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D]
for i in range(len(data)):
print(chr((data[i]^key)&0xff),end='')
# ensure range:0-255
#
# flag{MD5(theNum)}
123456进行 md5加密,取 32位小写的
[V&N2020 公开赛]CSRe
一些莫名其妙的东西,要么是有壳,要么是被混淆了
这个函数还怪多的,应该是被混淆了
需要用到 de4dot 工具
de4dot xxx.exe
需在de4dot.exe目录下进入命令行,会在xxx.exe文件目录下生成一个xxx-clean.exe
.net 写的程序在 dnspy 或者 Reflector 打开
得到 314159 ,return
要记得去掉 3,9,re