兩個題都是原題,然而我第二題祥雲杯的原題還是沒弄出來。
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!}