re | [SCTF2019]Who is he

这是一个winx64的unity逆向。

主要逻辑在Who is he\Who is he_Data\Managed\Assembly-CSharp.dll中,用dnspy反编译得到关键代码:

这里将密文解密后与输入的数据对比。

进入解密函数,发现是DES+base64:

然后用密文反推,写一个脚本,这里c#的字符存储默认为utf16:

 1 from Crypto.Cipher import DES
 2 import base64
 3 
 4 d_flag = b'1Tsy0ZGotyMinSpxqYzVBWnfMdUcqCMLu0MA+22Jnp+MNwLHvYuFToxRQr0c+ONZc6Q7L0EAmzbycqobZHh4H23U4WDTNmmXwusW4E+SZjygsntGkO2sGA=='
 5 
 6 key = b'1\x002\x003\x004\x00'
 7 
 8 generator = DES.new(key, DES.MODE_CBC, iv=key)
 9 flag = generator.decrypt(base64.b64decode(d_flag))
10 
11 print(flag.decode('utf-16'))

得出:He_P1ay_Basketball_Very_We11!Hahahahaha!

然而并不对。

之后参考了这篇文章(https://www.anquanke.com/post/id/181019#h3-15)使用CE去附加查看内存数据【CE奇怪的用法增加了2333

搜索Emmmmm发现4处然后查看内存发现base64的元数据已经不一样了。

再次尝试解密:

得到:Oh no!This is a trick!!!

再找别的,发现密钥和base64都不一样了,再次解密:

得到:She_P1ay_Black_Hole_Very_Wel1!LOL!XD!

正确。应该是隐藏在了某个别的dll之中。

从CE中将完整的dll dump下来,然后再用dnspy打开,可以看到基本一致的解密方式。

 

这时候再回去找源文件:unityengine.umbramodule:

尝试用dnspy打开但是发现不是PE文件,可能是经过了加密或者其他处理,就没有深究了。

 

posted @ 2020-10-07 14:49  Mz1  阅读(518)  评论(3编辑  收藏  举报