wp | 2020纵横杯 | RE

两个题都是原题,然而我第二题祥云杯的原题还是没弄出来。

Re

friendlyRE

这题是一个错题,出题人把!写成了@

先去除花指令。

然后发现有base64的表,跟了一下发现三次对表进行的变换。

  1. 是相邻两位互换
  2. 是大小写互换
  3. 是有一个32位的偏移

所以首先针对base64进行处理,脚本如下:

import base64
a = "N25IKJBC5IyHav9+ZA3aqm=="
table1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
table2 = "ghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"
b = ""
print(a)

for i in a:
if ord(i) >= ord('a') and ord(i) <= ord('z'):
b += chr(ord(i)-32)
elif ord(i) >= ord('A') and ord(i) <= ord('Z'):
b += chr(ord(i)+32)
else:
b += i
print(b)

a = ""

for i in range(0,len(b),2):
a += b[i+1]
a += b[i]
print(a)
b = ''
for i in range(len(a)-2):
tmp = table2.index(a[i])
b += table1[tmp]

b+='=='
print(b)
# 解码
x = base64.b64decode(b)
print(x)
print(len(x))
with open('en.txt', 'w') as f:
for i in x:
f.write(str(hex(i))[2:])
f.write(' ')

将源数据从文件中取出来。

跟进加密的模块,发现一个256大小的int型数组,和一个大小为4的固定数组,很容易识别为sm4算法。

使用pysm4对上面得出的明文进行解密,密钥即为图中的局部变量字符串:

图片

随后再捕获异常进行base64编码。

一开始base表中4和5写反了导致怎么出来都是乱码,耽误了很多时间......

sm4的解密脚本如下:

from pysm4 import decrypt
en = 0x5870990c4f3b099078d6079ce93817b3
key = 0x546869736973696e7374657265737468
de = decrypt(en, key)
print hex(de)[2:-1]

得到结果:446f796f754b6e6f7756454853454821
然后转字符串就好了:

图片

加上flag{}

最终flag为flag{DoyouKnowVEHSEH!}

posted @ 2020-12-26 18:06  Mz1  阅读(386)  评论(3编辑  收藏  举报