首页
社区
课程
招聘
[原创]2019看雪CTF 晋级赛Q1 第10题
发表于: 2019-3-23 13:10 2995

[原创]2019看雪CTF 晋级赛Q1 第10题

2019-3-23 13:10
2995
private static void a(string[] A_0)
{
    Console.WriteLine("Please Input Serial:");
    if (a(Console.ReadLine(), "Kanxue2019") == "4RTlF9Ca2+oqExJwx68FiA==")
    {
        Console.WriteLine("Congratulations!  : )");
        Console.ReadLine();
    }
}
如果a函数的返回值为 “4RTlF9Ca2+oqExJwx68FiA==”表示成功。看一下a函数,如下:
public static string a(string A_0, string A_1)
{
    byte[] bytes = Encoding.UTF8.GetBytes("Kanxue2019CTF-Q1");
    byte[] buffer = Encoding.UTF8.GetBytes(A_0);
    byte[] rgbKey = new PasswordDeriveBytes(A_1, null).GetBytes(0x20);
    ICryptoTransform transform = new RijndaelManaged { Mode = CipherMode.CBC }.CreateEncryptor(rgbKey, bytes);
    MemoryStream stream = new MemoryStream();
    CryptoStream stream1 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
    stream1.Write(buffer, 0, buffer.Length);
    stream1.FlushFinalBlock();
    byte[] inArray = stream.ToArray();
    stream.Close();
    stream1.Close();
    return Convert.ToBase64String(inArray);
}


public static string a(string A_0, string A_1)
{
    byte[] bytes = Encoding.UTF8.GetBytes("Kanxue2019CTF-Q1");
    byte[] buffer = Encoding.UTF8.GetBytes(A_0);
    byte[] rgbKey = new PasswordDeriveBytes(A_1, null).GetBytes(0x20);
    ICryptoTransform transform = new RijndaelManaged { Mode = CipherMode.CBC }.CreateEncryptor(rgbKey, bytes);
    MemoryStream stream = new MemoryStream();
    CryptoStream stream1 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
    stream1.Write(buffer, 0, buffer.Length);
    stream1.FlushFinalBlock();
    byte[] inArray = stream.ToArray();
    stream.Close();
    stream1.Close();
    return Convert.ToBase64String(inArray);
}


看起来是使用标准的.net加密算法进行加密。其中“Kanxue2019”作为秘钥,用户输入作为被加密的数据。
1、将 “Kanxue2019” 转换为utf8字节数据。 (bytes)
2、 将用户输入转换为utf8字节数据。  
3、调用 PasswordDeriveBytes函数产生一个rgbKey
4、使用 bytes与 rgbKey 作为输入调用RijndaelManaged产生一个 ICryptoTransform transform
5、new 一个  MemoryStream()
6、new  RijndaelManaged,调用CryptoStream 的write进行数据加密
7、将加密后的数据转换成base64,返回。
8、结果为“ “4RTlF9Ca2+oqExJwx68FiA== ”即可。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-3-23 13:14 被ODPan编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//