Who is he
基于unity開發的游戲,實際只有一個視頻播放器,輸入框和一個確認框。
找了下資料,默認<Game>_dataManagedAssembly-CSharp.dll應該是存放主邏輯的地方。dnspy一把梭。
只是一個DES CBC模式的加密,密文密鑰都有,初始iv和key相同。注意C#里面字符串默認是Unicode,密鑰是”1234“,每個字符后面都要加”x00”。
import base64
from Crypto.Cipher import DES
key = b"1x002x003x004x00"
des = DES.new(key, mode = DES.MODE_CBC, iv = key)
cipher = b"1Tsy0ZGotyMinSpxqYzVBWnfMdUcqCMLu0MA+22Jnp+MNwLHvYuFToxRQr0c+ONZc6Q7L0EAmzbycqobZHh4H23U4WDTNmmXwusW4E+SZjygsntGkO2sGA=="
cipher = base64.b64decode(cipher)
plain = des.decrypt(cipher)[0:-8].decode("utf-16")
print(plain)
解出來得到
He_P1ay_Basketball_Very_We11!Hahahahaha!
交一下發現不對,找了半天好像這個dll里沒什么奇怪的地方了。
后面用ce,直接暴力搜索”Emmmmm”

搜到不止一個結果,在內存中查看一下有新的收獲,這里base64的部分和之前dll里的不一樣!一共有兩個地方不同,先嘗試直接解密。第一個得到:
Oh no!This is a trick!!!
第二個不知base64改了,key也改成了test。
解密之后得到:
She_P1ay_Black_Hole_Very_Wel1!LOL!XD!
提交正確。腳本:
import base64
from Crypto.Cipher import DES
key = b"tx00ex00sx00tx00"
# print(a)
# print(key)
des = DES.new(key, mode = DES.MODE_CBC, iv = key)
a = b"xZWDZaKEhWNMCbiGYPBIlY3+arozO9zonwrYLiVL4njSez2RYM2WwsGnsnjCDnHs7N43aFvNE54noSadP9F8eEpvTs5QPG+KL0TDE/40nbU="
a = base64.b64decode(a)
res = des.decrypt(a)[0:-6].decode("utf-16")
print(res)
繼續在ce的內存中翻找,可以看到pe頭。把整個dll dump下來,再丟盡dnspy,可以看到內容基本一致。
2019SCTF-Writeup