unity
用dnspy打开Assembly-CSharp.dll,分析主要加密
分析加密函数,DES加密(key和vi一样),和Base64
根据已知数据解密 ,但是在C#中,字符串默认是Unicode字符串,所以转成字节数组,在每个字符字节后都要加一个"\x00"
from Crypto.Cipher import DES
import base64
d_flag = b'1Tsy0ZGotyMinSpxqYzVBWnfMdUcqCMLu0MA+22Jnp+MNwLHvYuFToxRQr0c+ONZc6Q7L0EAmzbycqobZHh4H23U4WDTNmmXwusW4E+SZjygsntGkO2sGA=='
key = b'1\x002\x003\x004\x00'
generator = DES.new(key, DES.MODE_CBC, iv=key)
flag = generator.decrypt(base64.b64decode(d_flag))
print(flag.decode('utf-16'))
得到He_P1ay_Basketball_Very_We11!Hahahahaha!
提示错误的flag
用cheat engine 搜索Emmmm查看内存。
发现两处已经改变的 加密数据 以及密钥,将这两段数据套入上面的脚本
第一个得到Oh no!This is a trick!!!
第二个跑出来得到flag
flag{She_P1ay_Black_Hole_Very_Wel1!LOL!XD!}
参考
re | [SCTF2019]Who is he - Mz1 - 博客园
补充:注意有的具体加密逻辑可能定义在接口dll文件之中,用IDA分许相应的DLL文件