首页
论坛
课程
招聘
[原创]看雪CTF 2019看雪CTF 晋级赛Q1 第十题 初入好望角 writeup
2019-3-18 19:55 901

[原创]看雪CTF 2019看雪CTF 晋级赛Q1 第十题 初入好望角 writeup

2019-3-18 19:55
901

拿到程序,PE文件,查壳


C#.NET编写,直接用.NET Reflector打开


将接受的字符串与“Kanxue2019”一起传入a(string, string)进行运算后判断,进入 a(string, string)


可以关键部分UTF8,Bytes,加密流,Base64,经分析,逆过程应该为字符串“4RTlF9Ca2+oqExJwx68FiA==”进行base解码后得到一个数组,再讲数组放入加密流中进行解密,再转变成UTF8字符串应该就可以了

先用python进行base64解码

import base64

b = base64.b64decode(b'4RTlF9Ca2+oqExJwx68FiA==')
print('b = ',b)
a = []
for i in b:
    a.append(i)
print(a)

[225, 20, 229, 23, 208, 154, 219, 234, 42, 19, 18, 112, 199, 175, 5, 136]

将两个函数copy到VS2017(.net C#)中修改如下

using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;


class A
{

    public static void Main()
    {
        a();
    }

    private static void a()
    {
        Console.WriteLine("Please Input Serial:");
        if (a(Console.ReadLine(), "Kanxue2019") == "4RTlF9Ca2+oqExJwx68FiA==")
        {
            Console.WriteLine("Congratulations!  : )");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Error\n");
            Console.ReadLine();
        }
    }
    
    public static string a(string A_0, string A_1)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(A_0);
        byte[] bytes1 = { 225, 20, 229, 23, 208, 154, 219, 234, 42, 19, 18, 112, 199, 175, 5, 136 };
        byte[] rgbKey = new PasswordDeriveBytes(A_1, null).GetBytes(0x20);

        RijndaelManaged managed1 = new RijndaelManaged();
        managed1.Mode = CipherMode.CBC;
        MemoryStream stream = new MemoryStream();
        MemoryStream stream0 = new MemoryStream();
        CryptoStream stream1 = new CryptoStream(stream, managed1.CreateEncryptor(rgbKey, Encoding.UTF8.GetBytes("Kanxue2019CTF-Q1")), CryptoStreamMode.Write);
        CryptoStream stream2 = new CryptoStream(stream0, managed1.CreateDecryptor(rgbKey, Encoding.UTF8.GetBytes("Kanxue2019CTF-Q1")), CryptoStreamMode.Write);
        stream1.Write(bytes, 0, bytes.Length);
        stream1.FlushFinalBlock();
        stream2.Write(bytes1, 0, bytes1.Length);
        stream2.FlushFinalBlock();
        byte[] inArray0 = stream0.ToArray();
        byte[] inArray = stream.ToArray();
        Console.WriteLine("inArray0 = ");
        for (int i = 0; i < inArray0.Length; i++)
        {
            Console.Write(inArray0[i] + ",");
        }
        Console.WriteLine("\n");
        Console.WriteLine(inArray0);
        Console.WriteLine(Encoding.UTF8.GetString(inArray0));
        stream.Close();
        stream1.Close();
        return Convert.ToBase64String(inArray);
    }
    

}

即:Kanxue2019Q1CTF,提交,正确




[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!地点:北京 · 新云南皇冠假日酒店

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