首页
论坛
课程
招聘
[原创]看雪CTF2019 第十题 初入好望角
2019-3-14 17:03 727

[原创]看雪CTF2019 第十题 初入好望角

2019-3-14 17:03
727
用ILSpy打开程序,看到主函数反编译代码如下:

其中调用了一个关键函数,将用户输入字符串与 "Kanxue2019"当作参数传进去,若返回的字符串为 "4RTlF9Ca2+oqExJwx68FiA==",则验证成功。
根据字符串 "4RTlF9Ca2+oqExJwx68FiA=="的特征,初步估计是经过base64转码的结果。
关键函数的反编译代码如下:

算法如下:先将字符串"Kanxue2019CTF-Q1"和字符串"Kanxue2019"转换成字节序列,然后将两个字节序列作为Rijndael加密算法的Key和Iv,然后对用户输入的字符串进行加密,最后返回加密结果的base64编码。
于是解密过程就是构造相应的解密算法,c#源码如下:
static void Main(string[] args)
        {
            byte[] b1 = Encoding.UTF8.GetBytes("Kanxue2019CTF-Q1");
            byte[] b2 = new PasswordDeriveBytes("Kanxue2019", null).GetBytes(32);

            ICryptoTransform transform = new RijndaelManaged
            {
                Mode = CipherMode.CBC
            }.CreateDecryptor(b2, b1);

            byte[] b = Convert.FromBase64String("4RTlF9Ca2+oqExJwx68FiA==");
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write);
            cryptoStream.Write(b, 0, b.Length);
            cryptoStream.FlushFinalBlock();
            byte[] inArray = memoryStream.ToArray();

            for (int i = 0; i < inArray.Length; ++i)
            {
                char c = (char)inArray[i];
                Console.Write(c);
            }

            Console.ReadKey();
        }
最后结果为:Kanxue2019Q1CTF

2020 KCTF秋季赛【攻击篇】正在火热进行中!

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回