wp | 2020纵横杯 | RE
两个题都是原题,然而我第二题祥云杯的原题还是没弄出来。
Re
friendlyRE
这题是一个错题,出题人把!写成了@
先去除花指令。
然后发现有base64的表,跟了一下发现三次对表进行的变换。
- 是相邻两位互换
- 是大小写互换
- 是有一个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!}
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/14193680.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com