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文件,可能是经过了加密或者其他处理,就没有深究了。
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/13777354.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com